Skip to content

fix(workspace): surface disconnected provider transcripts - #293

Merged
Juliusolsson05 merged 3 commits into
mainfrom
fix/290-transcript-identity
Jun 18, 2026
Merged

Juliusolsson05 merged 3 commits into
mainfrom
fix/290-transcript-identity

Conversation

@Juliusolsson05

@Juliusolsson05 Juliusolsson05 commented Jun 18, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • track providerSessionId provenance so proxy-observed Claude ids stay provisional until JSONL confirms durability
  • surface transcriptStatus=disconnected instead of marking panes ready when proxy/semantic activity exists without committed JSONL
  • make no-provider soft reload non-destructive so live-only state is not erased when no durable transcript is known
  • preserve disconnected state through reload/rehydrate and show it in pane/status UI
  • add regression coverage for provider_session_observed channel/proxy behavior

Related

Verification

  • npm --prefix packages/claude-code-headless run build
  • npm run test:unit -- testing/unit/channels/semanticChannel.promptSuggestion.test.ts testing/unit/proxy/promptSuggestionDetection.test.ts
  • npm run build

Known caveat

  • npm run test:unit currently fails after initializing packages/agent-voice-dictation because Vitest discovers packages/agent-voice-dictation/apps/flow-electron/src/shared/hotkeyBinding.test.ts as a file with no Vitest suite. The targeted unit regressions for this change pass.

@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Addressed the orchestration review blocker in commit a820f6a:

  • provider ids are now explicitly non-resumable/non-history-loadable.
  • Rehydrate, reload-all, soft reload, provider reload/switch/rewind, undo-close, and now go through the same durability helper instead of reading directly.
  • Proxy-observed events no longer flip durable / sessions to during normal warmup.
  • Added focused unit coverage for proxy provisional vs JSONL durable identity transitions and disconnected gating.

Verification after the patch:

agent-code@0.0.2-beta.1 test:unit
NODE_ENV=test vitest run --project unit testing/unit/workspace/applyPromptSuggestionToRuntime.test.ts testing/unit/channels/semanticChannel.promptSuggestion.test.ts testing/unit/proxy/promptSuggestionDetection.test.ts

RUN v4.1.7 /Users/juliusolsson/Desktop/Development/agent-code/.worktrees/fix-290-transcript-identity

Test Files 3 passed (3)
Tests 16 passed (16)
Start at 14:05:09
Duration 180ms (transform 121ms, setup 0ms, import 149ms, tests 11ms, environment 0ms)

agent-code@0.0.2-beta.1 build
npm run build:app

agent-code@0.0.2-beta.1 build:app
electron-vite build && node scripts/copy-packaged-resources.mjs

vite v5.4.21 building SSR bundle for production...
transforming...
✓ 180 modules transformed.
rendering chunks...
out/main/chunks/sessionIndex-C9MGLcVO.js 15.07 kB
out/main/index.js 761.87 kB
✓ built in 419ms
vite v5.4.21 building SSR bundle for production...
transforming...
✓ 24 modules transformed.
rendering chunks...
out/preload/index.mjs 17.59 kB
✓ built in 15ms
vite v5.4.21 building for production...
transforming...
✓ 1959 modules transformed.
rendering chunks...
../../out/renderer/index.html 1.50 kB
../../out/renderer/assets/codicon-DCmgc-ay.ttf 80.34 kB
../../out/renderer/assets/editor.worker-ZSx8gsAZ.js 503.10 kB
../../out/renderer/assets/json.worker-CYJeM0Vc.js 802.53 kB
../../out/renderer/assets/html.worker-CLkxC0C0.js 1,200.21 kB
../../out/renderer/assets/css.worker-rtSqh8pb.js 1,829.45 kB
../../out/renderer/assets/ts.worker-BEz7rTSH.js 12,093.58 kB
../../out/renderer/assets/editor-DjMEC8bx.css 190.45 kB
../../out/renderer/assets/index-CyvOwdgJ.css 220.75 kB
../../out/renderer/assets/azcli-BXM2IlsQ.js 1.69 kB
../../out/renderer/assets/javascript-DMOohqc4.js 1.72 kB
../../out/renderer/assets/ini-x6GHxt7E.js 2.05 kB
../../out/renderer/assets/csp-C2AJIiui.js 2.09 kB
../../out/renderer/assets/scheme-CnrVPi0g.js 2.74 kB
../../out/renderer/assets/bat-CXk6R9i1.js 3.04 kB
../../out/renderer/assets/flow9-D8e8abbC.js 3.14 kB
../../out/renderer/assets/sb-NjH6_omD.js 3.20 kB
../../out/renderer/assets/pla-CsZTrHnY.js 3.26 kB
../../out/renderer/assets/dockerfile-CmPC2DZV.js 3.40 kB
../../out/renderer/assets/pascaligo-Cmaorwot.js 3.63 kB
../../out/renderer/assets/bicep-BF8AAygK.js 3.81 kB
../../out/renderer/assets/lua-DRbkEJ__.js 3.81 kB
../../out/renderer/assets/objective-c-Bsf9Adr2.js 3.86 kB
../../out/renderer/assets/cameligo-nP5XeB7Z.js 3.89 kB
../../out/renderer/assets/xml-R8K_5Qui.js 4.01 kB
../../out/renderer/assets/graphql-BAUBdV83.js 4.15 kB
../../out/renderer/assets/lexon-CS1RGqME.js 4.19 kB
../../out/renderer/assets/typespec-D3BaxOKL.js 4.26 kB
../../out/renderer/assets/sparql-BwgSs7wE.js 4.32 kB
../../out/renderer/assets/mips-CaM-c8sw.js 4.52 kB
../../out/renderer/assets/m3-DYNA-e-5.js 4.54 kB
../../out/renderer/assets/sophia-Z6PHlxcE.js 4.65 kB
../../out/renderer/assets/shell-nZFhZCI1.js 4.87 kB
../../out/renderer/assets/go-Co3voQ1F.js 4.88 kB
../../out/renderer/assets/fsharp-b9EwJ6OO.js 4.89 kB
../../out/renderer/assets/pascal-DLtAU0x_.js 5.10 kB
../../out/renderer/assets/r-Hxn2SnYa.js 5.18 kB
../../out/renderer/assets/less-BQjbkuJA.js 5.38 kB
../../out/renderer/assets/tcl-CF3tYq1H.js 5.43 kB
../../out/renderer/assets/qsharp-BD7c0_xf.js 5.53 kB
../../out/renderer/assets/cypher-CLz3A125.js 5.54 kB
../../out/renderer/assets/java-BqOgBITW.js 5.54 kB
../../out/renderer/assets/hcl-BgDEIw1l.js 5.59 kB
../../out/renderer/assets/kotlin-D1TiZq8i.js 5.63 kB
../../out/renderer/assets/redis-yl8TqW_z.js 5.63 kB
../../out/renderer/assets/restructuredtext-C45krjdV.js 5.71 kB
../../out/renderer/assets/powershell-BLZmOKjF.js 5.77 kB
../../out/renderer/assets/coffee-CY60ZdVX.js 5.90 kB
../../out/renderer/assets/liquid-B6iWTsxh.js 6.33 kB
../../out/renderer/assets/css-Dc1e6frd.js 6.49 kB
../../out/renderer/assets/rust-C2rcm8y9.js 6.66 kB
../../out/renderer/assets/apex-DG5IjXEF.js 6.77 kB
../../out/renderer/assets/dart-BdL3T2qP.js 6.87 kB
../../out/renderer/assets/markdown-C1LDbTIq.js 7.03 kB
../../out/renderer/assets/yaml-BsYUAQfU.js 7.04 kB
../../out/renderer/assets/mdx-CpJ9XxpB.js 7.17 kB
../../out/renderer/assets/msdax-Dkw0rKnc.js 7.33 kB
../../out/renderer/assets/csharp-B3nfFqjg.js 7.36 kB
../../out/renderer/assets/swift-pEk5NNOh.js 7.56 kB
../../out/renderer/assets/python-CrN5jGdF.js 7.66 kB
../../out/renderer/assets/ecl-BRZtCkhn.js 8.32 kB
../../out/renderer/assets/cpp-BteEkr-J.js 8.60 kB
../../out/renderer/assets/pug-KZRE8PkR.js 8.65 kB
../../out/renderer/assets/vb-dhxRY2dE.js 8.71 kB
../../out/renderer/assets/html-CQ7WA2n4.js 8.81 kB
../../out/renderer/assets/typescript-DKPiQBIC.js 9.15 kB
../../out/renderer/assets/scss-Dsuw-lBL.js 9.45 kB
../../out/renderer/assets/wgsl-CaHBWX8o.js 10.14 kB
../../out/renderer/assets/st-BG4-BhrP.js 10.53 kB
../../out/renderer/assets/twig-CHKK6meg.js 10.64 kB
../../out/renderer/assets/julia-CFXRrAu4.js 10.87 kB
../../out/renderer/assets/scala-BjP-ReDi.js 11.08 kB
../../out/renderer/assets/handlebars-CTvfx90w.js 11.59 kB
../../out/renderer/assets/systemverilog-Bn-PPJj.js 12.01 kB
../../out/renderer/assets/php-NQU4bmpL.js 12.87 kB
../../out/renderer/assets/protobuf-Dg-80f8u.js 13.06 kB
../../out/renderer/assets/perl-BPi58r3D.js 13.20 kB
../../out/renderer/assets/clojure-BQC0MhrY.js 14.33 kB
../../out/renderer/assets/razor-ChDXl44L.js 14.52 kB
../../out/renderer/assets/ruby-Bvv4DQ04.js 15.70 kB
../../out/renderer/assets/sql-Dl7Picx6.js 15.94 kB
../../out/renderer/assets/mysql--o_yUUHh.js 16.54 kB
../../out/renderer/assets/redshift-Bf-JYjU
.js 16.71 kB
../../out/renderer/assets/pgsql-BYfQsqS2.js 18.63 kB
../../out/renderer/assets/elixir-DST-1xVL.js 19.12 kB
../../out/renderer/assets/postiats-BEsqrLND.js 19.69 kB
../../out/renderer/assets/powerquery-B2m3ADxD.js 22.03 kB
../../out/renderer/assets/abap-C1iBNFz_.js 23.36 kB
../../out/renderer/assets/solidity-DLTEqBGt.js 26.41 kB
../../out/renderer/assets/tsMode-kI9Y-oKN.js 43.25 kB
../../out/renderer/assets/freemarker2-CQTzImYr.js 43.38 kB
../../out/renderer/assets/cssMode-DfYoDwzv.js 68.93 kB
../../out/renderer/assets/htmlMode-Cca9kgHE.js 69.94 kB
../../out/renderer/assets/jsonMode-C0M47KWr.js 91.76 kB
../../out/renderer/assets/index-B5AwSFMz.js 3,930.34 kB
../../out/renderer/assets/editor.main-u6sbm8b_.js 6,352.09 kB
✓ built in 11.93s

@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Corrected review-response summary after the shell stripped inline-code words from my earlier comment:

Addressed the orchestration review blocker in commit a820f6a:

  • proxy-header provider ids are now explicitly non-resumable and non-history-loadable.
  • Rehydrate, reload-all, soft reload, provider reload/switch/rewind, undo-close, and loadInitialHistoryForSession now go through the same durability helper instead of reading providerSessionId directly.
  • Proxy-observed events no longer flip durable resume-request or jsonl-entry sessions to disconnected during normal warmup.
  • Added focused unit coverage for proxy provisional vs JSONL durable identity transitions and disconnected gating.

The submodule PR is merged, and commit da4a4fc updates agent-code to point at the merged claude-code-headless main commit 6178461.

Verification after the final pointer update:

  • npm --prefix packages/claude-code-headless run build
  • npm run test:unit -- testing/unit/workspace/applyPromptSuggestionToRuntime.test.ts testing/unit/channels/semanticChannel.promptSuggestion.test.ts testing/unit/proxy/promptSuggestionDetection.test.ts
  • npm run build

@Juliusolsson05
Juliusolsson05 merged commit 63e5456 into main Jun 18, 2026
@Juliusolsson05
Juliusolsson05 deleted the fix/290-transcript-identity branch June 18, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant