Skip to content

fix(web): better right panel (new diffs styling) - #5260

Merged
juliusmarminge merged 15 commits into
pingdotgg:mainfrom
maria-rcks:agent/polish-right-panel-diff-ui
Aug 4, 2026
Merged

fix(web): better right panel (new diffs styling)#5260
juliusmarminge merged 15 commits into
pingdotgg:mainfrom
maria-rcks:agent/polish-right-panel-diff-ui

Conversation

@maria-rcks

@maria-rcks maria-rcks commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Problem

The right-panel tabs and diff chrome had inconsistent sizing and spacing, with the close affordance reserving extra trailing space. Diff rows, controls, separators, and loading skeletons also no longer matched the darker panel treatment. Expanding a file could shift the list upward because the virtualizer's bottom padding disagreed with its sticky-item measurements.

Solution

  • compact the panel tabs and replace each leading icon with the close control on hover
  • use consistent 8px outer insets and align the diff toolbar with the title-bar controls
  • flatten diff backgrounds and borders, and render unmodified-line counts as inline dividers
  • remove the virtualizer padding mismatch and keep selected-file reveal scrolling stable
  • update the loading skeleton to mirror the current diff layout

Validation

  • Browser E2E measurements on small and large diffs: 0px movement for the toolbar, first file row, panel root, and scroll position when files expand
  • vp lint apps/web/src/components/ChatView.tsx apps/web/src/components/DiffPanel.tsx apps/web/src/components/DiffPanelShell.tsx apps/web/src/components/RightPanelTabs.tsx
  • vp run --filter @t3tools/web typecheck
  • vp test run apps/web/src/lib/diffCollapse.test.ts apps/web/src/lib/diffRendering.test.ts apps/web/src/diffPanelStore.test.ts apps/web/src/rightPanelStore.test.ts (44 tests)
before after
image image
image image

Model: GPT-5.6 Sol via Codex harness.

Note

Add diff file content expansion and refresh to the right panel diff view

  • Adds a getDiffFileContents RPC (server, contracts, client) that fetches old/new file text for a diff entry, with per-side 1 MB limits, binary rejection, path-containment checks, and support for both working-tree and branch-range sources.
  • DiffPanel now lazily loads per-file contents, auto-refreshes on window focus and after a new turn completes, and exposes a manual refresh button with a spinner.
  • AnnotatableCodeView switches from onLineSelectionEnd to onGutterUtilityClick to trigger comments, lifts draft text state up, and accepts a codeViewKey prop to force remounts.
  • LocalCommentAnnotation supports a controlled onTextChange/text prop pair and simplifies saved-comment rendering (no header or range label).
  • Diff panel visuals are updated: new CSS theming, selected-line highlight bars, improved skeleton loading state, and restyled tab close affordance at the leading edge.
  • Behavioral Change: onLineSelectionEnd no longer creates comments in AnnotatableCodeView; gutter clicks are now the sole trigger.

Macroscope summarized 13c8279.


Note

Medium Risk
New server path reads git revisions and the working tree from user-supplied paths; mitigations exist (workspace root, realpath containment) but this expands the review attack surface. Large UI/CSS and comment-interaction changes affect core diff viewing behavior.

Overview
Adds review.getDiffFileContents end-to-end (contracts, WS RPC, auth, ReviewService, Git driver) so the diff panel can hydrate full old/new file text when expanding unchanged regions in working-tree and branch-range previews, with workspace-bound cwd, repo-root path checks, binary rejection, and a 1 MB per-side cap.

DiffPanel wires Pierre’s loadDiffFiles to that command for git scopes (not turn checkpoints), adds a manual Refresh diff control plus auto-refresh on window focus and when the latest completed turn changes, and refreshes diff styling (flat backgrounds, inline “N unmodified lines” separators, tighter headers/metrics, codeViewRevision remount when collapsing all files).

Right-panel chrome is tightened: smaller tabs with hover-to-close on the leading icon, title-bar control positioning when the panel is open, and updated loading skeletons. Diff comments now start from gutter utility clicks (not line-selection end), with simplified inline draft/saved annotation UI and lifted draft text state.

Reviewed by Cursor Bugbot for commit 13c8279. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 358cd34c-18d8-43d5-81ca-64ba4a52983c

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Aug 3, 2026
Comment thread apps/web/src/components/DiffPanel.tsx
@maria-rcks maria-rcks changed the title fix(web): polish right panel diff layout fix(web): better right panel (new diffs styling) Aug 3, 2026
@maria-rcks
maria-rcks marked this pull request as ready for review August 3, 2026 06:55
Comment thread apps/web/src/components/ChatView.tsx
@macroscopeapp

macroscopeapp Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs human review

This PR introduces a new diff file expansion feature with a new RPC endpoint, server-side file reading logic with path traversal protections, and new UI behaviors — significantly more than the 'styling' title suggests. The security-sensitive file reading code and scope of new capability warrant human review.

You can customize Macroscope's approvability policy. Learn more.

@maria-rcks
maria-rcks force-pushed the agent/polish-right-panel-diff-ui branch from f862182 to a764454 Compare August 3, 2026 07:10
@github-actions github-actions Bot added size:XL 500-999 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Aug 4, 2026
Comment thread apps/web/src/components/DiffPanel.tsx

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new ReviewService.getDiffFileContents path: the workspace-boundary failure it produces reports the wrong operation/detail, so the caller-visible error identifies getDiffPreview instead of the failing operation. Inline comment has the suggested fix.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/server/src/review/ReviewService.ts Outdated
Comment thread apps/web/src/components/DiffPanel.tsx
Comment thread apps/web/src/components/DiffPanel.tsx

@macroscopeapp macroscopeapp Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One finding on the new Git review-diff file-contents path. See the inline comment.

Posted via Macroscope — Effect Service Conventions

