Skip to content

feat(web): show Claude workflow phases and members in Lineage - #12598

Merged
juliusmarminge merged 90 commits into
pingdotgg:mainfrom
Bil0000:workflow-visualization-v2
Oct 11, 2026
Merged

juliusmarminge merged 90 commits into
pingdotgg:mainfrom
Bil0000:workflow-visualization-v2

Conversation

@Bil0000

@Bil0000 Bil0000 commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Claude workflows appeared as one opaque subagent in Lineage. Their phases, members and answers were missing, and the app could not stop an entire workflow.

Scope and approval

This continues the existing Claude workflow Lineage feature under maintainer-directed takeover. Scope is phase/member visibility, member answers and the lifecycle handling needed to keep those rows correct.

Julius's scope and implementation review says the feature is worth having and specifies the requested server and UI direction. His follow-up review records the remaining performance and recovery requirements. This is a feature, not a small-fix exemption; final human re-review and approval are still pending.

Change

  • Expand workflows into phase sections with member rows, status, counts and elapsed time. Each member opens its chat with the original prompt, final answer and workflow breadcrumb. Queued members remain pending, their timers begin when they start running, and late answers preserve their finish times. Member navigation waits for the chat to exist in the destination environment.
  • Read final answers from the transcript tail so long transcripts retain their ending.
  • Add workflow Stop in the UI and MCP, guarded by orchestration:operate and the caller's dispatch mode limit. Individual native Stop requires an owning run, so projected workflow members do not expose a control that cannot dispatch. Workflow timers remain visible when the viewer cannot stop the workflow.
  • Settle members and their child threads when the coordinator stops or fails, the parent run ends unsuccessfully, the Claude process exits between turns, or the server restarts. Activate continuations only after acquiring the replay lock, serialize replay with live SDK messages during transcript reads, keep pending completions visible to process-exit cleanup, apply outcomes only to the current lifecycle, discard stale transcript projections after settlement, and use the same cleanup if closing the CLI times out. Provider stop requests are bounded at 15 seconds.
  • Persist roster updates only for explicit snapshots and terminal notifications. Refresh child-thread metadata idempotently while preserving existing thread state. Publish Codex approval items before their pending requests. The child-thread ingestion change exposed a race where an immediate response arrived before the item existed, leaving it waiting. The existing single-child and nested-child replay assertions require the item to be completed after approval; both fail when the order is reverted.

Verification

  • Replay ordering and cleanup: all 212 Claude adapter tests pass. Two new cases fail on the prior head and pass after continuation activation moves inside the replay lock: a live result cannot create an extra continuation, and a query that closes while activation waits cannot accept that continuation. Two independent async-stream diagnostics also pass. Earlier replay and interruption cases remain covered in the same test file; pending completions remain visible to cleanup. Tests use queued-frame and Deferred milestones. Server typecheck and targeted lint/formatting pass.
  • Fallback Stop now settles workflow members that have no subagent turn item, including their execution nodes and child roots. One regression in the existing BackgroundWorkStop suite failed before the fix; all 20 related Stop/projection tests now pass. Server typecheck and targeted lint/formatting pass.
  • Main integration passed 185 tests across eight focused suites covering native task cancellation, background Stop, persistence, projection selection, recovery, restart continuation, run routing and subagent projection. Server and provider-core typechecks and targeted lint/formatting pass. Main's shared cleanup now handles workflow members; the retained workflow recovery tests pass and the duplicate implementation is removed. The subsequent project-scoped thread-query integration passed all 64 ProjectionStore and ThreadManagementService tests, server typecheck and targeted lint/formatting.
  • The preceding UI correction passed all 18 Lineage component tests, web typecheck, and targeted lint/formatting. One new case in the existing Stop table reproduced the ineffective individual Stop on a runless workflow member, then passed with the ownership guard. Two temporary rendered checks verify timer visibility with Stop permission granted and denied. Existing ordinary native/app-owned Stop and workflow-wide Stop cases still pass.
  • Current head 3c34fcc integrates main through 61eb4af, preserving its Claude MCP registration changes. All 256 tests across the Claude adapter, RPC authorization and Lineage component suites pass, along with server/web typechecks and targeted lint/formatting. All eight required checks pass on this head, including lint, typecheck, build and tests.
  • Member navigation uses the existing destination-environment thread graph. The extended seven-member case stays disabled when matching IDs exist only in another environment and opens every phased/unphased member after the correct shells arrive. The negative control fails on the preceding published head; all 18 Lineage tests pass.
  • Integrated browser verification at 350f895 covered phase expansion, counts, member answers, breadcrumbs and cancelled members. The recordings use isolated sample data. A further preview check at 5ad877e confirmed phase expansion and member-chat navigation after integrating main. Earlier live-Claude evidence is retained below. No new browser or live-provider verification is claimed for the latest integrations. A fresh preview attempt reached the target thread but timed out during the server restart before navigation could be verified.
  • Independent Opus 5.5 and Sol 6.1 reviews completed the full 56-file feature diff at 3c34fcc with no remaining findings. Opus ran 596 focused tests and nine external semaphore diagnostics. Sol ran 37 focused checks, including adapter cancellation and queued/async-stream burst controls. Both verified the member-navigation correction and prior replay/Stop fixes. All 53 inline review threads are resolved. Final human re-review remains required; Macroscope did not run correctness review because of its per-PR cost cap. Native mobile and a live root-turn API failure were not exercised in the browser.

Short feature demos

Recorded with T3 Code's server-owned preview browser at 350f895, using sample workflow data in an isolated development environment. These clips demonstrate the UI; the stopped clip shows the resulting state rather than a live Stop request.

Workflow phases and members, 5 seconds

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2c125e7574b76926/01-phases.mp4

Open a member's chat and read its answer, 10 seconds

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/73cb1fb198ab0cd2/02-member-answers.mp4

Inspect stopped members and open their chat, 10 seconds

https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c7f3bc208ae946ed/03-stopped-members.mp4

Screenshots (dark mode, live Claude workflows)

Before (this PR before the takeover), and after with the same data:

Before: custom tree with blue monospace counts, check icons and truncated phase names

After: the same finished workflow, phases as section headers with their agents underneath

Collapsed: workflows sit in Lineage like any other subagent, with a split chevron to expand them.

Collapsed Lineage list with four finished workflows

Running: the active phase is emphasized and open, finished phases fold, and Stop appears on hover.

Running workflow: wrap phase emphasized with its live agent, finished read phase folded, red Stop on the workflow row

Stopped workflow and member hover card:

Stopped workflow with cancelled members, hover card showing the member's model, Cancelled status and answer preview

Member thread: the breadcrumb and badge name the workflow.

Member thread breadcrumb "Workflow · workflow stop review / adapter cancellation" and "Subagent of · Workflow · workflow stop review" badge

Recording (87s): two live workflows running and finishing, phase toggles and the member hover card.
https://uploads-production-47e4.up.railway.app/files/9f1fc624-2701-41c3-89ea-6f9cb2d17311/workflow-sections-dark.mp4

Built by Claude Opus 5 and 5.5 in Claude Code, with GPT-6.1-Sol updates and review in Codex. Takeover passes used Claude Opus 5.5 for tests and Claude Fable 5.1 for implementation; integration used GPT-6.1-Sol in Codex.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Sep 19, 2026
Comment thread apps/web/src/components/chat/ThreadLineageWorkflowRow.tsx Outdated
Comment thread apps/web/src/components/chat/ThreadLineageWorkflowRow.tsx Outdated
@macroscopeapp

This comment has been minimized.

Comment thread packages/contracts/src/orchestrationV2.ts
@macroscopeapp

This comment has been minimized.

Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
Comment thread apps/web/src/components/chat/ThreadLineageWorkflowRow.tsx Outdated
Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
Comment thread apps/server/src/orchestration/workflowAgentAnswers.ts Outdated
Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
Comment thread apps/server/src/orchestration/workflowFileRead.ts
@macroscopeapp

This comment has been minimized.

@macroscopeapp

macroscopeapp Bot commented Sep 19, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This is a substantial cross-layer feature that adds workflow member projection, transcript reads, lifecycle/recovery handling, and destructive stop controls across server, provider, RPC/MCP, and Lineage UI code. It also introduces static-analysis diagnostic suppressions in new server modules, so human review is required.

Not approved because:

  • Per-PR cost limit exceeded (workspace setting). Approvability relies on correctness review in order to determine eligibility

Review your spending limits in Billing settings, or comment @macroscope-app review this PR to bypass the limit and review now. You can add or adjust custom eligibility rules. Learn more.

Comment thread apps/server/src/orchestration/workflowAgentAnswers.ts
Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
Comment thread apps/server/src/orchestration/workflowAgentAnswers.ts Outdated
Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
@macroscopeapp

This comment has been minimized.

@macroscopeapp

This comment has been minimized.

@macroscopeapp

This comment has been minimized.

@juliusmarminge juliusmarminge left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Reviewed at 9aee040. The feature is worth having and the server-side design (members as ordinary subagents, additive merge, between-turn refresh) is the right shape. Two correctness problems block, and the UI needs another pass before this ships.

Blocking: correctness

1. Members never settle when the coordinator stops or fails.

Member status is derived only from member.state in the last snapshot (ClaudeAdapterV2.ts:3385). You cite the CLI emitter guard (status !== "running" → return) to argue no stale frame can arrive after the notification; I confirmed the guard is there in 2.1.236. The flip side is that when the run is interrupted, killed, or the script throws while members are start, the last snapshot is the one that says they are running, the task_notification arrives as stopped/failed, and neither updateClaudeSubagentNode nor applyWorkflowProgressWithoutTurn walks workflow.agents to close them. workflowMemberStates is never touched on coordinator terminal. Members also carry runId: null, so the run's interrupt cascade in RunExecutionService does not know about them either.

Result: press Stop on a running workflow and the coordinator row goes cancelled while every in-flight member row spins forever, and each member child thread keeps a root_turn node stuck running.

Fix: in the task_notification branch, when the coordinator goes terminal, map every member still running/queued to cancelled (stopped) or failed, emit the same node/subagent updates, and record them in workflowMemberStates. Test: existing wake harness, snapshot with a member in start, then task_notification with status: "stopped"; assert the member's last subagent.updated is terminal.

2. Truncated transcripts are the common case, not the edge case, and the fallback presents the excerpt as the final answer.

TRANSCRIPT_BYTE_CAP is 512 KiB and a truncated read returns [], so the capped resultPreview is emitted as the member's answer. On my machine 22 of 111 real workflow-member transcripts exceed 512 KiB, so roughly one in five members would get a few-hundred-character preview rendered as a complete assistant message in a thread that otherwise looks whole. The read is already positional; when stat.size > byteCap, read the tail 512 KiB instead of the head and drop the first partial line (the parser already tolerates a cut line). That recovers the final answer, which is the thing the user opened the thread for.

Blocking: UI

I looked at the three screenshots closely. It does not read as a finished T3 surface yet. Concrete things:

Lineage card

  • Phase headers (LIST 2/2, RANK 1/1) are uppercase mono in green while the member rows below them are proportional sentence case. Three type treatments inside one small tree. The panel's existing rows use one.
  • The coordinator row shows ●●● plus 24s. Three green dots with no legend means nothing to a user; the Agents tab already solves this with 4 done. Pick one vocabulary.
  • The collapsed rows (queue-choice, index-strategy) also show ●●● and a duration but give no indication they are workflows rather than plain subagents until you expand them. The Lineage list already had a way to show a subagent; this adds a second, different-looking row type next to it.
  • Member rows use a filled green dot as their icon while the coordinator uses the provider glyph and phases use a check. Three icon systems in a 4-level tree.

Agents tab

  • The phase rail (✓ Collect ●●●● › ✓ Check ●●●● › ✓ Wrapup ●) repeats the same information as the phase group headers directly below it (✓ COLLECT 4 done). One of the two should go; the group headers already scroll with the content and carry the count.
  • Every member row is three lines: title, Completed, then sonnet-5 · 96.6k tok · 0 tools, with a check and duration on the right. Completed and the check say the same thing, and a nine-member run becomes ~30 lines of near-identical text. One line per member (title left, model/tokens/duration right, status carried by the row icon) would show the whole run without scrolling.
  • Mixed mono and proportional again: titles proportional, metadata mono, phase labels mono uppercase, 9/9 settled mono. The rest of the app does not do this.
  • Collapsed workflow rows at the bottom (cache-review, retry-policy) look like a different component from the expanded card above them: no card, different padding, right chevron instead of a header disclosure.

Member thread

  • Breadcrumb says server / list:refresh while the badge says Subagent of · Review session auth. The user's own workflow label is list:refresh; the badge should name the workflow (or the coordinator) so the two agree. Right now the thread tells you which project it is in but not which workflow it belongs to.
  • The Lineage back-link at the bottom right says Review session auth with no indication it is a workflow, so you cannot tell you are inside a fan-out at all from this view.

I do not have a specific mockup to hand you. The direction I would take: one row type for a workflow member that matches the existing subagent row, phase grouping done with the panel's existing section-header style rather than a new mono uppercase label, drop the dot-strings in favor of n/m counts, and lose either the rail or the group headers. If it helps, do the UI as a follow-up PR on top of the server change once the two blockers above are fixed; the server piece can stand on its own.

Non-blocking, for the record

  • Your rebuttals on the Macroscope threads (symlink intermediate dir, task-id scoping, [] vs undefined frames) are correct; no action.
  • applyWorkflowProgressWithoutTurn only reaches the projection while the launching run's event subscription is still open, which holds because the coordinator subagent is non-terminal. Worth one comment line so nobody assumes it works after the run stream closes.

@Bil0000

Bil0000 commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor Author

UI follow-up complete at df6346235ab473342d1dfea1e725fd0aa5d988d9, on top of the maintainer rebase.

The Lineage workflow group now follows the Agents tab on main: a bordered group, status dots, activity previews, model and usage details, and elapsed time. Member rows open their normal chats. The workflow title and count use separate lines, and the list has more room. The shared row-style finding is fixed and resolved.

Validation: 16 focused UI/client tests passed, including every phase, failed/running members, unphased members, and collapse/reopen. Web type checking, targeted lint, and the web build passed. In the real client, all five sample members opened the correct chat, across all three phases; the parent workflow link also worked. Real before/after and member-chat screenshots are in the PR description. The screenshots use isolated sample data, not a live provider run.

Final CI is green on this SHA, including all three server shards. The earlier unrelated Git diff test failure did not reproduce locally and passes in this run. Macroscope correctness, Effect conventions, and UI consistency checks pass. No unresolved review threads or new actionable findings remain.

The PR is CLEAN and MERGEABLE. Julius still needs to re-review: his earlier changes-requested review remains, and Macroscope requires human approval for this feature. The PR remains open.

Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts Outdated
Comment thread apps/web/src/components/AgentsPanel.tsx Outdated
Comment thread apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.ts
Comment thread packages/client-runtime/src/state/subagentRuntime.ts Outdated
Comment thread apps/server/src/orchestration/workflowAgentAnswers.ts
Comment thread apps/server/src/orchestration/workflowFileRead.ts Outdated
@macroscopeapp

This comment has been minimized.

@juliusmarminge
juliusmarminge force-pushed the t3code/codex-turn-mapping branch 2 times, most recently from a1f8051 to 0337dd6 Compare September 21, 2026 05:40
@Bil0000 Bil0000 changed the title feat: visualize dynamic workflows in the Agents tab and Lineage card feat(web): show Claude workflow phases and members in Lineage Sep 21, 2026
@juliusmarminge
juliusmarminge force-pushed the workflow-visualization-v2 branch from f31e78c to 7a238b3 Compare September 21, 2026 20:30
@juliusmarminge

Copy link
Copy Markdown
Member

Rebased this PR onto the current t3code/codex-turn-mapping at 4a4c22b29c.

What changed on the branch

  • The branch carried two merge commits from the base plus a number of base-branch commits that had since landed on v2 in their own form. I dropped all of that and cherry-picked only the 13 workflow-specific commits in their original order (from "capture workflow telemetry" through "retain reported workflow phase titles"). The server, contracts and client-runtime commits all applied cleanly; the expected conflicts in ClaudeAdapterV2.ts, Orchestrator.ts, ProjectionStore.ts, ProviderFailure.ts and TurnStartReads.test.ts did not materialize because v2 already contains the same base commits.
  • apps/web/src/components/AgentsPanel.tsx was removed on v2 (refactor(web): remove the agents right panel #12835), so every change to it was dropped. That includes the whole of "keep pending agent tooltips accessible" (4979d689c8), which only touched that file, and the Agents-tab halves of "correct member timing..." and "simplify workflow rows and phase groups". The Lineage-card path (ThreadLineageWorkflowRow.tsx, ThreadRelationshipsControl.tsx) is intact. ThreadRelationshipsControl.tsx needed two small merges: the AgentElapsed import now comes from ./AgentElapsed (where v2 moved it), and the shared relationshipLink uses v2's RelationshipPopup (hover card for subagents) instead of the plain TooltipPopup.
  • One commit of my own on top: ThreadLineageWorkflowRow.tsx imported AgentElapsed from ../AgentsPanel; it now imports from ./AgentElapsed.
  • 47084b9698 ("load shared checkpoint scopes for queued turns") was left out. v2 already has an equivalent fix in ProjectionStore.ts (the checkpoint scope query now selects by the nodes' checkpointScopeId values), so it is not needed here. If you think there is still a gap, please open it as a separate PR.
  • I read the "settle workflow members when the coordinator's turn stops" logic (ee94883211 / c7a850fb28) in the rebased ClaudeAdapterV2.ts; the run-id guard and failed/cancelled mapping are present.

Verified

  • vp test run in apps/server for ClaudeAdapterV2.test.ts, claudeWorkflowProgress.test.ts, workflowAgentAnswers.test.ts, workflowScriptQuery.test.ts: 146 passed.
  • vp test run src/state/subagentWorkflowProjection.test.ts in packages/client-runtime: 13 passed.
  • vp test run for ThreadRelationshipsControl.test.tsx and ThreadRelationshipsControl.agents.test.tsx in apps/web: 6 passed.
  • vpr typecheck in packages/contracts, packages/client-runtime, apps/server, apps/web: clean.

Left for you / a maintainer

  • The Agents-tab half of this PR no longer has a target; the PR title and description should drop it and describe only the Lineage card.
  • No browser pass was done on the Lineage rendering after the rebase.

Rebased and touched up by a maintainer's agent; a human will re-review.

Comment thread apps/web/src/components/chat/ThreadRelationshipsControl.tsx
@macroscopeapp

macroscopeapp Bot commented Sep 21, 2026

Copy link
Copy Markdown
Contributor

UI consistency review found one Button height override in ThreadRelationshipsControl.tsx; the inline review comment identifies the shared size or panel variant fix.

Posted via Macroscope — UI Consistency

Comment thread apps/web/src/components/chat/ThreadLineageWorkflowRow.tsx Outdated
@macroscopeapp

macroscopeapp Bot commented Sep 21, 2026 •

Copy link
Copy Markdown
Contributor

UI consistency review found one styled raw bulk-action button in ThreadLineageWorkflowRow.tsx; the inline review comment identifies the shared Button variant fix. The per-phase semantic disclosure rows are not included in this finding.

Posted via Macroscope — UI Consistency

@macroscopeapp

This comment has been minimized.

@maria-rcks

Copy link
Copy Markdown
Collaborator

Note

Written by claude-opus-5-5 on behalf of Maria

Hi! We are cleaning up open PRs, and this one appears to have been created with an older model (opus 5). If this change is really important, we recommend rebuilding the PR with a newer model if possible.

@maria-rcks maria-rcks closed this Oct 11, 2026
@maria-rcks

Copy link
Copy Markdown
Collaborator

Note

Written by claude-opus-5-5 on behalf of Maria

Reopening, this was closed by mistake. Sorry for the noise!

@maria-rcks maria-rcks reopened this Oct 11, 2026
@maria-rcks

Copy link
Copy Markdown
Collaborator

Note

Written by claude-opus-5-5 on behalf of Maria

Closing again after a second look, sorry for the back and forth. This PR was opened more than two weeks ago. If this change is still important, please rebuild it on current main with a newer model and note the model in the PR description.

@juliusmarminge
juliusmarminge merged commit b9afba5 into pingdotgg:main Oct 11, 2026
91 of 92 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 11, 2026
## What's Changed
* perf(server): drive shell last-error lookup from thread bindings by @only21mil in pingdotgg/t3code#17842
* perf(server): skip parsing plain terminal history output by @StiensWout in pingdotgg/t3code#17179
* perf(server): batch terminal history writes every 250 ms by @StiensWout in pingdotgg/t3code#17183
* perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in pingdotgg/t3code#17911
* perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in pingdotgg/t3code#17254
* perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in pingdotgg/t3code#17638
* fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in pingdotgg/t3code#17962
* feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in pingdotgg/t3code#17530
* fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in pingdotgg/t3code#17838
* fix(web): Resume continues on the model picked in the composer by @akbarakma in pingdotgg/t3code#17867
* fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in pingdotgg/t3code#17706
* fix(web): keybinding group headings no longer touch the group above by @fixfon in pingdotgg/t3code#17766
* feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in pingdotgg/t3code#12538
* docs: update user count to 500k by @Kamkmgamer in pingdotgg/t3code#17783
* fix(mobile): working pill no longer bulges on its right end by @id0Sch in pingdotgg/t3code#16143
* perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in pingdotgg/t3code#17784
* fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in pingdotgg/t3code#15240
* fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in pingdotgg/t3code#14475
* fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in pingdotgg/t3code#16019
* fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in pingdotgg/t3code#18065
* fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in pingdotgg/t3code#17499
* fix(server): disabled providers stop checking for CLI updates by @yordis in pingdotgg/t3code#16772
* fix(mobile): round Android queued message sheet corners by @PixPMusic in pingdotgg/t3code#14934
* fix(ssh): record the archive lock owner's real PID by @Gigioxx in pingdotgg/t3code#14598
* fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in pingdotgg/t3code#11005
* fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in pingdotgg/t3code#18078
* fix(web): keep thread links open until the shell is live by @saphid in pingdotgg/t3code#14697
* fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in pingdotgg/t3code#14644
* fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in pingdotgg/t3code#13894
* fix(search): find threads by their branch PR number by @tris203 in pingdotgg/t3code#14658
* feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in pingdotgg/t3code#12598
* fix(mobile): round Android Agents sheet corners by @PixPMusic in pingdotgg/t3code#14925
* fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in pingdotgg/t3code#17938
* fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in pingdotgg/t3code#14744
* fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in pingdotgg/t3code#14752
* fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in pingdotgg/t3code#14723
* fix(web): focus settings search with command-f by @extoci in pingdotgg/t3code#17859
* fix(mobile): keep Android project paths on one line by @wellorbetter in pingdotgg/t3code#14178
* fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in pingdotgg/t3code#15556
* fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in pingdotgg/t3code#16869
* fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in pingdotgg/t3code#16838
* fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in pingdotgg/t3code#16394
* fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in pingdotgg/t3code#17528
* fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in pingdotgg/t3code#17389
* fix(web): pass hex theme colors to HTML renders by @RustedAperture in pingdotgg/t3code#16325
* fix(web): align the API estimate info icon by @RakshithBhat03 in pingdotgg/t3code#15655
* test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in pingdotgg/t3code#17080
* fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in pingdotgg/t3code#18121
* fix: sync model favorites and visibility across clients by @jakeleventhal in pingdotgg/t3code#16816
* chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in pingdotgg/t3code#16309
* fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in pingdotgg/t3code#14543
* fix(mobile): license generation works with filtered installs by @Yash-Singh1 in pingdotgg/t3code#18127
* fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in pingdotgg/t3code#16480

## New Contributors
* @Maseeek made their first contribution in pingdotgg/t3code#17530
* @TanJeeSchuan made their first contribution in pingdotgg/t3code#17706
* @fixfon made their first contribution in pingdotgg/t3code#17766
* @id0Sch made their first contribution in pingdotgg/t3code#16143
* @raphaelpra made their first contribution in pingdotgg/t3code#15240
* @Fluffy-Bunny-23 made their first contribution in pingdotgg/t3code#14475
* @arhammahajan made their first contribution in pingdotgg/t3code#16019
* @connwalk made their first contribution in pingdotgg/t3code#17499
* @abdelrhmanehab10 made their first contribution in pingdotgg/t3code#11005
* @AdEx-Partners-DE made their first contribution in pingdotgg/t3code#17938
* @wellorbetter made their first contribution in pingdotgg/t3code#14178
* @freddy-d made their first contribution in pingdotgg/t3code#16869
* @Furox-Art made their first contribution in pingdotgg/t3code#16838
* @RustedAperture made their first contribution in pingdotgg/t3code#16325
* @sheehanmunim made their first contribution in pingdotgg/t3code#17080
* @realhasanshoaib made their first contribution in pingdotgg/t3code#14543
* @whoisaldo made their first contribution in pingdotgg/t3code#16480

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2955...v0.0.46-nightly.20261011.2967

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2967
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 11, 2026
## What's Changed
* perf(server): drive shell last-error lookup from thread bindings by @only21mil in pingdotgg/t3code#17842
* perf(server): skip parsing plain terminal history output by @StiensWout in pingdotgg/t3code#17179
* perf(server): batch terminal history writes every 250 ms by @StiensWout in pingdotgg/t3code#17183
* perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps by @tris203 in pingdotgg/t3code#17911
* perf(usage): usage scans skip OpenCode legacy messages older than the window by @tris203 in pingdotgg/t3code#17254
* perf(usage): OpenCode legacy walk stats entries before checking for symlinks by @tris203 in pingdotgg/t3code#17638
* fix(web): MCP app permission prompts no longer overflow the screen by @juliusmarminge in pingdotgg/t3code#17962
* feat(provider-antigravity): support subscription quota and usage limits by @Maseeek in pingdotgg/t3code#17530
* fix(desktop): keep generated annotation styles in sync by @t3-code[bot] in pingdotgg/t3code#17838
* fix(web): Resume continues on the model picked in the composer by @akbarakma in pingdotgg/t3code#17867
* fix(devices): bump agent-device to 0.21.24 for native Windows hosts by @TanJeeSchuan in pingdotgg/t3code#17706
* fix(web): keybinding group headings no longer touch the group above by @fixfon in pingdotgg/t3code#17766
* feat(web): configure OpenTelemetry exports in diagnostics by @MatthewFeroz in pingdotgg/t3code#12538
* docs: update user count to 500k by @Kamkmgamer in pingdotgg/t3code#17783
* fix(mobile): working pill no longer bulges on its right end by @id0Sch in pingdotgg/t3code#16143
* perf(opencode): stop retaining every message of a loaded OpenCode thread by @tris203 in pingdotgg/t3code#17784
* fix(web): switch thumbs stay in their track while scrolling by @raphaelpra in pingdotgg/t3code#15240
* fix(keybindings): thread jumps no longer overlap model picker jumps by @Fluffy-Bunny-23 in pingdotgg/t3code#14475
* fix(mobile): restore QR scanning in iPad pairing sheet by @arhammahajan in pingdotgg/t3code#16019
* fix(server): delegated Muse tasks no longer ask approval for every command by @t3dotgg in pingdotgg/t3code#18065
* fix(codex): prevent unsupported agent history in ChatGPT sharing by @connwalk in pingdotgg/t3code#17499
* fix(server): disabled providers stop checking for CLI updates by @yordis in pingdotgg/t3code#16772
* fix(mobile): round Android queued message sheet corners by @PixPMusic in pingdotgg/t3code#14934
* fix(ssh): record the archive lock owner's real PID by @Gigioxx in pingdotgg/t3code#14598
* fix(desktop): keep annotation comment direction independent of host page by @abdelrhmanehab10 in pingdotgg/t3code#11005
* fix(ssh): qualify runner script builders in tunnel test by @juliusmarminge in pingdotgg/t3code#18078
* fix(web): keep thread links open until the shell is live by @saphid in pingdotgg/t3code#14697
* fix(web): scope PR title collapse to tab scrollers by @Adamulek123 in pingdotgg/t3code#14644
* fix(server): detect fork PRs for branches without upstreams by @Adamulek123 in pingdotgg/t3code#13894
* fix(search): find threads by their branch PR number by @tris203 in pingdotgg/t3code#14658
* feat(web): show Claude workflow phases and members in Lineage by @Bil0000 in pingdotgg/t3code#12598
* fix(mobile): round Android Agents sheet corners by @PixPMusic in pingdotgg/t3code#14925
* fix(web): the Usage page sends a signed-out browser to pairing by @AdEx-Partners-DE in pingdotgg/t3code#17938
* fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end by @juliusmarminge in pingdotgg/t3code#14744
* fix(server): OpenCode 2 continuations replay only their own background reply by @juliusmarminge in pingdotgg/t3code#14752
* fix(server): ACP reapplies a model after a switch away from it failed partway by @juliusmarminge in pingdotgg/t3code#14723
* fix(web): focus settings search with command-f by @extoci in pingdotgg/t3code#17859
* fix(mobile): keep Android project paths on one line by @wellorbetter in pingdotgg/t3code#14178
* fix(web): unpin preview dragging on narrow chat canvases by @MatthewFeroz in pingdotgg/t3code#15556
* fix(web): thread details toggle no longer covers the thread title on Windows desktop by @freddy-d in pingdotgg/t3code#16869
* fix(server): a directory no longer resolves as the resource monitor binary by @Furox-Art in pingdotgg/t3code#16838
* fix(server): a Claude usage limit no longer resets the context meter to 0% by @Vantrongs in pingdotgg/t3code#16394
* fix(server): GitLab merge requests can expand unchanged lines by @ScottN-PV in pingdotgg/t3code#17528
* fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill by @ScottN-PV in pingdotgg/t3code#17389
* fix(web): pass hex theme colors to HTML renders by @RustedAperture in pingdotgg/t3code#16325
* fix(web): align the API estimate info icon by @RakshithBhat03 in pingdotgg/t3code#15655
* test(server): ACP teardown tests pass on Windows hosts by @sheehanmunim in pingdotgg/t3code#17080
* fix(server): sync device tool license versions with installer pins by @Yash-Singh1 in pingdotgg/t3code#18121
* fix: sync model favorites and visibility across clients by @jakeleventhal in pingdotgg/t3code#16816
* chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory by @dependabot[bot] in pingdotgg/t3code#16309
* fix(server): update fff to stop runaway watcher rescans by @realhasanshoaib in pingdotgg/t3code#14543
* fix(mobile): license generation works with filtered installs by @Yash-Singh1 in pingdotgg/t3code#18127
* fix(mobile): image-only messages ask the agent to respond, like desktop by @whoisaldo in pingdotgg/t3code#16480

## New Contributors
* @Maseeek made their first contribution in pingdotgg/t3code#17530
* @TanJeeSchuan made their first contribution in pingdotgg/t3code#17706
* @fixfon made their first contribution in pingdotgg/t3code#17766
* @id0Sch made their first contribution in pingdotgg/t3code#16143
* @raphaelpra made their first contribution in pingdotgg/t3code#15240
* @Fluffy-Bunny-23 made their first contribution in pingdotgg/t3code#14475
* @arhammahajan made their first contribution in pingdotgg/t3code#16019
* @connwalk made their first contribution in pingdotgg/t3code#17499
* @abdelrhmanehab10 made their first contribution in pingdotgg/t3code#11005
* @AdEx-Partners-DE made their first contribution in pingdotgg/t3code#17938
* @wellorbetter made their first contribution in pingdotgg/t3code#14178
* @freddy-d made their first contribution in pingdotgg/t3code#16869
* @Furox-Art made their first contribution in pingdotgg/t3code#16838
* @RustedAperture made their first contribution in pingdotgg/t3code#16325
* @sheehanmunim made their first contribution in pingdotgg/t3code#17080
* @realhasanshoaib made their first contribution in pingdotgg/t3code#14543
* @whoisaldo made their first contribution in pingdotgg/t3code#16480

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261011.2955...v0.0.46-nightly.20261011.2967

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261011.2967
LadyBluenotes added a commit to LadyBluenotes/grandtheftrepo that referenced this pull request Oct 12, 2026
* feat(source-control): GitCafe lives in @t3tools/source-control-gitcafe (pingdotgg#17681)

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

* fix(web): add provider wizard no longer shifts sideways while it grows (pingdotgg#17292)

* fix(web): PR search keeps the caret where you type (pingdotgg#17675)

* fix(server): thread PR badges catch up when another environment reads the PR (pingdotgg#17729)

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

* fix(server): refuse editor paths with line breaks or quotes when the editor is a Windows command shim (pingdotgg#17749)

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

* fix(web): align compact button touch targets (pingdotgg#17748)

* fix(server): t3_thread_launch refuses a new worktree whose base ref has no commit (pingdotgg#17791)

* fix(web): omit underlines on markdown image links (pingdotgg#17728)

* fix(server): restore auto resume for wrapped Claude gateway rate limits (pingdotgg#17778)

* fix(opencode): name OpenCode 2 sessions after their thread (pingdotgg#17414)

* fix(web): find update settings from the command palette (pingdotgg#17396)

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

* fix(provider-opencode): tell OpenCode Zen and Go models apart (pingdotgg#17424)

* fix(server): a pull that fast-forwards no longer fails on large Git output (pingdotgg#17376)

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

* fix(web): cancel question auto-advance after navigation (pingdotgg#17364)

* fix(server): a bare repository name resolves to the signed-in account again (pingdotgg#17379)

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

* fix(web): a maximized right panel stays maximized when you return to its thread (pingdotgg#17327)

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

* fix(mobile): allow starting a task with only an image (pingdotgg#17409)

* fix(server): PR watch no longer reports passed while a second run of a check is still going (pingdotgg#17344)

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

* fix(server): say why a thread can't be settled (pingdotgg#17258)

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

* fix(server): prevent busy terminals from starving history persistence (pingdotgg#17181)

* feat(server): use macOS .icns app icons as project icons (pingdotgg#17149)

* fix(mobile): usage reset icon lines up with its row (pingdotgg#17175)

* fix(web): paths pasted after @ keep their underscores (pingdotgg#16619)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): settle every OpenCode subagent call one report answers (pingdotgg#17134)

* perf(web): switching project keeps Diagnostics and Providers mounted (pingdotgg#17122)

* perf(web): Open Source Licenses downloads its manifest once per session (pingdotgg#17119)

* fix(server): restore OpenCode adapter test typecheck (pingdotgg#17810)

* fix(server): Claude subagents show the reasoning effort they run at (pingdotgg#17496)

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

* feat(server): stop Claude subagents without stopping their owner (pingdotgg#17826)

* fix(server): stopped native subagents no longer read as Running (pingdotgg#17223)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* perf(server): t3_thread_list reads only the listed project's threads (pingdotgg#17843)

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

* fix(server): show diffs for projects outside the server cwd (pingdotgg#17724)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): check the specific scope for scripts, preview input, and full-access MCP grants (pingdotgg#17772)

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

* fix(source-control): stop Forgejo status refresh from scanning every pull request (pingdotgg#12223)

Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Signed-off-by: Loïs Postula <lois@postu.la>

* refactor(contracts): source control provider kind is an open branded slug (pingdotgg#17739)

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

* feat(source-control): each host package ships a client definition (pingdotgg#17746)

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

* refactor(client-runtime): add project clone sources come from host definitions (pingdotgg#17756)

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

* refactor(web): host presentation and behavior come from client definitions (pingdotgg#17757)

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

* refactor(source-control): reference parsing and project matching are host resolvers (pingdotgg#17770)

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

* feat(pull-requests): quick actions follow each host's capabilities, not GitHub (pingdotgg#17774)

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

* feat(projects): new projects can be published to any ready host (pingdotgg#17860)

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

* fix(server): send Claude MCP servers over the control channel (pingdotgg#17898)

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

* fix(web): a finished reply replaced by a steer is no longer labeled partial (pingdotgg#17761)

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

* fix(client-runtime): queued runs that start after a steer show up in the thread (pingdotgg#17764)

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

* feat(mobile): choose the microphone order for voice input (pingdotgg#17896)

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

* feat(source-control): host settings live on each host's definition, with a GitCafe token (pingdotgg#17901)

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

* fix(pi): preserve tool images and structured results (pingdotgg#17851)

* fix(server): Claude 5 task lists reach the tasks drawer (pingdotgg#14964)

* fix(web): find bar and thread details panel stop covering each other (pingdotgg#17858)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(web): use server metadata for file chip icons (pingdotgg#17923)

* fix(desktop): copy images from HTML previews (pingdotgg#17555)

* docs(pi): update installation and remote login guidance (pingdotgg#17836)

* fix(pi): preserve native abort outcomes (pingdotgg#17853)

* fix(pi): keep thinking defaults specific to each model (pingdotgg#17835)

* fix(pi): preserve shell command exit codes (pingdotgg#17834)

* fix(pi): expire and cancel extension approvals (pingdotgg#17840)

* feat(pi): include native sessions in usage reports (pingdotgg#17848)

* fix(server): route Copilot ACP subagent output into subagent threads (pingdotgg#17714)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(web): composer banner titles truncate beside their icon instead of wrapping (pingdotgg#17699)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(server): Muse turns no longer fail on Windows (pingdotgg#17163)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>

* fix(pi): allow known read-only T3 tools without approval (pingdotgg#17852)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix: worktree threads keep their worktree when the agent starts, and messages sent during setup queue (pingdotgg#17654)

* fix(server): keep Claude workflows alive while they report progress (pingdotgg#17715)

* fix(web): media preview centers its content and pins the close button (pingdotgg#17951)

* fix(server): threads without a project no longer need Git installed (pingdotgg#17959)

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

* fix(web): toggling tools and thinking at the bottom keeps you at the bottom (pingdotgg#17954)

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

* fix(web): Compact chip follows Claude's real prompt cache TTL (pingdotgg#17945)

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

* fix(usage): bound OpenCode history reads to prevent backend OOM (pingdotgg#17961)

* refactor: format diff line counts through one shared helper (pingdotgg#17948)

* fix: new projects start their first thread in the project folder, not a worktree (pingdotgg#17371)

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

* perf(server): drive shell last-error lookup from thread bindings (pingdotgg#17842)

Co-authored-by: Victor Vogel <263261067+only21mil@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(server): skip parsing plain terminal history output (pingdotgg#17179)

* perf(server): batch terminal history writes every 250 ms (pingdotgg#17183)

* perf(server): storage cleanup no longer runs a full status or size walk for worktrees it keeps (pingdotgg#17911)

* perf(usage): usage scans skip OpenCode legacy messages older than the window (pingdotgg#17254)

* perf(usage): OpenCode legacy walk stats entries before checking for symlinks (pingdotgg#17638)

Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix(web): MCP app permission prompts no longer overflow the screen (pingdotgg#17962)

* feat(provider-antigravity): support subscription quota and usage limits (pingdotgg#17530)

* fix(desktop): keep generated annotation styles in sync (pingdotgg#17838)

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

* fix(web): Resume continues on the model picked in the composer (pingdotgg#17867)

* fix(devices): bump agent-device to 0.21.24 for native Windows hosts (pingdotgg#17706)

* fix(web): keybinding group headings no longer touch the group above (pingdotgg#17766)

* feat(web): configure OpenTelemetry exports in diagnostics (pingdotgg#12538)

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

* docs: update user count to 500k (pingdotgg#17783)

* fix(mobile): working pill no longer bulges on its right end (pingdotgg#16143)

Signed-off-by: id0sch <id0sch@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf(opencode): stop retaining every message of a loaded OpenCode thread (pingdotgg#17784)

* fix(web): switch thumbs stay in their track while scrolling (pingdotgg#15240)

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

* fix(keybindings): thread jumps no longer overlap model picker jumps (pingdotgg#14475)

* fix(mobile): restore QR scanning in iPad pairing sheet (pingdotgg#16019)

* fix(server): delegated Muse tasks no longer ask approval for every command (pingdotgg#18065)

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

* fix(codex): prevent unsupported agent history in ChatGPT sharing (pingdotgg#17499)

Co-authored-by: connorwalker <connor@project-chinook.com>

* fix(server): disabled providers stop checking for CLI updates (pingdotgg#16772)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* fix(mobile): round Android queued message sheet corners (pingdotgg#14934)

* fix(ssh): record the archive lock owner's real PID (pingdotgg#14598)

* fix(desktop): keep annotation comment direction independent of host page (pingdotgg#11005)

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

* fix(ssh): qualify runner script builders in tunnel test (pingdotgg#18078)

* fix(web): keep thread links open until the shell is live (pingdotgg#14697)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* fix(web): scope PR title collapse to tab scrollers (pingdotgg#14644)

* fix(server): detect fork PRs for branches without upstreams (pingdotgg#13894)

Co-authored-by: maria-rcks <maria@kuuro.net>

* fix(search): find threads by their branch PR number (pingdotgg#14658)

Co-authored-by: maria-rcks <maria@kuuro.net>

* feat(web): show Claude workflow phases and members in Lineage (pingdotgg#12598)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: GPT-6.1-Sol (Codex) <noreply@openai.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>

* fix(mobile): round Android Agents sheet corners (pingdotgg#14925)

* fix(web): the Usage page sends a signed-out browser to pairing (pingdotgg#17938)

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

* fix(server): OpenCode 2 continuations end after a reconnect took a Stop's end (pingdotgg#14744)

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

* fix(server): OpenCode 2 continuations replay only their own background reply (pingdotgg#14752)

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

* fix(server): ACP reapplies a model after a switch away from it failed partway (pingdotgg#14723)

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

* fix(web): focus settings search with command-f (pingdotgg#17859)

* fix(mobile): keep Android project paths on one line (pingdotgg#14178)

* fix(web): unpin preview dragging on narrow chat canvases (pingdotgg#15556)

* fix(web): thread details toggle no longer covers the thread title on Windows desktop (pingdotgg#16869)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): a directory no longer resolves as the resource monitor binary (pingdotgg#16838)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): a Claude usage limit no longer resets the context meter to 0% (pingdotgg#16394)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): GitLab merge requests can expand unchanged lines (pingdotgg#17528)

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

* fix(provider-cursor): a skill tree deeper than the scan limit no longer hides every skill (pingdotgg#17389)

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

* fix(web): pass hex theme colors to HTML renders (pingdotgg#16325)

* fix(web): align the API estimate info icon (pingdotgg#15655)

* test(server): ACP teardown tests pass on Windows hosts (pingdotgg#17080)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(server): sync device tool license versions with installer pins (pingdotgg#18121)

* fix: sync model favorites and visibility across clients (pingdotgg#16816)

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

* chore(deps-dev): bump compression from 1.8.1 to 1.8.2 in the npm_and_yarn group across 1 directory (pingdotgg#16309)

Signed-off-by: dependabot[bot] <support@github.com>

* fix(server): update fff to stop runaway watcher rescans (pingdotgg#14543)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* fix(mobile): license generation works with filtered installs (pingdotgg#18127)

* fix(mobile): image-only messages ask the agent to respond, like desktop (pingdotgg#16480)

Co-authored-by: Yash Singh <saiansh2525@gmail.com>

* feat(pull-requests): guided reviews, a beta tour of a pull request (pingdotgg#18124)

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

* feat(mcp): agents can write and read pull request review guides (pingdotgg#18143)

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

* fix(server): Sol Ultrafast stops vanishing from the Codex model picker (pingdotgg#18200)

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

* fix(usage): say resets momentarily in the final minute (pingdotgg#17869)

* fix(server): preserve ambient Cursor MCP servers (pingdotgg#15875)

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

* fix(server): skip Windows cleanup for exited child processes (pingdotgg#16007)

* feat(settings): providers can be turned on or off per project (pingdotgg#17879)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

* perf(github): resolve credentials once per GraphQL request (pingdotgg#18289)

* fix(server): refresh linked PRs without a checkout (pingdotgg#17167)

* fix(mobile): add compose to the single-column iPad list (pingdotgg#18157)

* fix(mobile): let sheet lists scroll before dismissal (pingdotgg#17177)

* fix(mobile): restore compact iPad trackpad scrolling (pingdotgg#13665)

* fix(mobile): preserve filters across layout changes (pingdotgg#13085)

* fix(mobile): separate unfolded thread list from header (pingdotgg#13088)

* fix(android): Match thread fallback layouts to the loaded pane (pingdotgg#14669)

* fix(mobile): size inline MCP apps to their content (pingdotgg#17040)

* fix(mobile): preserve iPad search chrome across layout changes (pingdotgg#13667)

* fix(client): apply host color scheme to saved MCP apps (pingdotgg#17026)

* fix(android): Use MD3 loading spinners (pingdotgg#14282)

* fix(client): merge No project filters across environments (pingdotgg#17050)

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

* fix(client): tolerate blocked cookies in MCP app sandboxes (pingdotgg#17027)

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

* feat(mobile): browse and review pull requests natively (pingdotgg#18126)

* feat(mobile): guided reviews for pull requests (pingdotgg#18267)

* fix(devices): refresh backlogged iOS video and require input admission (pingdotgg#18326)

* feat(mobile): keep pull requests available offline (pingdotgg#18351)

* fix(mobile): keep bot badges out of PR attachments (pingdotgg#18347)

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

* fix(desktop): tooltips no longer open under the Windows and Linux window controls (pingdotgg#17672)

* fix(web): revert trailing toast icons (pingdotgg#18356)

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

* fix(web): even 4px inset around rows in the PR badge tooltip (pingdotgg#18352)

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

* ci(mobile): publish nightly Android APKs to a GitHub prerelease (pingdotgg#16271)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>

---------

Signed-off-by: Loïs Postula <lois@postu.la>
Signed-off-by: id0sch <id0sch@users.noreply.github.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: oliver <97427849+flamboh@users.noreply.github.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Tristan Knight <admin@snappeh.com>
Co-authored-by: Saikrishna Ambeti <saikrisha.ambeti1@gmail.com>
Co-authored-by: Zach <tzachbonfil@gmail.com>
Co-authored-by: Nikita Koynov <43469098+nkoynov@users.noreply.github.com>
Co-authored-by: Sergiy Dybskiy <s@serg.tech>
Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Karan Sharma <hello@mrkaran.dev>
Co-authored-by: Scott Norteman <snorteman@gmail.com>
Co-authored-by: Maxwell Young <maxtheyoung@gmail.com>
Co-authored-by: James Villarrubia <8172873+jamesvillarrubia@users.noreply.github.com>
Co-authored-by: Claudesaul <139932571+Claudesaul@users.noreply.github.com>
Co-authored-by: Dylan Corso <96969209+DylanTX@users.noreply.github.com>
Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com>
Co-authored-by: Prathmesh Vhatkar <psv2522@gmail.com>
Co-authored-by: Afonso Ferreira <99990310+Aforno@users.noreply.github.com>
Co-authored-by: Derek Trimm <275381468+derektrimm@users.noreply.github.com>
Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com>
Co-authored-by: Krishna Vijay <228381532+im-kvijay@users.noreply.github.com>
Co-authored-by: only21mil <thevictorvogel@gmail.com>
Co-authored-by: maria <maria@kuuro.net>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Loïs Postula <lois@postu.la>
Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com>
Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Julius Marminge <jmarminge@gmail.com>
Co-authored-by: Igor Makowski <56691628+Mnigos@users.noreply.github.com>
Co-authored-by: Matthew Feroz <136640686+MatthewFeroz@users.noreply.github.com>
Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com>
Co-authored-by: Nicholas Tindle <nicktindle@outlook.com>
Co-authored-by: Theo Browne <me@t3.gg>
Co-authored-by: Victor Vogel <263261067+only21mil@users.noreply.github.com>
Co-authored-by: Maciek Geneja <88164545+Maseeek@users.noreply.github.com>
Co-authored-by: Mike Olson <1510193+mwolson@users.noreply.github.com>
Co-authored-by: Akbar Danial Akma <44286537+akbarakma@users.noreply.github.com>
Co-authored-by: TanJeeSchuan <89920999+TanJeeSchuan@users.noreply.github.com>
Co-authored-by: fixfon <12512757+fixfon@users.noreply.github.com>
Co-authored-by: kamkm <99585688+Kamkmgamer@users.noreply.github.com>
Co-authored-by: id0Sch <id0Sch@users.noreply.github.com>
Co-authored-by: raphaelpra <3457781+raphaelpra@users.noreply.github.com>
Co-authored-by: Fluffy-Bunny-23 <193831219+Fluffy-Bunny-23@users.noreply.github.com>
Co-authored-by: Arham Mahajan <89351952+arhammahajan@users.noreply.github.com>
Co-authored-by: Connor Walker <70173040+connwalk@users.noreply.github.com>
Co-authored-by: connorwalker <connor@project-chinook.com>
Co-authored-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Alex <me@pixp.cc>
Co-authored-by: Guillermo Casanova <75276669+Gigioxx@users.noreply.github.com>
Co-authored-by: Abdelrhman Ehab <105376880+abdelrhmanehab10@users.noreply.github.com>
Co-authored-by: Alex Southwell <saphid@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Adamulek123 <adam.bogucki2018@gmail.com>
Co-authored-by: GPT-6.1-Sol (Codex) <noreply@openai.com>
Co-authored-by: AdEx-Partners-DE <stark.burns@adexpartners.com>
Co-authored-by: Exotic <118054752+extoci@users.noreply.github.com>
Co-authored-by: wellorbetter <1419919418@qq.com>
Co-authored-by: freddy-d <38051127+freddy-d@users.noreply.github.com>
Co-authored-by: Furox <177975472+Furox-Art@users.noreply.github.com>
Co-authored-by: Vantrongs <i.kosilov2003@gmail.com>
Co-authored-by: Cameron Varley <cam.avarley@gmail.com>
Co-authored-by: Sheehan Munim <80079528+sheehanmunim@users.noreply.github.com>
Co-authored-by: Jake Leventhal <jakeleventhal@me.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Hasan Shoaib <142208891+realhasanshoaib@users.noreply.github.com>
Co-authored-by: Ali Younes <159104116+whoisaldo@users.noreply.github.com>
Co-authored-by: Arav Jain <aravhawk@gmail.com>
Co-authored-by: Alb11747 <albertli_042@hotmail.com>
Co-authored-by: Dara Adedeji <76637177+SunkenInTime@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
aorwall added a commit to aorwall/t3code that referenced this pull request Oct 12, 2026
Merges upstream `pingdotgg/t3code` `e688034b5f` (223 commits, base
`aacefcd7e9`) into the fork. No merge PR was open, so this branches from
`main`.

## Resolution
- 9 conflicts, each resolved by its `preflight.mjs` verdict. The tracker
entry in `docs/fork/upstream-merge-log.md` lists them. `AGENTS.md` kept
the fork copy because upstream only changed a user count in a section
the fork drops. `nativeMarkdownText.test.ts` takes upstream's deletion.
The rest combine both sides.
- The lockfile is upstream's copy, re-derived by install.
- Landed 1226 files against 1226 in the upstream range; the gap is
explained in the tracker.
- **Fork-side fix in `apps/server/src/server.ts`**: when `Ws.layer` was
first inferred inside `layerMakeRoutes`, its requirements widened to
`any`. That failed typecheck across `binCli.ts`, `cli/server.ts`,
`server.ts` and the cli tests, and it was the `TS377030` failure the
2026-10-10 merge had blamed on upstream. Moving it to its own statement
after the imports fixes it. The fix is recorded as inventory entry
`server-ws-layer-hoist`, and the gap entry is struck.
- `UnsupportedMethodError` was added to `filesystem.getMetadata`,
`orchestration.stopWorkflow` and `server.checkOtlpEndpoint`; nothing was
dropped.
- Three stale `duplicateAddExceptions` were removed.

## Verification
`verify.mjs` passed duplicate-adds, tripwires, resolution-check,
unsupported-methods, lockfile, fmt, lint, typecheck and build. `test`
failed on 5 files, each confirmed failing when run alone:
- The same four as 2026-10-10: `ServerBrowserPage`, `AcpAdapterV2`,
`OrchestratorReplayFixtures` and `OpenCodeServerLedger`.
- New: `@t3tools/shared` `AgentScope.test.ts`. It expects
`oom_score_adj` 800, but sandbox processes inherit 935, and an
unprivileged process cannot lower it. This is the sandbox, not the code.

## Usable as-is
- Drag to reorder right-panel tabs (pingdotgg#17730). A maximized panel now stays
maximized per thread, and there are other layout fixes.
- Claude workflow phases and members show in Lineage (pingdotgg#12598).
- Threads can be found by a branch's PR number (pingdotgg#14658), and no-project
filters are merged across environments (pingdotgg#17050).
- Cmd-F focuses settings search, and update settings appear in the
command palette.
- Resume continues on the composer's model (pingdotgg#17867), and queued threads
stay subscribed (pingdotgg#15293).
- Fixes to the timeline, minimap, composer, context menus and markdown
performance.
- Desktop and mobile features, which the fork does not ship.

## Unsupported in Moatless / needs implementation
- **Guided PR reviews** (pingdotgg#18124, pingdotgg#18143): `pullRequests.reviewGuide`,
`generateReviewGuide` and `reportState`, behind the Guide tab. Already
hidden by the PR capability and `FEATURES.pullRequestSurface`.
- **`orchestration.stopWorkflow`** (pingdotgg#17826): the Stop button for Claude
subagents in `ThreadRelationshipsControl.tsx`. It has no fork gate and
renders only for threads that carry workflow members.
- **`filesystem.getMetadata`** (pingdotgg#17923): server-derived file-chip icons.
When the call is refused, chips keep their extension icons.
- **`server.checkOtlpEndpoint`** and the OTLP export settings (pingdotgg#12538).
Already behind `FEATURES.diagnostics`.
- These all save through `server.updateSettings` or `projects.mutate`,
and the existing settings gates already hide them:
  - source-control host settings and the GitCafe token (pingdotgg#17901, pingdotgg#17746);
  - writer and review-guide model settings (pingdotgg#18488);
  - per-project provider enablement (pingdotgg#17879);
  - synced model favorites (pingdotgg#16816);
  - publish to any host and new-project folder (pingdotgg#17860, pingdotgg#17371).

## Backend behavior to consider reproducing in Moatless
- **Project settings overrides**: they gain `providerInstances` and
review-guide keys, and a sweep clears the overrides of deleted projects
(pingdotgg#17879).
- **Automatic thread continuations**: on by default and capped at three
in a row (pingdotgg#18461).
- **Agent isolation**: each agent runs in its own systemd scope with a
raised OOM score, so an OOM kill spares the server (pingdotgg#17662).
- **PR sweep and settlement fixes**:
  - linked PRs refresh without a checkout (pingdotgg#17167);
  - forks are detected for branches without upstreams (pingdotgg#13894);
- PR watch no longer reports passed while a re-run check is still going
(pingdotgg#17344);
  - thread PR badges catch up across environments (pingdotgg#17729);
  - the reason a thread can't be settled is now stated (pingdotgg#17258).
- **Worktree threads**: they keep their worktree when the agent starts,
and messages sent during setup queue (pingdotgg#17654). `t3_thread_launch` also
refuses a base ref with no commit (pingdotgg#17791).
- **Provider fixes**: a missing agent binary reports a launch failure,
and Claude 5.1+ text before a tool call shows as assistant text
(pingdotgg#18364).

## After merge
- Disable the new upstream workflow: `gh workflow disable
mobile-android-apk.yml --repo soaplabs/t3code`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---
Moatless task:
https://moatless.soaplabstest.com/tasks/0c7fbce8-cdd5-426e-afb0-037def1ac545
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). triage:keep-open Keeps this PR open despite not necessarily passing the contribution guide fully 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.

3 participants