chore(v2): merge main into the V2 branch - #14504
Conversation
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ad busy (#14497) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merges origin/main (1905846) into t3code/codex-turn-mapping (f3eb99e). Brings in #14375, #10963, #14351, #14462 (vite-plus 1.0), #14479, #14480, #14485, #14486, #14490, #13612 (threads without a project), #14497 and #14499. No new migrations on main. V1 files V2 deleted (kept deleted): - provider/Layers/ClaudeAdapter(.test).ts: #14497 ignores a result that answers a different Claude turn (an echoed user_message_uuid(s) that is not the active turn's, or a non-human origin), so a /compact queued behind a Claude-initiated turn gets its own result. V2 covers part of this. ClaudeAdapterV2.ts:5913 drops the zero-turn task-notification result that #14497's test sends, and :6178 sends a positive-turn task-notification wake to a continuation run once the process echoes early. Two cases are not covered: a positive-turn task-notification wake before the process's first early echo is accepted as the prompt's result (:6161, :5945), and V2 checks only origin "task-notification" (:2289), not other non-human origins. Both are left for a separate fix in ClaudeAdapterV2, not ported here. - server.test.ts: #13612's tests for the V1 WebSocket dispatch path. The stacked ScratchWorkspace service PR adds service tests instead. Content conflicts: - relay/AgentAwarenessRelay.test.ts: V2's tests with #14462's vite-plus 1.0 API (describe.sequential -> describe(name, { concurrent: false }, ...)). V2 has no signRelayAgentActivityPublishProof block, so only startup catch-up changes. - web performance.bench.ts and client-runtime remotePerformance.bench.ts: V2's benchmarks (V2 projection fixtures, message updates) in #14462's test(name, ({ bench }) => bench(...).run(options)) form. - KeybindingsSettings.logic.test.ts: V2's order (usage.open ranked first, checked against both binding orders). Main's compareCommands and chat.newWithoutProject merged cleanly into the logic and defaults. - contracts/rpc.ts: both V2's projects.mutate and #13612's projects.ensureScratch (main's contract shape), with both import sets. - ws.ts: V2's side everywhere. #13612's V1 dispatch additions are not brought back. projects.ensureScratch is a stub that fails with "Threads without a project are not available yet.", and the config answer omits scratchWorkspaceRoot, so web and mobile do not offer the feature. The stacked ScratchWorkspace service PR implements both. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This 55-file branch sync includes a substantial threads-without-project capability, a new default shortcut, authentication/RPC changes, and a major toolchain upgrade rather than only mechanical merge resolution. Its broad runtime and sensitive-path impact requires human review. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
V2 is 12 commits behind
main. This mergesorigin/mainat 1905846 intot3code/codex-turn-mappingat f3eb99e as one merge commit that resolves the conflicts and does nothing else. #10154, which landed on main during the push, is not included.It brings in #14375, #10963, #14351, #14462 (vite-plus 1.0), #14479, #14480, #14485, #14486, #14490, #13612 (threads without a project), #14497 and #14499. There are no new migrations.
#14521, which moves "threads without a project" into a
ScratchWorkspaceservice, is stacked on this one, and both merge together. This branch also merges V2's f48d257 (#14502), with no conflicts.V1 files V2 deleted (kept deleted)
provider/Layers/ClaudeAdapter(.test).ts, fix(server): Claude /compact no longer ends early and leaves the thread busy #14497: a/compactqueued behind a Claude-initiated turn should get its own result instead of ending early. V2 covers part of this.Covered:
ClaudeAdapterV2.ts:5913drops the zero-turn task-notification result that fix(server): Claude /compact no longer ends early and leaves the thread busy #14497's test sends, so the/compactrun gets its compaction and its own terminal.Covered:
ClaudeAdapterV2.ts:6178sends a positive-turn task-notification wake to a continuation run once the process has echoed early.Follow-up, not ported:
:6161, then:5945)./compactthen ends before itscompact_boundary.origin.kind === "task-notification"(:2289). fix(server): Claude /compact no longer ends early and leaves the thread busy #14497 treats every non-human origin (peer, channel, coordinator and so on) as another turn's result, and V2 lets those end the/compactturn.Both are being fixed in
ClaudeAdapterV2in a separate PR against V2.server.test.ts: feat: start threads without a project #13612's tests for the V1 WebSocket dispatch path. The stacked PR adds service tests instead.Content conflicts
relay/AgentAwarenessRelay.test.ts: V2's tests, using chore: bump vite-plus to 1.0 #14462'sdescribe(name, { concurrent: false }, …)in place ofdescribe.sequential.apps/web/src/performance.bench.ts,packages/client-runtime/src/remotePerformance.bench.ts: V2's benchmarks, written in chore: bump vite-plus to 1.0 #14462'stest(name, ({ bench }) => bench(…).run(options))form.KeybindingsSettings.logic.test.ts: V2's Usage order, withusage.openfirst and checked against both binding orders. Main'scompareCommandsandchat.newWithoutProjectmerged cleanly.contracts/rpc.ts: both V2'sprojects.mutateand feat: start threads without a project #13612'sprojects.ensureScratch, in main's contract shape.ws.ts: V2's side everywhere, and feat: start threads without a project #13612's V1 dispatch helpers are not brought back.projects.ensureScratchis a stub that fails with "Threads without a project are not available yet." The config answer omitsscratchWorkspaceRoot, so web and mobile hide the feature. The stacked PR implements both.Verification
vp i: the lockfile and thepackage.jsonfiles match main's vite-plus 1.0 bump, and nothing else changed.tsc --noEmit, exit 0 with noerror TSorwarning TS, forapps/server,apps/web,apps/mobile,packages/contracts,packages/client-runtimeandpackages/shared.unshare -U -p:AgentAwarenessRelay.test.ts(22 passed);OrchestratorReplayFixtures.integration.test.ts,ClaudeReplayFixtures.integration.test.tsandws.test.ts(109 passed).KeybindingsSettings.logic.test.ts(21 passed),contracts/rpc.test.ts(5 passed),vscodeThemeImport.test.ts(18 passed).vp test bench --run: web 6 passed, client-runtime 5 passed.ClaudeAdapterV2with zero- and positive-turn task-notification wakes and a peer wake, with and without an early echo.vp linton the conflicted files: no errors. The three warnings inws.ts(unusedFiber,ScheduleandprojectSetupScriptRunner) are already on V2.vp fmt --checkis clean, andvp run knip:checkis clean.Model: Claude Opus 5.5 (Claude Code)
🤖 Generated with Claude Code