Comment thread apps/server/src/vcs/GitVcsDriverCore.ts
Comment thread apps/web/src/components/diffs/AnnotatableCodeView.tsx
@github-actions github-actions Bot removed the size:XL 500-999 changed lines (additions + deletions). label Aug 4, 2026
juliusmarminge added a commit that referenced this pull request Aug 10, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
adamfgr pushed a commit to agriffiths-bots/t3code that referenced this pull request Aug 11, 2026
* fix(desktop): allow updater-controlled relaunch (pingdotgg#4721)

* fix(web): prevent diff panel scroll jumping (pingdotgg#4724)

* Link inline code file paths in chat markdown (pingdotgg#4726)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Android showcase capture and rebuild v2 queued rows (pingdotgg#4730)

Co-authored-by: Claude <noreply@anthropic.com>

* perf(server): negotiate permessage-deflate on the websocket (pingdotgg#4705)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: overhaul agent guidance (pingdotgg#4782)

* Prevent sidebar row labels from truncating (pingdotgg#4789)

* perf(server): gzip large thread snapshots (pingdotgg#4788)

* fix(web): stashed prompts now survive switching providers (pingdotgg#4787)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Fix Git ref refresh resource storms (pingdotgg#4727)

Co-authored-by: codex <codex@users.noreply.github.com>

* perf(server): trim stale context-window rows and drop dead replay RPC (pingdotgg#4791)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): defer command palette filesystem navigation (pingdotgg#2109)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(release): skip scripts during Vercel installs (pingdotgg#4796)

* refactor(client): share filesystem browse navigation (pingdotgg#4797)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): defer filesystem navigation (pingdotgg#4799)

Co-authored-by: codex <codex@users.noreply.github.com>

* refactor(server): use native HTTP compression streams (pingdotgg#4798)

Co-authored-by: codex <codex@users.noreply.github.com>

* Remove Connect waitlist and add GA announcement tooling (pingdotgg#4691)

* Fix Connect sign-in settings label (pingdotgg#4806)

* chore(release): prepare v0.0.30

* fix(desktop): restore T3 Connect sign-in (pingdotgg#4809)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Simplify files panel header (pingdotgg#4828)

* build(desktop): reduce installed app size by ~300MB (pingdotgg#4824)

* Update model version from claude-opus-4-8 to claude-opus-5 (pingdotgg#4832)

* Preserve the thread shell while detail loads (pingdotgg#4830)

* Reduce idle work and disk churn with native resource diagnostics (pingdotgg#2679)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(server): detect repositories after initialization (pingdotgg#4848)

* perf(server): merge separate staged/unstaged numstat calls into single diff HEAD --numstat (pingdotgg#4843)

* fix(git): disable external diff for review diff previews (pingdotgg#4854)

* Fix editable file focus and live syntax highlighting (pingdotgg#3979)

* fix(web): remember the rendered-markdown choice across threads (pingdotgg#4853)

Co-authored-by: Simon Doba <simon.doba@orbit.de>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* chore(release): prepare v0.0.31

* fix(mobile): reduce thread feed scroll jank (pingdotgg#4874)

* fix(web): restore sidebar v2 thread actions and terminal icon (pingdotgg#4712)

* fix(web): settle button now works on hover, not just right-click (pingdotgg#4905)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(clients): disable add project while disconnected (pingdotgg#4834)

* fix(composer): hide default Codex service tier (pingdotgg#4784)

* docs: link iOS and Android app store downloads (pingdotgg#4902)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): align remote server update action (pingdotgg#4731)

* fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943)

* perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show Codex fast mode as a bolt (pingdotgg#4947)

* docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): support dragged images in the composer (pingdotgg#4953)

* fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(mobile): reconnect environments immediately on resume (pingdotgg#4878)

* feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): regenerate thread titles from sidebar (pingdotgg#4810)

* fix(web): show server update progress through reconnect (pingdotgg#4903)

* feat(search): find threads by conversation content (pingdotgg#4959)

* fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): server updates no longer look like warnings (pingdotgg#4992)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Check for mobile app updates on launch (pingdotgg#4958)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984)

* fix(server): restore PR detection without HOME (pingdotgg#4985)

* fix(web): fill fast mode icon (pingdotgg#5004)

* fix: cache project favicons across web and mobile (pingdotgg#4767)

* perf(ci): cut stale runs and redundant setup (pingdotgg#4802)

* chore(mobile): bump app version to 1.0.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style(web): make scroll-to-end pill translucent (pingdotgg#5036)

* fix(ci): drop sparse-checkout from EAS workflows

actions/checkout implements sparse-checkout with --filter=blob:none, so
the runner repo is a partial clone missing the .repos/ blobs. eas-cli
archives the project via `git clone --depth 1 file://<workspace>`,
which upload-pack cannot serve from a partial clone and exits 128
(pingdotgg#4802 broke both EAS build workflows this way).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008)

* feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): remove unnecessary photo library permission (pingdotgg#4929)

* fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990)

* fix(mobile): restore iOS Threads branding (pingdotgg#4862)

* chore: add mobile issue template area (pingdotgg#4895)

* fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(mobile): accept Android clipboard images in composer (pingdotgg#4836)

* fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861)

* fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057)

* fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065)

* fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066)

* feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): render terminals with libghostty-vt (pingdotgg#4860)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): add thread snoozing (pingdotgg#5053)

* feat(mobile): make settled threads collapsible (pingdotgg#5056)

* follow-up normalization after pingdotgg#4700. (pingdotgg#4498)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* feat(web): search threads from the sidebar (pingdotgg#4769)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): add settings sidebar search (pingdotgg#4682)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: threads with open PRs no longer auto-settle (pingdotgg#5151)

* fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): make remote updates rollback-safe (pingdotgg#5181)

* fix(web): stop settle controls overlapping the status label (pingdotgg#4574)

* fix: normalize app icon glyph sizing (pingdotgg#5202)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217)

Co-authored-by: Claude <noreply@anthropic.com>

* feat: fold legacy models into separate menus (pingdotgg#5190)

* fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054)

* fix(web): polish interface spacing (pingdotgg#5252)

* fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): match loading screen to dark theme (pingdotgg#5303)

* fix(web): blink the terminal cursor again (pingdotgg#5314)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322)

* fix(server): strip replayable terminal queries from history (pingdotgg#5319)

* fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>

* fix(web): simplify chat code blocks (pingdotgg#5301)

* fix(web): align multiline error alert controls (pingdotgg#5304)

* Upgrade Effect to beta.103 (pingdotgg#5331)

* fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326)

* fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(ssh): isolate managed tunnel processes (pingdotgg#4347)

* fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586)

* fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353)

* fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): generate durable thread titles (pingdotgg#5357)

* fix(web): better right panel (new diffs styling) (pingdotgg#5260)

* fix(server): keep regenerated titles on topic (pingdotgg#5365)

* refactor(server): make title prompts plaintext (pingdotgg#5368)

* feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703)

* fix(web): prevent legacy model picker layout shift (pingdotgg#5349)

* fix(server): allow remote updates with database migrations (pingdotgg#5374)

* fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128)

* fix(web): clear main branch lint warnings (pingdotgg#5384)

* fix(mobile): preserve grouped project workspaces (pingdotgg#4642)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* fix(mobile): prevent Android thread search crash (pingdotgg#5386)

* fix(web): truncate long project switcher names (pingdotgg#5348)

* fix(mobile): avoid double dividers between thread sections (pingdotgg#5391)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336)

* fix(web): restore terminal link hover styles (pingdotgg#5382)

* fix(ci): isolate releases from shared API rate limits (pingdotgg#5394)

* fix(web): keep model picker shortcuts in sync (pingdotgg#5400)

* fix(web): keep terminal font settings reliable (pingdotgg#5397)

* Enrich terminal font previews (pingdotgg#5428)

* fix(web): preserve terminal font size when splitting (pingdotgg#5444)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* Prevent terminal loading flash (pingdotgg#5432)

* fix: reconnect faster after remote server updates (pingdotgg#5404)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: native subagent & workflow observability (pingdotgg#5219)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: respect time format for sidebar snooze (pingdotgg#4438)

* fix(web): calm one-row server update status and banner

The version-skew banner is no longer an amber warning: it reads
"Server update available" with the raw versions (unreadable for
nightlies) moved to a tooltip. The in-flight rail (Download/Install/
Resume) becomes a single status row, "Downloading…" then
"Restarting…", since the wire installing stage is a sub-second
launcher handoff and "resuming" meant nothing to most people.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(server): keep the managed tunnel across remote update restarts

Measured on a live update: the server was back in ~9s but stayed
unreachable for ~96s, because releasing the tunnel on shutdown forces
the replacement tunnel's hostname route through 1-2 minutes of edge
propagation. An update handoff always brings a server right back
(new version or rollback), so the tunnel is never orphaned; skip the
release when the launcher state file records a pending update. The
next boot respawns the connector from the stored config against the
same tunnel and is reachable as soon as it connects.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* test(server): use the launcher state writer in release tests

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(server): release the tunnel when an explicit stop interrupts an update

A pending update in the launcher state is not proof a replacement
server is coming: `t3 service uninstall` or `systemctl stop` during
the pending window also tears the server down, permanently. The
launcher now writes a stop marker before signalling its child on an
explicit stop and clears it on the next start; the shutdown tunnel
release keeps the tunnel only for pending updates without the marker.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(server): clean up interrupted update trials

* fix(server): order explicit service shutdown

* fix(web): make update version tooltips accessible

* fix(server): separate trial cleanup from handoff retention

* fix(server): drop superseded tool updates from snapshots

A tool.updated row is the in-flight snapshot of a call; once the call
completes, the tool.completed row carries the final state and both
clients fold every matching update into it. Shipping the updates buys
nothing: 47k such rows exist in one real database, and a single thread
carries 3,291 of them.

Filter them out of thread snapshots, mirroring the existing
context-window dedup. Matching is per turn and only against a LATER
completion, so a revert that discards the completing turn cannot leave
a call unrepresented, and a later update under the same identity (the
next call, still in flight) survives. Live events are untouched.

Rows are matched on the same identity the clients collapse by: an
explicit data.toolCallId when the adapter emits one, otherwise the
itemType/title/detail triple. No tool lifecycle row in the real db
carries a toolCallId, so the fallback does the work.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(server): pin interleaved-collapse divergence as intentional with test

Bugbot flagged that clients collapse only adjacent lifecycle rows, so
dropping a superseded update separated by an interleaved parallel call
diverges from full-history rendering. Measured on a real database: 1.5%
of dropped rows (553/36,581), all pure in-flight state whose final result
the retained completion still shows, and zero dropped rows carry a
client-merged payload field their completion lacks (verified across all
49,515 update rows). Documents the tradeoff and adds a test pinning it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(web): clarify auto permission fallback (pingdotgg#5431)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(acp): keep unknown approvals actionable (pingdotgg#5430)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(web): align composer inline chips with prompt text (pingdotgg#5495)

* fix(web): clear woke state on explicit thread actions (pingdotgg#5486)

* fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show remote environment for non-Git projects (pingdotgg#5555)

* fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560)

* fix(server): let stopped threads settle immediately (pingdotgg#5553)

* feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: prevent reconnect loops during server stalls (pingdotgg#5561)

Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* fix(server): settle stopped Claude subagents (pingdotgg#5568)

* fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572)

Co-authored-by: Claude <noreply@anthropic.com>

* test(server): catch client transfer regressions in CI (pingdotgg#5350)

* fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): keep agent panel rows stable (pingdotgg#5569)

* docs: ship production T3 Connect public config in .env.example (pingdotgg#5573)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): per-device provider settings (pingdotgg#4479)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)

* fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(web): add modular theme library (pingdotgg#5226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>

* fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(dev): faster cold-start for dev web serving (pingdotgg#5584)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(dev): Improve instructions for --share (pingdotgg#5586)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): improve keyboard avoiding (pingdotgg#5451)

* fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stabilize chat timeline positioning (pingdotgg#5449)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(web): thread actions from the chat header title (pingdotgg#5592)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440)

* fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415)

* fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582)

* fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140)

Co-authored-by: codex <codex@users.noreply.github.com>

* Bump mobile app version to 1.0.2 (pingdotgg#5588)

* feat(web): click the pin icon to unpin a thread (pingdotgg#5578)

* fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594)

* chore(release): prepare v0.0.32

* fix(mobile): reconnects no longer shift the thread list (pingdotgg#5372)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(web): drag pinned threads into your own order (pingdotgg#5581)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(ci): vouch StiensWout (pingdotgg#5637)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)

* chore: vouch chrisdeeming (pingdotgg#5641)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(web): make sidebar artwork theme-aware (pingdotgg#5636)

* fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)

* fix(web): show Stop button while input is pending (pingdotgg#5554)

* feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: sidebar v2 is now the default sidebar (pingdotgg#5672)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): delay transient reconnect warnings (pingdotgg#5670)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): inherit terminal size in simple typography (pingdotgg#5628)

* fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): one sheet for model and thread settings (pingdotgg#5625)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(usage): usage page reading provider transcripts across environments (pingdotgg#5684)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): usage chart no longer makes Claude look like the bigger spender (pingdotgg#5697)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): persist diff view mode (pingdotgg#5731)

* feat(web): show how many subagents are running at a glance (pingdotgg#5745)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): add missing cursor-pointer styling to dropdowns and interactive buttons (pingdotgg#5716)

* fix(server): stop Claude resume handshakes from completing turns that never ran (pingdotgg#5710)

Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore: vouch gfsaaser24 (pingdotgg#5761)

* chore: vouch saphid (pingdotgg#5763)

* fix(server): stop Codex threads with queued follow-ups (pingdotgg#5762)

* fix(web): usage page loses the cost quality panel, gains a back button (pingdotgg#5756)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(server): agents can now open the images you paste into chat (pingdotgg#5757)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): pinned reorder no longer reshuffles while writes land (pingdotgg#5767)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): overhaul project settings into a real settings page (pingdotgg#5768)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): usage totals no longer jump while devices report in (pingdotgg#5772)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): settle no longer leaves monitors and dev servers running (pingdotgg#5774)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: pick worktree or current checkout per project (pingdotgg#5766)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): sidebar rows show the branch again, not a truncated plan step (pingdotgg#5776)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(server): vp run migrate-dev-db seeds worktree dev dbs with real data (pingdotgg#5773)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): keep unsent drafts one click away in the sidebar (pingdotgg#5777)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): project icons can be chosen manually (pingdotgg#5775)

* fix(server): one greedy agent process no longer takes down the whole server (pingdotgg#5788)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* ci: label-gated hosted-web preview deploys (pingdotgg#5465)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add cross-platform mobile usage dashboard (pingdotgg#5743)

* fix repository agent context symlink

* fix hosted desktop build after upstream sync

* fix credentialed PWA build probe

* ci: use fork-supported runners

* fix(ci): resolve post-sync deterministic failures

* test(ci): align release assertions with upstream

* test(web): budget slow image compression case

* ci: size aggregate test budget for fork runners

* fix(server): restore atomic git ref snapshots

---------

Co-authored-by: jan <hi@4bs3nt.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: wukko <me@wukko.me>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: ohbentos <72638975+ohbentos@users.noreply.github.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Simon Doba <simon.doba@hotmail.de>
Co-authored-by: Simon Doba <simon.doba@orbit.de>
Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com>
Co-authored-by: Jono Kemball <Noojuno@users.noreply.github.com>
Co-authored-by: Max Katz <me@maxkatz.me>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com>
Co-authored-by: Elaine Lyons <elaine@lyons.app>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Max Anderson <max.a.anderson95@gmail.com>
Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com>
Co-authored-by: Mike Olson <mwolson@member.fsf.org>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: T3 Code Test <t3code-test@example.com>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: naMqe <naMqe07@gmail.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com>
Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com>
Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com>
Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com>
Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency>
Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Mateleo <mateleo78@gmail.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Jay Meistrich <github@jayz.us>
Co-authored-by: Justyn Leung <justynleung2000@gmail.com>
Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: Chris Deeming <chris@xenforo.com>
Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com>
Co-authored-by: Leonel Rivas <encriptandost@gmail.com>
Co-authored-by: wizzoapp[bot] <254688279+wizzoapp[bot]@users.noreply.github.com>
juliusmarminge added a commit that referenced this pull request Aug 11, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 12, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0xgeorgemathew added a commit to 0xgeorgemathew/t3trade that referenced this pull request Aug 13, 2026
* fix(web): settle button now works on hover, not just right-click (pingdotgg#4905)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(clients): disable add project while disconnected (pingdotgg#4834)

* fix(composer): hide default Codex service tier (pingdotgg#4784)

* docs: link iOS and Android app store downloads (pingdotgg#4902)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): align remote server update action (pingdotgg#4731)

* fix(connect): suggest a serve command that matches how you ran connect (pingdotgg#4897)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): stop shared content errors in Personal Team builds (pingdotgg#4943)

* perf(mobile): sends respond instantly, thread opens stop freezing (pingdotgg#4882)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show Codex fast mode as a bolt (pingdotgg#4947)

* docs: seed worktrees with a copy of real userdata instead of banning it (pingdotgg#4949)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): support dragged images in the composer (pingdotgg#4953)

* fix(mobile): stop long iOS threads from jumping while scrolling up (pingdotgg#4867)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): keep worktree default when switching a draft's machine (pingdotgg#4964)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(mobile): reconnect environments immediately on resume (pingdotgg#4878)

* feat(web): pasting a huge screenshot now compresses it instead of erroring (pingdotgg#4967)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): regenerate thread titles from sidebar (pingdotgg#4810)

* fix(web): show server update progress through reconnect (pingdotgg#4903)

* feat(search): find threads by conversation content (pingdotgg#4959)

* fix: marketing site Vercel builds no longer die after ~100 deploys (pingdotgg#4975)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* docs: split user and maintainer docs, fix 100+ stale claims (pingdotgg#4807)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): server updates no longer look like warnings (pingdotgg#4992)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(connect): reboots no longer strand the relay link, 403s now say why (pingdotgg#4988)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add project file picker (⌘P) and project content search (⇧⌘F) (pingdotgg#4855)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* Check for mobile app updates on launch (pingdotgg#4958)

Co-authored-by: codex <codex@users.noreply.github.com>

* fix(mobile): support pre-Liquid-Glass iOS bottom toolbar (pingdotgg#4984)

* fix(server): restore PR detection without HOME (pingdotgg#4985)

* fix(web): fill fast mode icon (pingdotgg#5004)

* fix: cache project favicons across web and mobile (pingdotgg#4767)

* perf(ci): cut stale runs and redundant setup (pingdotgg#4802)

* chore(mobile): bump app version to 1.0.1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* style(web): make scroll-to-end pill translucent (pingdotgg#5036)

* fix(ci): drop sparse-checkout from EAS workflows

actions/checkout implements sparse-checkout with --filter=blob:none, so
the runner repo is a partial clone missing the .repos/ blobs. eas-cli
archives the project via `git clone --depth 1 file://<workspace>`,
which upload-pack cannot serve from a partial clone and exits 128
(pingdotgg#4802 broke both EAS build workflows this way).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): bump Clerk Electron SDK to 0.0.24 and register t3code:// scheme on Linux (pingdotgg#5015)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(server): cache default branch name and origin existence across status refreshes (pingdotgg#5008)

* feat(shared): support shorthand (major-only) versions in the semver helpers (pingdotgg#5027)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): remove unnecessary photo library permission (pingdotgg#4929)

* fix(shared): lenient JSON parser deletes commas inside string values (pingdotgg#5025)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): default bare IP pairing to HTTP (pingdotgg#4990)

* fix(mobile): restore iOS Threads branding (pingdotgg#4862)

* chore: add mobile issue template area (pingdotgg#4895)

* fix(desktop): link release notes from the update downloaded toast (pingdotgg#4771)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(mobile): accept Android clipboard images in composer (pingdotgg#4836)

* fix(mobile): show the correct build channel in Android's Threads page header (pingdotgg#4861)

* fix(contracts): decode growing config unions forward-compatibly (pingdotgg#5055)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): server model, worktree, and origin preferences now apply to new tasks (pingdotgg#5064)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): repair the mobile showcase screenshots workflow (pingdotgg#5057)

* fix(ci): capture iPad App Store screenshots in landscape (pingdotgg#5065)

* fix(oxlint-plugin): Resolve the oxlint bin without assuming a pnpm layout (pingdotgg#5066)

* feat(cli): `npx t3 pair` - generate QR code from a running server (pingdotgg#4955)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): self-update no longer rolls itself back on restart (pingdotgg#5095)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(ci): rotate iPad showcase captures without Simulator UI scripting (pingdotgg#5094)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): render terminals with libghostty-vt (pingdotgg#4860)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* refactor: move the canonical libghostty-vt vendor to the repository root (pingdotgg#5102)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): add thread snoozing (pingdotgg#5053)

* feat(mobile): make settled threads collapsible (pingdotgg#5056)

* follow-up normalization after pingdotgg#4700. (pingdotgg#4498)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* feat(web): search threads from the sidebar (pingdotgg#4769)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): add settings sidebar search (pingdotgg#4682)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: threads with open PRs no longer auto-settle (pingdotgg#5151)

* fix(server): bound thread catch-up replay and stop full-DB snapshot hydration (pingdotgg#5147)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): follow branch drift in dedicated worktrees so PRs link to their thread (pingdotgg#5159)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): make remote updates rollback-safe (pingdotgg#5181)

* fix(web): stop settle controls overlapping the status label (pingdotgg#4574)

* fix: normalize app icon glyph sizing (pingdotgg#5202)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(server): surface cloudflared FTL/PNC relay logs as warnings, not debug (pingdotgg#5076)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(server): stop npx service updates from silently leaving the old server running (pingdotgg#5217)

Co-authored-by: Claude <noreply@anthropic.com>

* feat: fold legacy models into separate menus (pingdotgg#5190)

* fix(desktop): claim the t3code:// scheme default on Linux at startup (pingdotgg#5054)

* fix(web): polish interface spacing (pingdotgg#5252)

* fix(desktop): Niri/Hyprland - Linux secret storage backend (pingdotgg#2916)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(web): match loading screen to dark theme (pingdotgg#5303)

* fix(web): blink the terminal cursor again (pingdotgg#5314)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(terminal): protect held Ctrl/Cmd+W close shortcut (pingdotgg#5322)

* fix(server): strip replayable terminal queries from history (pingdotgg#5319)

* fix(contracts): decode ServerProviders forward-compatibly (pingdotgg#5327)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>

* fix(web): simplify chat code blocks (pingdotgg#5301)

* fix(web): align multiline error alert controls (pingdotgg#5304)

* Upgrade Effect to beta.103 (pingdotgg#5331)

* fix(web): increase tooltip z-index to overlay popovers and menus (pingdotgg#5326)

* fix(server): use a Cursor todo's title when its content is blank (pingdotgg#5073)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(ssh): isolate managed tunnel processes (pingdotgg#4347)

* fix(server): scrub AppImage XDG_DATA_DIRS and GSETTINGS_SCHEMA_DIR from terminals (pingdotgg#5075)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(mobile): show correct provider icons for Grok, Cursor, and OpenCode (pingdotgg#4586)

* fix(web): stop the chat timeline reading through the provider status banner (pingdotgg#5353)

* fix(desktop,web): contain renderer memory growth and recover from renderer OOM crashes (pingdotgg#5148)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): generate durable thread titles (pingdotgg#5357)

* fix(web): better right panel (new diffs styling) (pingdotgg#5260)

* fix(server): keep regenerated titles on topic (pingdotgg#5365)

* refactor(server): make title prompts plaintext (pingdotgg#5368)

* feat(web): configurable fonts and sizes under Settings → Appearance (pingdotgg#5103)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* feat(sidebar-v2): thread pinning for sidebar v2 (pingdotgg#5312)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): make pairing QR codes actually scannable, with endpoint choice (pingdotgg#5360)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop,web): improve in-app browser shortcuts and URL behavior (pingdotgg#4703)

* fix(web): prevent legacy model picker layout shift (pingdotgg#5349)

* fix(server): allow remote updates with database migrations (pingdotgg#5374)

* fix(mcp): unblock Kimi models in OpenCode with preview tools (pingdotgg#5128)

* fix(web): clear main branch lint warnings (pingdotgg#5384)

* fix(mobile): preserve grouped project workspaces (pingdotgg#4642)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* fix(mobile): prevent Android thread search crash (pingdotgg#5386)

* fix(web): truncate long project switcher names (pingdotgg#5348)

* fix(mobile): avoid double dividers between thread sections (pingdotgg#5391)

Co-authored-by: T3 Code Test <t3code-test@example.com>

* fix(web): keep the composer command menu anchored to the composer (pingdotgg#5336)

* fix(web): restore terminal link hover styles (pingdotgg#5382)

* fix(ci): isolate releases from shared API rate limits (pingdotgg#5394)

* fix(web): keep model picker shortcuts in sync (pingdotgg#5400)

* fix(web): keep terminal font settings reliable (pingdotgg#5397)

* Enrich terminal font previews (pingdotgg#5428)

* fix(web): preserve terminal font size when splitting (pingdotgg#5444)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* Prevent terminal loading flash (pingdotgg#5432)

* fix: reconnect faster after remote server updates (pingdotgg#5404)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: native subagent & workflow observability (pingdotgg#5219)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(server): stop shipping full MCP tool results in thread payloads (pingdotgg#5482)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): closed plan sidebar stays closed when returning to a thread (pingdotgg#5484)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: respect time format for sidebar snooze (pingdotgg#4438)

* fix(web): calm one-row server update status and banner

The version-skew banner is no longer an amber warning: it reads
"Server update available" with the raw versions (unreadable for
nightlies) moved to a tooltip. The in-flight rail (Download/Install/
Resume) becomes a single status row, "Downloading…" then
"Restarting…", since the wire installing stage is a sub-second
launcher handoff and "resuming" meant nothing to most people.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(server): keep the managed tunnel across remote update restarts

Measured on a live update: the server was back in ~9s but stayed
unreachable for ~96s, because releasing the tunnel on shutdown forces
the replacement tunnel's hostname route through 1-2 minutes of edge
propagation. An update handoff always brings a server right back
(new version or rollback), so the tunnel is never orphaned; skip the
release when the launcher state file records a pending update. The
next boot respawns the connector from the stored config against the
same tunnel and is reachable as soon as it connects.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* test(server): use the launcher state writer in release tests

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(server): release the tunnel when an explicit stop interrupts an update

A pending update in the launcher state is not proof a replacement
server is coming: `t3 service uninstall` or `systemctl stop` during
the pending window also tears the server down, permanently. The
launcher now writes a stop marker before signalling its child on an
explicit stop and clears it on the next start; the shutdown tunnel
release keeps the tunnel only for pending updates without the marker.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(server): clean up interrupted update trials

* fix(server): order explicit service shutdown

* fix(web): make update version tooltips accessible

* fix(server): separate trial cleanup from handoff retention

* fix(server): drop superseded tool updates from snapshots

A tool.updated row is the in-flight snapshot of a call; once the call
completes, the tool.completed row carries the final state and both
clients fold every matching update into it. Shipping the updates buys
nothing: 47k such rows exist in one real database, and a single thread
carries 3,291 of them.

Filter them out of thread snapshots, mirroring the existing
context-window dedup. Matching is per turn and only against a LATER
completion, so a revert that discards the completing turn cannot leave
a call unrepresented, and a later update under the same identity (the
next call, still in flight) survives. Live events are untouched.

Rows are matched on the same identity the clients collapse by: an
explicit data.toolCallId when the adapter emits one, otherwise the
itemType/title/detail triple. No tool lifecycle row in the real db
carries a toolCallId, so the fallback does the work.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(server): pin interleaved-collapse divergence as intentional with test

Bugbot flagged that clients collapse only adjacent lifecycle rows, so
dropping a superseded update separated by an interleaved parallel call
diverges from full-history rendering. Measured on a real database: 1.5%
of dropped rows (553/36,581), all pure in-flight state whose final result
the retained completion still shows, and zero dropped rows carry a
client-merged payload field their completion lacks (verified across all
49,515 update rows). Documents the tradeoff and adds a test pinning it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(trading): a covered position is not deaf, and does not need a metronome

A PnL line is a directional level in dollars, and a confirmed reduce-only
stop is a level the exchange enforces. Coverage counted neither, so the
observed mission — short, target armed, stop resting — was judged deaf and
woken every three bars to conclude "hold".

Coverage now reads pnl_above as the winning side and pnl_below/pnl_giveback
as the losing side (direction from the position's sign), and a fully
confirmed stop as losing-side coverage. A position covered on both sides
gets the slow sanity backstop (10x the tight floor, clamped [15m, 2h]) — a
thesis-drift check — instead of the tight floor, which stays for the
genuinely deaf case it was built for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(trading): a waiting plan's unarmed trigger levels come back on the wake

A flat mission is allowed to wait, but waiting is a decision with content:
"come back if price reaches 1899" is a trigger, and a trigger that lives
only in prose wakes nothing. The runtime does not arm it — predicates come
from MarketWatch, never from a condition's description — so it reports the
gap instead. A flat, waiting wakeup now carries `unarmedEntryConditions`:
the entry levels the plan named with no watch within 10 bps of them.

The tool descriptions learned the hierarchy to match (prefer condition
watches; arm a waiting plan's levels in the turn you publish it), and the
toolkit's char budget was paid for out of existing wordiness.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(trading): a stop may be trailed, but only inside the envelope it was approved with

`modify_stop` puts the stop anywhere on the losing side of the mark, and an
unconfirmed replacement escalates to a forced close — so routine trailing was
the one thing the primitive was least suited to. `trading_adjust_stop` is the
bounded version: the same replaceProtection path, with the policy in front of
it.

The rules the server enforces, none negotiable by prompt: risk never grows past
the entry's approved stop; a step is at most min(0.5xATR, 25% of the stop
distance); the agent's own ATR is cross-checked against the server's; the stop
stays outside max(2xhalf-spread, 0.35xATR) and no further than halfway from
entry to target; a stop past entry never crosses back; one adjustment per three
bars and eight per position.

The policy is pure and pinned by its own tests. An accepted move goes out as an
ordinary modify_stop intent, so the confirm-before-cancel sequence and its
§17.5 escalation are the ones every stop move already takes, and lands as
`trading.mission.stop-adjusted` with a durable row the chart's step-line can
later be drawn from.

The toolkit's description budget moves from 10,000 to 11,200: the twentieth
tool pays for itself, since an agent that cannot read the eight refusal codes
just retries the same refused move.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(trading): the wake that arrives one ATR before the exchange decides

`trading_adjust_stop` gave the harness a bounded way to move the stop; nothing
gave it the moment to use it. A protected position's next scheduled event was
the stop itself, which is the exchange taking the decision rather than the
agent making one.

The proximity watch is that moment: a `price_cross` at `stop + 1.0xATR` for a
long, mirrored for a short, `armedReason: "stop_proximity"`. It is armed from
the two places a confirmed stop comes into existence -- `protectIncrease` at
entry and `modifyStop` on every replacement -- so the level always follows the
stop actually resting. Re-arming goes through `replacesWatchId`, so a mission
never carries more than one and the old level dies in the same transaction the
new one is written in.

The reactor was already the only place that sees a confirmed stop, and it
already holds the gateway the ATR is measured with; reading the strategy's
primary timeframe off its stored JSON keeps its layer exactly as wide as it
was, which is why `ensureNotDeaf` -- the other candidate, and the one with no
market data at all -- is left alone.

Arming is best-effort: it runs after the protection it describes is confirmed,
and a position with a live stop and no proximity watch is protected, just less
forewarned. It never fails the execution that armed it. A level already through
the mark arms nothing and cancels any stale one, since a watch that was true
before it was written is an immediate wake, not coverage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(web): the schedule a mission is already keeping, made visible

Lands two threads of work in one commit because they were written
interleaved in the same three files and cannot be honestly separated
after the fact:

- plan 23's web follow-through: chart condition and fill-marker geometry,
  position-read freshness (current/delayed/stale) with its banner, the
  price and review charts rebuilt on the shared geometry, and the thread
  panel's run rows.
- plan 24 phase B (§3): the "Up next" strip — deriveUpNextItems turns the
  mission's own watches, protection, and in-flight executions into one
  ordered list of future events, rendered as UpNextPill rows above the
  composer. No new RPCs and no new server state; every item is derived
  from the read model the panel already holds.

The server change is the projection carrying the fields the strip reads.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(web): a pill you can click, and the rule it was talking about

The "Up next" strip names price levels the chart is already drawing, but
the two surfaces had no link: finding "wake @ 1899" among four unlabelled
rules was left to the eye. Clicking a pill now lights up its level.

The join is findLevelAtPrice, in the geometry module where the levels
live. It compares with a relative tolerance, because a PnL watch is
divided back into a price on both paths and the two results are equal
only up to float drift. It does not snap to a merely nearest level: the
strip can name a price the chart's domain does not reach, and lighting
the closest rule would point at a price nobody clicked. That case
flashes nothing.

A nonce keys the overlay so a second click on the same pill flashes
again, and the highlight clears itself before the next mission poll — a
rule that outlived the click would read as chart state rather than as an
answer. Pills with no price on a chart stay plain spans.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(web): the whole reassessment queue on the axis, not just its next item

The chart drew one future tick — the nearest scheduled reassessment, which is
the same appointment the header already counts down. A mission that has
republished a few times holds several at once, and the shape of that queue is
the reading: three minutes apart and all armed by the staleness floor is a loop
idling, one at the funding timestamp is a plan waiting.

deriveChartTimeMarkers returns every armed reassessment, soonest first, capped
at five with the last slot collapsing into a +N tick at the furthest moment.
Only the nearest carries a caption — five captions in one gutter collide — and
staleness-floor ticks are drawn muted and sparser than the ones the harness
chose, so the backstop never looks like an intention.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(trading): the mission's history, joined once so no client has to

The read model was entirely current state: the watches armed now, the position
held now, the stop resting now. None of it can say the stop walked up behind a
winner in four steps, or that the last five wakes were the staleness floor
rearming itself — and those are the readings the chart's past axis and the
thread's wake rows exist for.

missionTimeline[] on OrchestrationTradingMission: newest-first, capped at 50,
joined at read time from the three tables that already keep the facts —
trading_harness_runs for wakes, trading_stop_adjustments (migration 050, landed
with the adjust-stop tool) for stop steps, momentum_strategy_versions for
publishes. No migration, and no history copied into the projection row, for the
same reason the execution surfaces are joined rather than stored: the row must
stay rebuildable from the domain tables alone.

Each source is queried with its own limit before the merge, so a mission that
woke two hundred times cannot crowd out its four stop steps. A run that never
started is filed under when it was created — the question the axis answers is
when the mission was woken, not when a provider got round to it — and a failed
run says so in its label, because that is a turn the mission was owed and did
not get.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* feat(web): the mission's turns, as a rug along the bottom of its own chart

The axis carried the future — a scheduled reassessment standing in the gutter —
and nothing of the past. So a chart could show a mission that had woken eleven
times in twenty minutes and look identical to one that had woken once, and the
question the operator actually has, "has this loop been doing anything", had no
answer on the surface built to answer it.

`missionTimeline` from the projection becomes a rug of ticks along the bottom
edge: wakes coloured by cause, publishes in foreground, stop moves and failed
runs in loss-red. A rug rather than full-height rules on purpose — twenty
verticals would fence the price line in behind the very thing they annotate,
and the shape of the trade is meant to be the only saturated thing on screen.

Capped at twenty, dropping the oldest: the projection sends newest-first, so a
rug trimmed from the front would stop before the events that just happened.
Anything older than the window's first candle is dropped rather than pinned to
the left edge, the same rule the fill markers follow.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(web): clarify auto permission fallback (pingdotgg#5431)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(acp): keep unknown approvals actionable (pingdotgg#5430)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(mobile): stop thread messages reading through pending cards (pingdotgg#5450)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

* fix(web): align composer inline chips with prompt text (pingdotgg#5495)

* fix(web): clear woke state on explicit thread actions (pingdotgg#5486)

* fix(server): skip origin fetch when creating worktrees in repos without an origin remote (pingdotgg#5556)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): update tooltip no longer dismisses when scrolling release notes (pingdotgg#5547)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): stop showing commit/push/PR notices as errors in the work log (pingdotgg#5559)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show remote environment for non-Git projects (pingdotgg#5555)

* fix(server): stopping a Claude thread no longer shows an ede_diagnostic error (pingdotgg#5557)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): show one toast when snoozing threads in bulk (pingdotgg#5560)

* fix(server): let stopped threads settle immediately (pingdotgg#5553)

* feat: paginate thread loading with user-anchored turn windows (pingdotgg#5493)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: prevent reconnect loops during server stalls (pingdotgg#5561)

Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* fix(server): settle stopped Claude subagents (pingdotgg#5568)

* fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572)

Co-authored-by: Claude <noreply@anthropic.com>

* test(server): catch client transfer regressions in CI (pingdotgg#5350)

* fix(web): stop the "requests are slow" warning from firing on every provider update (pingdotgg#5570)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): keep agent panel rows stable (pingdotgg#5569)

* docs: ship production T3 Connect public config in .env.example (pingdotgg#5573)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): per-device provider settings (pingdotgg#4479)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(mobile): invisible T3 Connect devices can now be seen and removed (pingdotgg#5563)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix: add missing space before 'GitHub releases page' link on download page (pingdotgg#4511)

* fix(web): stop the sidebar "Working" label from pulsing (pingdotgg#5580)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(web): add modular theme library (pingdotgg#5226)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>

* fix(web): reading a thread clears Done; Woke is dismissible (pingdotgg#5579)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* perf(dev): faster cold-start for dev web serving (pingdotgg#5584)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(dev): Improve instructions for --share (pingdotgg#5586)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): improve keyboard avoiding (pingdotgg#5451)

* fix(web): live background-work banner no longer hides behind the update notice (pingdotgg#5595)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): stabilize chat timeline positioning (pingdotgg#5449)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(server): record runtime mode per turn and on mode changes (pingdotgg#5593)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(web): thread actions from the chat header title (pingdotgg#5592)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(mobile): avoid iOS terminal reset on clear (pingdotgg#5440)

* fix(mobile): pad scroll views above Android nav bar (pingdotgg#5415)

* fix(mobile): keep Android chat text from showing through the composer (pingdotgg#5582)

* fix(mobile): repair Clerk auth navigation headers (pingdotgg#5140)

Co-authored-by: codex <codex@users.noreply.github.com>

* Bump mobile app version to 1.0.2 (pingdotgg#5588)

* feat(web): click the pin icon to unpin a thread (pingdotgg#5578)

* fix(web): show the correctly matching shortcut in new thread button's tooltip (pingdotgg#5594)

* chore(release): prepare v0.0.32

* fix(mobile): reconnects no longer shift the thread list (pingdotgg#5372)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(web): drag pinned threads into your own order (pingdotgg#5581)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore(ci): vouch StiensWout (pingdotgg#5637)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(desktop): remember recently used sites in the Browser panel (pingdotgg#5270)

* chore: vouch chrisdeeming (pingdotgg#5641)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* feat(web): make sidebar artwork theme-aware (pingdotgg#5636)

* fix(web): reconnect the composer seam for remote non-Git projects (pingdotgg#5633)

* fix(web): show Stop button while input is pending (pingdotgg#5554)

* feat(web): fold plan mode and token-by-token output into Legacy features (pingdotgg#5664)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: sidebar v2 is now the default sidebar (pingdotgg#5672)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): stop PR status lookups amplifying GitHub rate limits (pingdotgg#5673)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): delay transient reconnect warnings (pingdotgg#5670)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* fix(web): inherit terminal size in simple typography (pingdotgg#5628)

* fix(server): stop the reaper from silently killing live background subagents (pingdotgg#5677)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(desktop): zoom shortcuts no longer die when the preview browser has focus (pingdotgg#5691)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(mobile): one sheet for model and thread settings (pingdotgg#5625)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(usage): usage page reading provider transcripts across environments (pingdotgg#5684)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): usage chart no longer makes Claude look like the bigger spender (pingdotgg#5697)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): persist diff view mode (pingdotgg#5731)

* feat(web): show how many subagents are running at a glance (pingdotgg#5745)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): add missing cursor-pointer styling to dropdowns and interactive buttons (pingdotgg#5716)

* fix(server): stop Claude resume handshakes from completing turns that never ran (pingdotgg#5710)

Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* chore: vouch gfsaaser24 (pingdotgg#5761)

* chore: vouch saphid (pingdotgg#5763)

* fix(server): stop Codex threads with queued follow-ups (pingdotgg#5762)

* fix(web): usage page loses the cost quality panel, gains a back button (pingdotgg#5756)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(server): agents can now open the images you paste into chat (pingdotgg#5757)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): pinned reorder no longer reshuffles while writes land (pingdotgg#5767)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): overhaul project settings into a real settings page (pingdotgg#5768)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): usage totals no longer jump while devices report in (pingdotgg#5772)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): settle no longer leaves monitors and dev servers running (pingdotgg#5774)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat: pick worktree or current checkout per project (pingdotgg#5766)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(web): sidebar rows show the branch again, not a truncated plan step (pingdotgg#5776)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* feat(server): vp run migrate-dev-db seeds worktree dev dbs with real data (pingdotgg#5773)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): keep unsent drafts one click away in the sidebar (pingdotgg#5777)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* feat(web): project icons can be chosen manually (pingdotgg#5775)

* fix(server): one greedy agent process no longer takes down the whole server (pingdotgg#5788)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* ci: label-gated hosted-web preview deploys (pingdotgg#5465)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* Add cross-platform mobile usage dashboard (pingdotgg#5743)

* fix(web): preserve desktop route during Clerk auth (pingdotgg#5770)

* fix(web): match create theme and import theme buttons to the standard outline style (pingdotgg#5860)

* fix(server): favicon resolution no longer pins the event loop (pingdotgg#5538)

* fix(shared): bound the file-link label so bracket runs stop rescanning (pingdotgg#5782)

Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): thread title button no longer eats the drag area (pingdotgg#5857)

* fix(web): unify usage page chrome (pingdotgg#5823)

* fix(shell): add ~/.local/bin to the Windows CLI resolver so native-installed providers are found (pingdotgg#5074)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(web): match settings search shortcut styling to command palette's (pingdotgg#5841)

* fix(mobile): long-pressing a thread row no longer navigates into the thread (pingdotgg#5901)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): usage no longer double-counts forked Codex sessions (pingdotgg#5887)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

* fix(server): sandbox user-provided SVGs (pingdotgg#5916)

* fix(web): match usage titlebar text styling (pingdotgg#5897)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>

* Move project settings to contextual project routes (pingdotgg#5923)

* Preserve back navigation when opening settings (pingdotgg#5930)

Co-authored-by: codex <codex@users.noreply.github.com>

* Automate production mobile EAS releases (pingdotgg#5609)

* Add settings and usage breadcrumbs (pingdotgg#5929)

* fix(web): correct model picker trigger padding (pingdotgg#5935)

* fix(web): show worktree icon in sidebar v2 (pingdotgg#5909)

* fix(web): enable restore defaults after theme mix changes (pingdotgg#5928)

Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>

* fix(web): trait menu closes after you pick a level (pingdotgg#5879)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(web): align project name with headline (pingdotgg#5864)

* fix(web): update pills use readable theme foregrounds (pingdotgg#5938)

* fix(web): use themed confirmation dialogs (pingdotgg#5624)

* fix(web): use import/export-appropriate icons for theme buttons (pingdotgg#5964)

* fix(mobile): detect PowerShell cmdlet errors in work log rows (pingdotgg#5726)

* fix(mobile): stop Android user bubbles with code blocks from overlapping (pingdotgg#5659)

Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(mobile): parse EAS fingerprint JSON (pingdotgg#5991)

Co-authored-by: codex <codex@users.noreply.github.com>

* feat(trading): entry quotes, exits, and the receipts that make a run provable

Adds the execution-harness pieces the trading run was missing across
contracts, server, and web:

contracts: decision, exit, policy, quote, recovery, replay, and
setupEvidence modules in packages/trading-contracts, with tests.
server: TradingQuoteService, TradingExitService, TradingRunTelemetry,
TradingExecutionReceipts, TradingExecutionSequence, TradingReplayFixtures,
RetryTransient, TradingSessionProfile; migrations 051-053 for run
decisions, entry quotes, and execution sequences.
web: TradingAssetPicker and a MissionLivePanel state refactor; drops the
now-unused missionLockedProviderMessages path.

* chore(deps): bump packageManager to pnpm 11.21.0, regenerate lockfile

* docs(upstream): backfill PATCH_LEDGER for plans 21-25; ignore local working dirs

* test(server): follow trading_execute's quote-id shape and use a namespaced fs import

The coercion test still asserted the pre-quote trading_execute schema, which
d1a245a replaced with {missionId, quoteId}; its numeric fields now live on
trading_quote_entry, so the nested-number case moves there and execute keeps a
pass-through case. Also satisfies namespace-node-imports in the profile test.
Both were red before the v0.0.33 sync started, so the sync stays attributable.

* docs(upstream): record the v0.0.33 baseline and every seam the sync touched

The renumber policy is now exercised rather than proposed: upstream's six new
migrations took fork ids 054-059, and the ledger says why the test bounds move
with them. Also records the seams that only appear once upstream deletes a file
the fork edited (SidebarV2), and the two Effect beta.103 API breaks.

---------

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Max Katz <me@maxkatz.me>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: codex <codex@users.noreply.github.com>
Co-authored-by: Gabriel De Andrade <30420087+gabrielelpidio@users.noreply.github.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: Utkarsh Patil <73941998+UtkarshUsername@users.noreply.github.com>
Co-authored-by: Arham Amin <132888838+arhxam@users.noreply.github.com>
Co-authored-by: Elaine Lyons <elaine@lyons.app>
Co-authored-by: Simone <lucenz@proton.me>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: Max Anderson <max.a.anderson95@gmail.com>
Co-authored-by: Simon Doba <simon.doba@hotmail.de>
Co-authored-by: Aditya Vardhan Sharma <adityaradhika13@gmail.com>
Co-authored-by: Mike Olson <mwolson@member.fsf.org>
Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: T3 Code Test <t3code-test@example.com>
Co-authored-by: Illia Panasenko <hello@ipanasenko.me>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Rodrigo Brechard <rodrigobrechard@gmail.com>
Co-authored-by: Rodrigo Brechard <rodrigo@clubtidy.fr>
Co-authored-by: naMqe <naMqe07@gmail.com>
Co-authored-by: Yukun Shan <92423096+nateEc@users.noreply.github.com>
Co-authored-by: Rushikesh Gaikwad <81632222+Wraient@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Fllip <39161142+FllipEis@users.noreply.github.com>
Co-authored-by: Hwanseo Choi <electricvoxel@gmail.com>
Co-authored-by: Hugo Blom <6117705+huxcrux@users.noreply.github.com>
Co-authored-by: Carlos Rico-Ospina <carlosricojr@gmail.com>
Co-authored-by: Gabe Fletcher <gabe@editmypodcast.agency>
Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Mateleo <mateleo78@gmail.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Jay Meistrich <github@jayz.us>
Co-authored-by: Justyn Leung <justynleung2000@gmail.com>
Co-authored-by: Tyler Saari <73684839+StoneCotton@users.noreply.github.com>
Co-authored-by: Pavlo Trinko <paul.trinko95@gmail.com>
Co-authored-by: Chris Deeming <chris@xenforo.com>
Co-authored-by: Henry Zhang <113233555+caezium@users.noreply.github.com>
Co-authored-by: Leonel Rivas <encriptandost@gmail.com>
Co-authored-by: Robert Soriano <sorianorobertc@gmail.com>
Co-authored-by: Matt Urenovich <murenovich@gmail.com>
Co-authored-by: Tyler <tyler@southboundsoftware.com>
Co-authored-by: tsouth89 <tsouth89@users.noreply.github.com>
Co-authored-by: nathangerday <44236114+nathangerday@users.noreply.github.com>
Co-authored-by: Ellie Gummere <hello@unknownhost.name>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
Co-authored-by: Carter Smith <51297686+carterwsmith@users.noreply.github.com>
Co-authored-by: Mina Yacoub <56601613+myacoub91@users.noreply.github.com>
juliusmarminge added a commit that referenced this pull request Aug 14, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 14, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 15, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 17, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
NeilTheFisher pushed a commit to NeilTheFisher/t3code that referenced this pull request Aug 18, 2026
darjss pushed a commit to darjss/t3code that referenced this pull request Aug 26, 2026
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 28, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 29, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Aug 30, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 1, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 2, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 4, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
juliusmarminge added a commit that referenced this pull request Sep 5, 2026
- Port thread pinning (#5312) into the orchestration-v2 command pipeline:
  thread.pin/unpin commands, thread.pinned/unpinned events, pinnedAt on the
  v2 thread state and projected shells, promotion semantics (pin clears
  settle/snooze, settle clears pin) matching the v1 decider, and client
  pin/unpin operations in the v2 dispatch style.
- Port the regenerated-title context anchoring (#5365) into
  ThreadTitleRegenerationService: pin the first user message ahead of the
  retained tail when the digest is truncated.
- Re-apply the right-panel controls positioning from #5260 to the v2
  ChatView title bar controls.
- Repair merge artifacts: committed conflict markers in BranchToolbar,
  duplicate capability keys, duplicate CommandPalette import, v1 turn
  naming in DiffPanel's focus-refresh effect, onSend signature merge.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants