Skip to content

Continue a usage-limited chat with another account or agent - #31241

Open
brennanb2025 wants to merge 18 commits into
brennanb2025/chat-account-switchfrom
brennanb2025/usage-limit-actions
Open

brennanb2025 wants to merge 18 commits into
brennanb2025/chat-account-switchfrom
brennanb2025/usage-limit-actions

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 11 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1033 $\color{#cf222e}{\Huge{\mathbf{−}}}$​20 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1013
Prod 43 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1059 $\color{#cf222e}{\Huge{\mathbf{−}}}$​138 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​921

ELI5

When a chat hits its account's usage limit, its warning row only offers Continue. Using another account or handing the work to another agent requires leaving the conversation and finding those actions elsewhere. The row now offers an account action when this open chat can follow the selection and Hand Off to Another Agent, plus Continue Now once the limit's reported reset time has passed. Before the reset, or when the provider reports no reset time, Continue Now stays hidden because the same limit would refuse the message; after switching accounts, the next message the person sends continues on the new account.

What Changed

The warning keeps its reset time and adds “Continue this chat without waiting:” followed by small outline buttons. Switch Account opens the existing account menu. With one signed-in account on this computer, Add Account… opens this chat’s native account settings. A paired host with at most one signed-in account offers Hand Off only; eligible paired hosts with two or more still offer Switch Account. Hand Off opens the existing dialog using this chat’s title and owning workspace, with a different available agent selected. File-backed sources pass their existing admitted native transcript; database-backed sources pass recent loaded chat messages. Full saved history for database-backed sources is a temporary limitation, tracked in STA-11454. No export files or retention mechanism are added. Without another available agent, Start is disabled. A Claude destination remains an editable draft that requires Send; other agents keep their existing submission behavior. The execution host resolves the file through the same account-scoped transcript importer used to open a chat in the command-line interface. The row reads the current options response on click so a newly created chat gets its saved transcript too. Older hosts or providers without a saved path use loaded chat context, labelled as chat messages. These controls disappear with Continue Now once another message is sent, and loading controls remain disabled.

Account eligibility comes from the chat's host: it verifies that launches follow account selection and that this conversation's projects store is shared with System default and every native account destination. An isolated or unverified store offers Hand Off only. Shared custom folders remain eligible. The options response carries optional canSwitchAccount and transcriptPath fields; neither is saved, and older peers safely omit or ignore them. A fresh eligibility read before each switch covers new roster destinations. Ordinary options reads outside a stopped usage-limit turn do no recovery discovery; lookup remains outside send/Stop serialization. Mounted paired rows observe their host’s account roster. A single current hand-off request prevents a late response reopening a cancelled or superseded dialog. Codex and OpenCode offer Hand Off only on this dependency base. The existing account menu, switching action and settings navigation target the chat’s host, including paired servers. Add and Manage open its native account view even when Windows Settings normally prefers WSL; explicit account-location choices and ordinary Settings visits retain their existing behavior and defaults. Chat-row switches skip terminal restart offers. The account slot keeps a fixed width through loading, Add/Switch labels, and ineligible states so Hand Off does not move; switcher instances are keyed to their owner. The phone stays unchanged. No automatic continuation, saved field, new operation, or new runtime capability is added.

Why

Changing the selected account helps only if this exact conversation will use it. Reading the host's per-chat proof keeps the button honest for shared and isolated history, including with older servers. Reusing the existing account menu and hand-off dialog keeps their sign-in, switching, and launch behavior consistent. The common pattern derives recovery controls from the current stopped turn; the extra row entry points are an intended difference: the common pattern offers those workflows from a composer picker or plugin, while Orca's existing equivalents are the status-bar account switcher and hand-off dialog. Brennan chose the row to reach them. Account recovery keeps Orca's existing native resume and separate explicit hand-off, an intended mechanism difference from the common pattern that preserves the approved conversation behavior. Passing the saved transcript file is an intended transport difference that reuses the existing agent launch flow. Automatic retry and scheduled continuation are excluded by the approved product scope.

Linked Issue

Follow-up to the usage-limit warning introduced in #30396, tracked in #30955 for moving open chats to the selected account.

Visual Proof

The review status comment contains the accepted real-agent evidence carried from 8fe9e7e030ea and before/after reset screenshots on 323e395a842. The new images use the actual notice row in a declared hidden renderer fixture, with no provider or agent run. Final dependency sync, CI and readiness remain pending.

Testing

  • One render test covers the existing switcher selecting the chat host's account while another host is focused, single-account settings routing, saved hand-off context, an ineligible agent, disabled roster loading and disappearance after sending.
  • One host contract test uses real history folders and a shared directory link to verify shared, isolated and unverified destinations, including the saved transcript path; existing notice-row and turn-status render tests cover Continue Now staying hidden until the reported reset and appearing at it, while preserving Orca-stop Continue.
  • Pre-commit staged-file lint and formatting pass. Full lint, typecheck, and workflow tests run in CI.
  • Manually tested through the real app (lane owner handles QA).
  • Automated tests added and updated.

Review

Five original source-review rounds and the incremental reset review (round 6, including fix verification) are complete. The reset review fixed stale mounted-clock eligibility and timeout overflow for supported monthly resets; two independent reviewers verified the fix at 323e395a842 with no new findings. Both named renderer suites pass 56 tests, including clock corrections, unknown/replacement resets and timer bounds at 1 and 10 mounted rows. The required pre-commit hook passes. Current-head CI is blocked by the unchanged structured-agent-session-options-read.ts exceeding its line limit (303/300). The final reference comparison, marker and readiness pass remain deferred until #30955 merges. This is not a ready-to-merge claim.

Agent skill upstream boundary

  • Not applicable; no upstream skill-installer source or data is copied.

Notes

Stacked on #30955; merge #30955 first, then retarget this to main. If the saved-chat Continue QA requires #30982, this PR must merge after both #30955 and #30982. Until #30955 lands, existing Claude chats keep their old account. Merging this alone would offer account switching without moving the conversation to the selected account.

Folder workspaces and git worktrees use the same owning-workspace hand-off path. Remote chats switch accounts only on their execution host, when that host verifies this conversation can move. Codex remains hand-off-only until the #30957 follow-up supplies account following. Older peers omit or ignore the optional response fields. The Session History list was considered for transcript lookup, but its scan roots omit isolated workspace account stores; the host importer already has the record-scoped lookup that covers them. Mobile behavior is unchanged.

Author: @BrennanKB5

Checklist

  • Focused on usage-limit recovery actions.
  • User-facing before/after, mechanism, alternatives, and merge order explained.
  • Before/after screenshots linked in the review status comment.
  • Self-reviewed for host ownership and compatibility.
  • Cross-platform, remote, folder workspace, and mobile behavior considered.
  • CI covers full lint, typecheck, and workflow checks.

@brennanb2025
brennanb2025 marked this pull request as ready for review October 20, 2026 22:17
@brennanb2025

brennanb2025 commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor Author

October 25 reset-gated Continue review: 323e395a84271ed94c8d82900efa2c4b554c21e8 (including 27e75e719cbd42bef0bb15baecab2fad1a98512e). Continue Now previously appeared while the same reported limit was still active. It now stays hidden until the failure’s reported reset time has passed, and stays hidden when no reset time is known. Switch Account and Hand Off remain available before reset. Changing accounts does not send automatically; the next message the person sends uses the selected account.

The delta review fixed two timer defects: a mounted row used an old clock after its reset changed, and supported monthly resets exceeded the timeout limit. The row now reads current deadline eligibility and uses one bounded boundary timer, refreshed on render, focus and visibility changes. No scheduled retry or saved state was added. Independent correctness and copy/performance reviewers verified both fixes with no new findings. This is source round 6, including fix verification; the earlier five rounds remain recorded.

Verification: both targeted renderer suites passed, 56 tests. Coverage includes just before/exact reset, unknown reset, replacement/remount, forward/backward clock correction, cleanup, and timer-operation bounds at 1 and 10 mounted rows. The required pre-commit hook passed. The shorter row copy is intended alongside #33392; the existing “Use it once the limit resets” explanation remains true after the action appears.

For Brennan’s review — branch renderer fixture, no agents:

Before the reset:

Renderer fixture: Continue Now hidden before reset

After the same row reaches its reset:

Renderer fixture: Continue Now appears after reset

The actual notice row and production styles rendered in a hidden Electron fixture on the M4Air. Before 00:12:36.986 UTC, Continue Now was absent; at 00:12:37.333 it was visible. Hand Off stayed visible and enabled in both frames. DOM receipts record the same element, one mount, no unmount and no action calls. A separate unknown-reset assertion kept Continue hidden. Switch Account was unavailable in this declared fixture; its unchanged path is covered by the renderer/source review.

Fresh checks found all six recorded launch/listener/keeper PIDs absent and ports 9460–9479 clear; ticket 2437 is released. One monitored Claude configuration hash changed with unknown attribution; contents were neither inspected nor restored, and the other monitored hashes matched.

Earlier accepted real-agent evidence below remains carried from qa_head=8fe9e7e030ea509f3de1096d14c3f36b5ab75c00. These two later commits change the row’s presentation only; no real-agent round was repeated. The new captures do not claim a real provider quota, account switch or reply.

Not ready to merge. Current-head CI fails because the unchanged structured-agent-session-options-read.ts has 303 counted lines against the 300-line limit. No main/base merge, retarget, final reference certification, completion marker or readiness pass was performed here. Final sync and completion remain after #30955 merges.


October 24 targeted recovery retry complete on 8fe9e7e030ea509f3de1096d14c3f36b5ab75c00. This update supersedes the two setup gaps in the October 23 result below. Default-B and all other accepted passes were retained without rerunning them.

Requested variant Result
Beyond-300 recovery PASS. The corrected genuine source’s structured tail200 and production native300 windows omit MAPLE / 64. A fact-free quota-row Full hand-off launched real Codex, which read the original JSONL and answered a neutral question with MAPLE / 64. The hand-off inputs supplied neither answer nor QA artifact paths.
Adoption with B focused PASS. A’s History-row Hand Off opened while B remained selected. Full transcript targeted A; real Codex ran in A’s folder, read A’s original native file, and answered a neutral question with FERN / 17.
Ordinary adoption with an incidental saved directory Not reachable in shipped UI. The genuine ordinary adopted record has no saved launch directory. Current saved-directory writers and backfill apply only to floating workspaces; the rendered ordinary tab menu and Chat Settings expose no directory editor. No saved metadata was forged. Resolved as unreachable, not a pass.

The source fixture initially auto-loaded its opening because 180 genuine Bash calls collapsed into two short groups. One real neutral 80-line reply fixed the recent-tail height; the new readiness prompt and reply did not repeat the probe. The separate older-message rail still indexes the opening preview by design. That outline was not passed to Codex; the transcript body/tail checks and recorded destination inputs distinguish it from loaded-tail recovery. An earlier plan incorrectly required the outline to be absent and stopped before hand-off; that setup requirement was corrected.

Both app launches stopped gracefully. Final cleanup found no survivor among 58 recorded owned process identities and no assigned-port listeners. Command overrides were reset, hooks remain enabled, Chat UI was restored off, and both replay arms are absent. All 75 selected evidence files passed independent size/hash and exact-file-list verification. Ticket 2151 is released. Hash-only checks found changes to real .claude.json, .codex/config.toml, and its backup during the concurrent run; attribution was not established and no config contents were inspected or restored. .claude/settings.json was unchanged.

The quota events were declared success-bound replay fixtures; agent replies, native-file reads, and UI actions were real. The destinations’ raw JSONL output was truncated; successful subsequent parsing and opening-message reads are retained separately. The focused-adoption workspace scan returned exit 1 because the directory had no files; the original-file reads succeeded with exit 0.

Beyond-tail Full hand-off from the quota row:

full-dialog.png

Real Codex recovery of the beyond-tail fact:

reply.png

Focus B retained while the source-A Full hand-off targets A:

b-full-codex.png

Real adopted-source recovery reply:

destination-reply.png

Ordinary adopted Chat Settings has no saved-directory editor:

ordinary-menu.png

No source changes, sync, retarget, completion marker or final-head reference claim were made. Final base sync and CI remain with the lane owner.


Historical results below (the two setup gaps above supersede their earlier incomplete verdicts):

A native chat that reaches a usage limit needs a clear way to continue. This PR adds Continue Now, account actions on the chat's host where supported, and Hand Off to Another Agent using its saved transcript or recent messages.

October 23 targeted QA result: incomplete; no PR-specific defect demonstrated. This run used exact head 8fe9e7e030ea509f3de1096d14c3f36b5ab75c00 on the M4Air. The earlier hold and queued status below are superseded. Earlier accepted passes retain their original provenance and were not repeated.

Candidate row Result
Stop → Interrupted → Continue Real run dropped: label-only change; renderer tests and existing branch proof cover it.
Older host without the optional fields PASS. A genuine a9 host omitted both fields. Its row offered Hand Off without Switch/Add, Full transcript was disabled, and Codex → Claude produced a real focused-context reply on the same owner and folder.
Saved unlisted choice across restart Real run dropped: no saved-choice or send behavior changed; existing contract tests retain unlisted IDs. No genuine candidate was fabricated.
History beyond 300 entries INCOMPLETE. Full 1M Claude ran exactly 180 separate Bash calls with matching successful results. The production native300 window initially omitted the opening fact, but a real readiness reply repeated it before quota; a later source-window measurement contained it. Codex read the original file and replied correctly; that does not prove recovery of a fact outside the final window. No filler or fixture rerun.
Adopted/incidental ownership PARTIAL. Normal History adoption was genuine, and Claude → Codex recovered the original file and folder A despite floating default B. Normal navigation moved focus to A. The intermediate adopted quota binding is driver/lead-attested; its detailed replay receipt was excluded from the delivered packet. Focus B at hand-off and a genuine ordinary record with a different incidental saved directory remain unproved. The complete extracted output's combined shell call exited 1; only the raw, truncated read has exit 0.
Roster loading and layout Agent round dropped: UI/tests row. Existing tests/screenshots retained; controlled-delay cases have no supported live seam and remain not controllable.
Local and paired Accounts routing Agent round dropped: Settings/UI row, covered by tests and existing branch proof. No new sign-ins or switcher batch.
OpenCode transcript-import hand-off Existing exact-head PASS retained. Real OpenCode source → recent-message hand-off → real Claude reply. No repeat or separate OpenCode2 run.

Four targeted recovery/ownership contract files passed 53 tests. All driver phases exited. The app stopped gracefully; the headless old host stopped through its recorded helper identity. Cleanup found no survivor among 40 recorded owned processes, ports 9420/9421 were clear, Command overrides were restored, replay arms absent, and real Claude/Codex config hashes unchanged. Ticket 2019 is released. The source checkout remains clean.

The source review remains five rounds. No new fix, main/base merge, retarget, completion marker, final-head reference comparison or readiness claim is made. Final dependency sync and its CI remain with the lane owner. Strict beyond300 and incidental/focus variants remain evidence gaps.

Older-host proof: the current client offers focused context and disables Full when the old host supplies no native path.

context-options.png

Older-host real Claude reply:

destination.png

The independent evidence audit verified all 50 payload files against the manifest with no missing/extra files or size/hash mismatch. Original-file access and real replies are supported; the coverage limits above remain. The adopted reply screenshot was inspected locally; its upload failed.


Historical review and QA evidence (earlier pending statements are superseded above):

A native chat that reaches a usage limit needs a clear way to continue. This PR adds Continue Now, account actions on the chat's host where supported, and Hand Off to Another Agent using its saved transcript or recent messages.

October23 update: targeted QA proceeds on 8fe9e7e030ea509f3de1096d14c3f36b5ab75c00; the earlier hold below is superseded. Accepted passes remain valid. The source review is unchanged at five rounds, and the remaining recovery checks are queued for a QA machine.

The current QA table requires CI and renderer tests for UI and Settings, plus a quick branch screenshot where appearance changed. It does not require real-agent rounds for those changes. The extra Stop/Interrupted/Continue, saved-unlisted-choice restart, roster and Accounts-routing rounds are therefore dropped; the PR changes only the Continue label, supplementary recovery facts and UI/navigation in those paths. Existing tests and branch screenshots cover their changed behavior, with any missing screen captured without agents. Controlled-delay experiments remain unavailable and are not a required agent round for the UI rows.

The remaining real checks are the older-host recovery hand-off, hand-off from a transcript beyond the normal loaded window, and recovery from genuine adopted/incidental-directory state. The OpenCode transcript-import flow already passed on this exact head: real source context, recent-message hand-off without a database path, then a real Claude context reply. It will not be repeated.

No completion marker or final-head comparison is claimed. Dependency sync and its CI remain with the lane owner. The evidence below is historical; targeted results will be added to this same comment.


When a native chat reaches its usage limit, account switching and conversation hand-off are elsewhere in the app. This PR puts those actions beside a manual Continue Now retry on the warning row. It does not continue automatically.

Not ready to merge. Five source-review rounds are complete on 8fe9e7e030ea509f3de1096d14c3f36b5ab75c00, with no new findings in round 5. Independent design review accepted the approach; the final comparison with the common pattern and readiness checklist are complete at source. The full current-head PR workflow, including its aggregate gate, passed. Full real QA remains incomplete.

Source review corrected account destination checks, unnecessary filesystem scanning, stale hand-off requests, roster updates, native Windows account navigation and native transcript admission. QA found two further failures: Claude Agent Teams remained selectable despite sharing Claude's usage limit, and a chat without a pinned launch directory could omit its readable transcript. The row now excludes the source agent's launch modes; ordinary History hand-offs retain their choices. Transcript lookup uses the owning host's existing directory resolver. That correction failed with the old expression and passed afterward; three named test files passed all 16 tests. Independent review accepted both corrections.

Reviewed QA reports and production metadata establish bounded results on the M4Air, using genuine saved state created by the stacked base and carried through full app-and-daemon restart. Selected screenshots have also been independently checked; the builds remain distinct:

  • Exact 8fe9e7e: saved Claude and Codex chats replied after upgrade. Claude Continue Now and an ordinary follow-up returned two real replies in the same conversation. Row hand-offs used different real agents and produced context replies; Start was disabled when no alternative was enabled. Codex's row offered Hand Off without account controls.
  • Exact 8fe9e7e, OMP: an ordinary unpinned worktree chat exposed its existing native transcript. A real Claude destination read that exact file and returned the source marker. Folder, adopted, floating and differently focused owner variants are still outstanding.
  • Exact 8fe9e7e, OpenCode: its initial default service returned an endpoint error. After explicitly choosing another available model, the real source replied; row hand-off passed recent messages without a database path and a real Claude destination replied. A separately registered OpenCode2 was not exercised.
  • Identified main 52f6960: the same saved Claude source produced real ordinary and Continue replies. Its warning lacked the new row actions. Ordinary History retained its existing agent choices.
  • Private integration 57a4934 (the PR plus main containing fix(chat): keep resumed Claude messages deliverable after settings reports #30982), saved Codex: the reviewed packet reports Continue and a second real ordinary reply. Two actual native turn contexts retain the original base-created conversation and gpt-6.1-sol/high, without changing choices in the UI.
  • Private integration 57a4934, OMP: the reviewed packet reports a cold native-file hand-off to Codex, an exact-file read with exit 0, and a context reply. The source also completed Continue → Stop → Interrupted → an ordinary reply. Production record audits establish the original source native identity through both resumes. This does not cover the remaining ownership variants.
  • Private integration 57a4934, OpenCode History: ordinary History hand-off passed recent context to a real Codex destination, followed by a neutral context question and real reply. Full transcript remained unavailable; this was the existing History route, not an additional row-hand-off run.

The integration packet and selected production/native metadata have been independently transferred, checksum-verified and reviewed. Four selected integration screenshots have also been checksum-verified and personally inspected. These are results from a separate build, not exact-8fe9e7e evidence.

Usage-limit events were explicitly replayed through real-agent forwarding; subsequent actions and replies were real. No natural account exhaustion is claimed. The Codex audit retains its user-message frames before the replayed refusal. These subsets do not certify the remaining flows or replace final-head QA after another source change.

Managed-Claude sign-in initially failed to save, and another authorization timed out. Independently transferred callback/save receipts now establish two saved, distinct subscription OAuth accounts. Selected real-user security preference hashes stayed unchanged in the supplied before/after receipts.

Direct account-switch functional evidence is now accepted on private integration 57a4934. The genuine base-created Claude conversation produced a real reply on account 1, then row Switch Account → account 2 → explicit Continue Now → real reply, then the reverse selection and Continue produced a new successful reply in that same native conversation. Actual CLI launch directories follow account 1 → 2 → 1; native Claude sign-in status reports first-party OAuth and matching saved-account identity hashes, with proxy credentials absent. Account selection did not send automatically. The original stored history home remains its provenance; it was not rewritten. Both forward and corrected reverse reply screenshots were personally inspected; the reverse body and 2:46 PM timestamp match the previously checked completed turn and assistant journal entry. These are replayed limit states followed by real actions/replies, not actual account exhaustion or exact-8fe9e7e app evidence.

The same integration's ordinary History Full session transcript hand-off started a real Codex destination. Checked production metadata shows the destination read the original native file successfully, then answered a neutral source-marker question; neither user prompt supplied the answer. Its settled reply screenshot was personally inspected. This covers that History consumer, not beyond-loaded-tail recovery or a quota-row alternative-agent test.

The integration Pi reply is now independently supported by the transferred driver report and personally inspected screenshot: the real source answered the inventory question and its marker. Native and positive closure metadata, plus a successful harness receipt, establish existing-file admission, missing-file rejection, and restoration/readmission of the same inode and file hash through the production recovery function. That function file matches exact 8fe9e7e. This closes the bounded Pi reply-plus-function evidence requirement; it does not claim a Pi quota row, normal RPC/renderer recovery advertisement, or an exact-head app run. The mapper cannot naturally produce the tested quota state, and normal options without that state omit the recovery path.

The earlier paired Claude source request failed with an actual upstream capacity limit before replay; the forwarder preserved that failure and emitted no quota frames. The single authorized retry after the reported reset succeeded. Checked source and emitted terminal frames bind the same native conversation and user request: genuine completion was followed by one synthetic quota replay. The actual row showed Continue Now and Hand Off only, using the peer’s zero-account roster while this computer had two managed accounts. A Full native-file hand-off, cancel/reopen, and Start reached a real Codex destination on the same paired host. Selected actual native and tool receipts establish the original source-file read with exit 0, correct owning home/directory, gpt-6.1-sol/high, two successful destination turns, and a neutral source-marker reply. Row and settled reply screenshots were personally inspected. A separate Full-dialog screenshot caught a label transition, so it is not accepted as settled dialog geometry. This closes bounded current paired row/file-consumer coverage, not live managed roster switching or every ownership/loading variant. The server restart changed its runtime identifier; the saved host, home and native source stayed the same. The source launch’s explicit configuration-directory variable remains unverified; its actual owning home and native path are supported. All results are on private integration 57a4934, with replayed limits and real subsequent actions.

The earlier older-host attempt produced ordinary Codex replies but no verified quota recovery. That historical gap is partly covered by the newer bounded run below; a real alternative-agent reply is still missing.

A hidden local Accounts page stayed at one rendered account after the lead added the second through the API. That bypassed the normal UI completion runner, which refreshes local settings, so this observation alone does not establish a user-facing refresh regression. Normal Add completion/return remains unverified. The observer’s long passive timers and the owned test app requiring a verified root-only forced stop are retained as QA setup limitations, without a performance or PR-cause claim.

A local recognized Codex terminal source reached an editable, unsent Claude draft and then a real reply after one explicit Send on integration 57a4934. The source, edited draft and completed reply screenshots were personally inspected. Selected production receipts now independently establish the recognized source identity, zero items/submissions before Send, the explicit Send, successful destination turn, completed search of the exact original Codex transcript with the marker in its output, and restoration of the temporary command setting. The local tool receipt has no separate numeric exit field, so none is inferred. A fresh native sign-in receipt under the actual destination launch directory matches the first managed account, with proxy credentials absent. The generated draft already contained source results; the completed file-access receipt, rather than the correct answer alone, establishes transcript access. Its inherited model and effort stayed unchanged. Two pre-existing hidden drafts were observed and left untouched. This local result does not turn the separate, earlier paired Claude-destination failure into a pass.

The preserved integration folder-source experiment has now reached a real destination. Its genuine OMP source retained the same native conversation and existing replayed usage-limit row. Full session transcript hand-off started Codex in the original nongit folder; the actual completed read returned all 9,395 bytes of the original native file with exit 0 and a matching digest. Two successful destination turns include a neutral question whose prompt omitted the private marker and inventory answers; the reply supplied both. The original source inode, size, modification time and hash stayed unchanged. Recovered source-specific original and emitted frames bind the earlier genuine successful source turn to its substituted quota result; no new replay was needed. This is private integration 57a4934 evidence, not an exact-head run or beyond-loaded-tail coverage. The settled Full dialog and completed reply screenshots were personally inspected.

The same completed-reply screenshot shows Indexed Session History reporting Codex as zero messages with no preview. Actual destination turn and native metadata establish two successful replies; the stale index display is an unexpected candidate bug, with no data-loss or PR-cause conclusion. The transferred main 52f6960 comparison receipts and before/after screenshots have now been reviewed. With two real replies, the fresh profile showed three messages and the first preview about 15.9 seconds after completion; ONE normal History refresh showed five messages and the updated preview at about 30.2 seconds. Zero messages/no preview did not reproduce there. The corresponding fresh ordinary-chat comparison on integration hit a real model-capacity refusal on its first request at the unchanged model/effort, so two-reply comparison remains incomplete. The original hand-off entry already showed five messages and five previews before that new request and still showed five after one normal refresh; the earlier preview text was missed by the collector. These receipts do not show that refresh repaired the original zero-count observation. Profile/ordinary-versus-handoff differences still prevent a PR-cause conclusion. A normal generated Git-status command also failed because this workspace is a nongit folder; Codex explained that and completed its reply.

Floating setup first reached the existing picker-trust boundary and restored the prior setting. An explicitly approved offline QA fixture then changed only the stopped QA profile’s saved trusted-directory key; other profile domains and the existing source/journal hashes stayed unchanged. This is not native-picker UI coverage. The final receipt records restoration of only that trusted-directory key after writers stopped; the journal and three selected native files retain identical inode, size, modification time and hash across restoration. Unrelated settings and profile-domain preservation remains receipt-attested. This is not a whole-profile restoration. The independently transferred, checksum-verified packet now supports a genuine floating OMP source at directory A, a real reply and replayed quota, followed by selecting project B while the source remains visible. Some final default/focus readbacks remain report-attested. Its Full context path and start directory remain A. Structured destinations are disabled with “No chat in a subfolder”; the enabled real Codex CLI route reached a settled dialog but did not start a destination before its cutoff. The driver was stopped 17 seconds late; checked receipts support exit 130 and absence of its four recorded processes. The guard transaction itself remains report-attested. The disabled-choice policy exists on inspected main source, but this particular observation is not yet attributed. No completed floating consumer reply is accepted yet. Adopted and incidental-pin variants remain outstanding.

The final QA worker reported failed/incomplete. The transferred archive and every content file passed byte/checksum and exact-file-set verification. Checked cleanup receipts show all 216 recorded QA processes exited, 32 supervisors absent, assigned ports clear, and approved QA security artifacts removed; genuine profiles, journals and native histories were preserved. The ticket expired while final evidence was being accepted, after the recorded app cleanup. A fresh Mac QA run has started to cover the remaining flows. A normal read-only journal inspection failed after shutdown; a static immutable read-only inspection then opened the preserved journal without repair. This is an inspection limitation, with no data-loss or PR-cause conclusion. The source usage replay started ten seconds after its internal cutoff, and the driver stopped about four seconds after its target; neither extends the evidence into an unperformed flow.

The preserved managed-account identities are still listed, but installed Claude reports both QA homes signed out after removal of the dedicated QA keychain. Earlier actual sign-in and local account-switch evidence remains accepted. A local Claude settings card with no existing environment variables did not expose an editor for adding the first one; source inspection confirms the remote-host editor is available.

The isolated-source hand-off is now accepted on private integration 57a4934. An independently transferred, checksum-verified 48-file packet supports the normal peer System selection, explicit isolated launch directory, genuine Claude reply and source-matched replayed usage limit. The actual row offered Hand Off without Add or Switch despite two saved account IDs. Its OMP destination used the original native file, completed reads of lines 1–38 and 39–end, then answered a neutral inventory question. Both reads retain 768-column clipping and the first was byte-truncated; no complete raw-byte read or numeric exit code is claimed. The source marker appeared in the title, so marker accuracy alone is not evidence; selected file-tool receipts and the quantities absent from the hand-off prompt provide the bounded context evidence. The original file's post-cut inode/hash remained unchanged during this consumer. Full current-epoch journal receipts report both sessions completed, with no pending or queued submissions. The actual server profile/journal/native join is supported. A later verified supplement contains literal named Playwright closure and repeated final account, environment-name and Command readbacks. Equality with the original pre-source settings remains report-attested because the earliest literal readback may already follow restoration. The normal driver exit and absence of its seven recorded process identities are supported. This is neither beyond-loaded-context nor exact-head app evidence.

Keeping a paired-server chat visible while a different local workspace is focused is not reachable in the shipped UI: switching workspaces hides the peer pane, while floating chats belong to the local host. The remaining ownership checks cover the reachable arrangements: a local floating chat while a paired workspace is focused, and the ordinary paired chat’s account actions against its actual host. Those checks still require real replies; the unreachable arrangement supplies no pass or waiver. The dialog screenshot also shows overlapping label text, without settled-state timing proof, and the completed reader's History entry shows zero messages/no preview. Those observations retain no demonstrated PR cause. The bounded genuine long-context fixture failed its measurement: the real agent read the allowlist and checked only one of 215 requested artifacts, then stopped and proposed batching. The verified packet and independent audit support only 20 decoded items, 14 composed items, no older page and the early fact still present after a normal reload. It stopped before a new quota replay or reader; this supplies no beyond-loaded-context acceptance and no PR-failure conclusion. The driver exited normally and its five recorded process identities were absent; a final supplement now contains the literal named Playwright closure receipt. On the older server, selected native and gateway receipts bind the real Codex completion to its preserved conversation, unchanged model and effort. The transferred screenshot shows the rendered reply. Literal normal-UI readbacks support restoration of both original commands, arguments and environment at 01:40:59Z; selected persisted settings agree. The driver exited normally at 01:42:09Z, its four recorded identities were absent and the named browser session closed. That attempt ran no quota recovery. The newer run below verifies the older-server row and delivered recent-message fallback; the alternative-agent reply remains incomplete. The original 01:36Z restoration deadline was missed; the later prospective extension does not erase that QA boundary failure. The separately registered OpenCode 2 flow was not exercised: its first version-probe output was lost to an evidence-capture assertion before any driver, source or settings change. One authorized corrected read-only probe saved exit 0 and literal opencode v2.0.21. This establishes the version only, with no source/recovery coverage or sign-in diagnosis. An unexpected hosted-review connection closed with Unauthorized during the older run; no host or PR cause was established. Installed Claude was 2.1.307 rather than the earlier 2.1.306 inventory; no worker install or cause was established.

The latest floating/peer packet also exposed two report discrepancies: a screenshot contained an existing conversation despite prose saying no chats were open, and recorded handback occurred earlier than its prose timestamp. These are evidence-boundary corrections, not additional test coverage. Floating History also showed “Unavailable worktree / No active worktree matches,” and a settings pane stayed blank until renderer reload; neither has a demonstrated PR cause. An earlier QA driver inspected a global process listing outside its assigned CDP scope and printed an unrelated command identifier; no secret output, real-home file read or process mutation was observed. The lead was instructed to stop it using its verified recorded process identity, and subsequent drivers are restricted to CDP. Raw diagnostic logs stay private. No readiness claim relies on that diagnostic work.

The latest Mac worker settled failed/incomplete. Its final archive and all 52 content files plus the manifest passed independent byte, checksum and exact-file-list verification. Transferred individual receipts support final app, daemon and driver exits, clear assigned ports, named browser closure and the limited trust-key restoration above. The final report summarizes a broader 102-identity sweep; that total is not an individually transferred final sweep. Own prior QA keychain/password paths are recorded absent; preservation of the remaining genuine profiles and histories is worker-reported. The original cleanup reserve was exceeded before final absence was verified. The transfer helper also exited and closed its terminal; QA ticket 1238 was released after the recorded cleanup and helper exit were accepted. No completion marker is added.

The next older-host run is now checksum-verified and reviewed: stacked-base server a9d0cba with private integration client 57a4934, using the preserved QA profiles in place. The real Codex source replied at its unchanged model and effort, then one declared, source-bound synthetic quota refusal followed a successful upstream request. The actual old-host options response omits both new fields; the row offers Hand Off without account controls, Full transcript is disabled, and the real Pi destination receives accurately labelled recent chat messages without a transcript path. The flow remains incomplete: Pi automatically chose anthropic/claude-opus-4-8 and returned a 401 with no tools or successful reply. Its separate preflight had exercised another provider/model, so that preflight did not validate this route. No provider retry, model weakening, broken-auth diagnosis or PR-cause conclusion is claimed. The existing Focused picker description still implies older transcript access, tracked in STA-11589. This is compatibility evidence from a separate assembled QA build, not exact-head app evidence.

Selected settings readbacks match the originals, including absent override keys. Full production journal folds show no pending or queued submissions in the source or failed destination. Literal receipts support the old-server and driver exits and named browser closure; other recorded process dispositions and port clearance remain receipt-attested. That client was retained for the subsequent setup checks and has now been stopped; bounded cleanup is recorded below. The 29 content files and manifest passed exact-file-list, byte and checksum verification; the quota, picker and failure screenshots were personally inspected. No completed marker is added.

The independently registered OpenCode 2 remains unexercised after a bounded setup diagnosis. Its installed version is verified, but no compatible sign-in route under the isolated QA home was established. Read-only machine database counts describe only the saved checkpoint while a write-ahead log exists; they prove neither valid current sign-in nor its absence. No credentials were extracted or copied and no shared database was opened for writing. The selected diagnosis packet passed byte, checksum and exact-file-list verification. This is incomplete setup, not evidence that authentication or this PR is broken.

The required beyond-loaded-history test also remains unexercised. Initial setup correctly rejected the plain test folder as a Git repository; one corrected attempt opened it through the supported folder route. The actual Claude launch opened an ordinary terminal at default Opus 5.5/medium, without confirming the required 1M model. The driver cancelled without changing model or effort and stopped before any source message or the 180-call fixture. Both saved structured records in this packet are Codex records, so the Claude native-chat surface and its normal composed 300-item window were not measured. No source reply, history-boundary, quota recovery or destination-read acceptance follows. The 22 content files plus manifest passed byte, checksum and exact-file-list verification; three whole-window screenshots were personally inspected.

That continuation settled failed/incomplete and its QA ticket was released after cleanup acceptance. Selected raw guards document the owned client and daemon shutdown; the targeted process receipt found all 48 recorded identities absent at 04:12:02Z, and the assigned 9420–9439 listener check found no listeners. This does not claim every unrecorded descendant or ephemeral port was enumerated. All three named browsers closed and their drivers exited normally; driver exit does not mean a tested flow passed. The two old-host and two client structured records had no pending or queued submissions; the Claude terminal queue API remained unavailable. Genuine profiles, histories and folder metadata were preserved according to the selected disposition; prior command-restoration evidence remains separate. Final hash-only comparison found the real Codex configuration changed with unknown cause; no contents were inspected, copied or restored. Existing reconnecting/history warnings, global Connecting while Local was selected, an automatic unsent Codex draft, an empty Quick Command draft and console errors were observed without an established PR cause. Required remaining flows are unwaived. Full exact-head PR checks were reverified green, and GitHub still reports this reviewed head clean and mergeable; these facts do not replace missing QA.

The preserved floating-source hand-off now has a further bounded result on private integration 57a4934. Before one Start, production readbacks show the actual paired workspace focused, a different configured default folder, and the visible local source retaining its own pinned folder. The real Codex terminal started in that pinned folder under the isolated owning home with gpt-6.1-sol/high. Selected, checksum-verified completed-tool receipts report an exit-0 read containing all 13,307 bytes of the original native file; a real neutral follow-up returned its private context and confirmed the home and working directory. Four whole-window screenshots were personally inspected. The source and reader were both this integration build, so this does not establish creation by an earlier build or exact-head runtime coverage.

Group 4 remains incomplete. The first reliable Settings-page readback of the different default folder came after Start, although its production setting value was captured before Start. Genuine adopted-source and incidental directory-pin variants, ordinary paired account controls, native-picker interaction and a different previous-build creator remain unverified. Default-folder and directory-trust setup used declared test fixtures. The driver exited and its named browser closed; the test apps were retained idle for separately gated checks, so final process shutdown and trust-key restoration are still owed. Unexpected observations were a generated non-git diagnostic followed by successful file reading, copying the last QA reply to the clipboard, and History labels/previews differing from the open source. The driver briefly explored History/tab menus after a hold instruction; that scope deviation produced no adoption, pin change or additional hand-off, and is not coverage. No PR cause is inferred. A diagnosed driver-bootstrap issue was handled with one documented private timing correction; the installed tool and PR source were unchanged.

Group 5 remains incomplete. A read-only check found no genuine choice saved by an earlier build that is absent from the current model list. The inspected floating OMP chat kept Gemini 3.1 Pro Preview/high/1M; that exact model was listed in its source-bound production options and shown selected in the normal model menu. The returned catalog was not newly refreshed, and source and reader were both private integration 57a4934. No restart, sends or two-reply continuity run occurred. Selected before/after readbacks matched and the menu closed; broader settings preservation and zero actions are report attestations. Temporary selection of a similar-title companion tab and rejection of a stale control reference were retained as diagnostics, without a product-defect claim. The driver exited normally, its named browser closed, and nine recorded targets were absent; final rig shutdown and trust-key restoration are still owed. The packet and both whole-window images passed independent integrity review. Saved-alias and genuinely unlisted-choice continuity remain required and unwaived.

Group 6 remains incomplete. On private integration 57a4934, a natural double-click on Hand Off opened one dialog; Cancel left the observed source state unchanged without starting a destination. Seven real CLI alternatives were enabled. One explicit Continue Now produced a settled OMP reply, followed by one ordinary prompt and another real reply, retaining the same native conversation and Gemini 3.1 Pro Preview/high/1M choice. The click occurred while a separately issued real options request was naturally pending for about 23 milliseconds; this does not establish controlled delay or the identity of the Hand Off request. The optional delay seam was immutable, so no delay fixture was installed. Stop and Interrupted Continue remain unexercised because the driver searched for the wrong accessible label; no product-control failure is inferred.

The 60 content files plus manifest passed exact file-set, byte and checksum verification, and an independent audit agreed with these limits. Five whole-window images were personally inspected. Normal Settings UI and leave/reentry receipts establish restoration of the temporary OMP command; the floating chat covers that field in the restoration screenshot. Selected settings equality is receipt-attested. Both drivers exited, their named browsers closed and five recorded targets per driver were absent. Final rig shutdown and restoration of the temporary trusted-directory key remain under separate cleanup validation. History changed from Local Mac/All/23 entries to the paired workspace/4 entries without direct History interaction; cause remains unknown. The 27 current-epoch session audit folds report no pending or queued submissions under an explicitly separate reviewed-head reducer; terminal queues remain unobservable. None of these results completes the missing loading, account, upgrade or ownership cases.

The final Mac continuation settled failed/incomplete, and QA ticket 1333 was released after cleanup acceptance. The final archive and all 59 content files plus manifest passed exact file-set, byte and checksum verification; independent review found no blocking cleanup mismatch. Receipts show 80 recorded process IDs absent, the assigned ports clear, all four databases unused, and no remaining write-ahead or shared-memory sidecars. The first child-stop batch lost its partial signal receipt; those actions remain unknown. The replacement procedure used three freshly guarded root stops. Two later helpers stopped before opening a database because of timestamp precision and a normal native shutdown append; their failed receipts are preserved. One approved SQLite open/read/close removed empty sidecars without changing the journals. The temporary trusted-directory key was then restored with an exact revision check; the original settings content hash, other settings, other profile domains and native history were preserved by the checked receipts. Genuine profiles remain in place. Hash-only checks found changes to the real Codex configuration and installed QA driver with unknown causes; their contents were neither inspected nor restored, and the approved private driver copy stayed unchanged. These are bounded cleanup results, not missing functional coverage or a ready verdict.

Account sign-in completion and repeated switcher testing waived by Brennan (October 22): “Why do I need four claude sign ins??? Isn't this reusing this existing claude switcher? This doesn't need to be tested if reusing the same code”. The row reuses the existing account list and switch action, and Add completion uses the existing sign-in flow. The earlier real managed switch 1→2→1 with real replies remains accepted. The repeated human sign-in batch is cancelled; these waived checks are not reported as newly passed. Remaining checks need no sign-in: row Add opens local Accounts at the add entry; paired Manage and Add where shown open Accounts on the chat's owning host; the row Switch list matches the status-bar switcher.

The latest routing-only Mac attempt on private integration 57a4934 remains failed/incomplete. Its transferred packet passed exact file-list, byte and checksum checks, followed by independent review. Ordinary status-bar Manage Accounts opened local Accounts with two managed entries and the second selected. No eligible quota-row Add or Switch menu was established, so row navigation and row/status-bar parity remain untested. The paired host was offline with an older saved port; its actual account roster and owning-host Accounts navigation could not be verified. No standalone main comparison ran. The browser closed, but the driver was stopped 24 seconds after its target and strict fallback-process closure ordering was unproven; no completed driver report or functional pass is inferred. Usage stayed loading and a floating chat partly obscured Settings; these observations have no established PR cause. A proposed endpoint-only rig repair has not run and remains on hold until all configuration writers can be proven stopped. Existing histories remain in place; final rig cleanup is still owed.

The final Stop-only attempt on private integration 57a4934 did not reach a source request. The driver changed the QA profile’s OMP command through Settings, then failed to establish the required source identity before its cutoff. The single cleanup-only driver also failed because its identity probe depended on unavailable window.__store; it closed without restoring the command. The QA profile remains set to /opt/homebrew/bin/omp instead of its original omp-limit wrapper. No second restoration attempt or offline rewrite is authorized. This is an explicitly retained QA setup failure, with no new Stop, Interrupted, Continue or real-reply acceptance. The inspected screenshot is before any new request; the capacity error in the background belongs to an earlier Codex turn. The final packet’s 47 content files plus manifest passed exact file-list, byte and checksum verification. Selected root-exit and process receipts show the client and paired app exited normally, the recorded daemon was stopped, known recorded processes were absent, and assigned ports were clear. The final cleanup driver’s live child process IDs were not sampled, so this does not claim a complete machine-wide inventory. Selected original OMP and Codex native files retained their inodes, sizes and hashes. The real Codex configuration hash changed with unknown cause; its contents were not read or restored. Independent review accepted this as a failed/incomplete settlement. The worker was released and QA ticket 1385 is done; the unrestored command and missing functional coverage remain explicit.

Further functional QA is on hold until #30955 merges and this PR is retargeted and synced with main. The remaining driver steps, prerequisites and exact pass criteria are prepared for that final head. No new app, machine ticket or worker will start before the lane owner’s signal. Existing integration results remain preliminary; mandatory unexercised flows keep this PR not ready.

Other outstanding coverage includes the older-host alternative-agent reply, paired Accounts routing and account-list parity, remaining OMP ownership variants, cold/stale-owner/roster and cancellation paths, and Windows/WSL. Context beyond the normally loaded conversation remains unproven: the required earlier fact must be absent from the renderer’s normal composed 300-item window, then available to a real destination through the native file; raw file-line or DOM counts do not establish that. Requested unlisted model aliases normalized to a listed model before sending, so those attempts do not prove alias continuity. Grok and Antigravity code are unchanged by this PR; their separate sign-ins and runtime installations are outside this QA scope. Only the repeated account sign-in/switcher checks described above are waived by Brennan; the other required changed flows remain unwaived.

Inherited observations remain separate: STA-11573 covers loss of an untouched hand-off draft after full app-and-daemon restart on main; STA-11589 covers generic context wording when no transcript file exists; STA-11590 covers an actual OpenCode quota error classified as a generic error; STA-11596 covers a delayed generic-dialog layout shift. These are not repaired or silently accepted by this PR. Source identity, rather than a second main UI run, establishes the latter classifier/layout inheritance. The unrelated socket-test flake was repaired in merged #31520.

Database-backed chats passing recent messages is a temporary limitation tracked in STA-11454. File-backed chats intentionally pass their existing live native file, with no export or snapshot. Account selection remains scoped to the chat's host and requires an explicit Continue; a Claude hand-off opens an editable draft requiring Send.

Merge #30955 first, then retarget this PR to main. #30982 is also required. No completion marker is claimed.

For Brennan's review

Main 52f6960, the same saved source and replayed limit (before):

Main: warning row with Continue only

Current-head warning row (exact 8fe9e7e; later accepted account-switching evidence is on the separately identified integration build):

Current reviewed head: manual retry and recovery actions

Current-head OMP native-file hand-off, after explicit Send to Claude, with a real context reply:

Current reviewed head: Claude reads OMP source context and replies

Private integration 57a4934, separately identified from the exact reviewed head:

Integration: Codex reads the original OMP native file and answers a context question

Integration: OMP Interrupted after Stop, then a real ordinary reply

Integration: saved Codex Continue and ordinary follow-up replies

Integration: ordinary History OpenCode recent-context hand-off to Codex

Private integration 57a4934, bounded Pi reply and account/paired setup evidence:

Integration: real Pi source replies with inventory context and marker

Integration: local Accounts page with one saved account and Add Account

Integration: real Claude reply on the current paired server in a folder workspace

Private integration 57a4934, direct managed-account continuation and ordinary History file consumption:

Integration: real Claude reply after switching to the second OAuth account and explicit Continue

Integration: ordinary History hand-off reads the saved Claude file and Codex answers the neutral source-marker question

Private integration 57a4934, corrected reverse continuation and local terminal hand-off:

Integration: real reverse-account Continue reply with its 2:46 PM timestamp

Integration: local terminal hand-off opens an editable unsent Claude draft

Integration: real Claude reply after explicit Send from that local terminal hand-off

Private integration 57a4934, current paired usage-limit recovery:

Integration: paired-host quota row offers Hand Off using its own roster

Integration: paired Codex reads the original Claude file and answers a neutral context question

Private integration 57a4934, partial nongit-folder recovery (no destination reply):

Integration: genuine folder OMP usage-limit row; destination flow remains incomplete

Private integration 57a4934, completed nongit-folder hand-off:

Integration: settled Full transcript hand-off to Codex in the source folder

Integration: original native-file read and neutral Codex context reply; stale History count visible

Private integration 57a4934, isolated native-source recovery:

Integration: isolated Claude row offers Hand Off without account actions

Integration: OMP reads the original isolated native file and answers the neutral inventory question

Older stacked-base server a9d0cba with current integration client, earlier ordinary source reply:

Older server: genuine preserved Codex source reply after route repair

Older stacked-base server a9d0cba with private integration client 57a4934, new bounded quota run (destination reply failed):

Older server: Hand Off row after a declared quota replay; recent-context delivery reached Pi but its reply failed

Private integration 57a4934, incomplete history setup (no source task or measured history):

Integration: default Claude model menu; required 1M selection and native-chat history measurement unverified

Private integration 57a4934, local floating source retained its own folder under paired-workspace focus:

Integration: real Codex follow-up confirms original context, owning home and pinned working directory

Private integration 57a4934, read-only listed-model inspection; no restart or continuity acceptance:

Integration: selected Gemini model remains listed; saved-unlisted-choice coverage incomplete

Private integration 57a4934, bounded floating OMP Continue result; interruption and controlled-delay coverage remain incomplete:

Integration: real OMP reply after explicit Continue, same local floating source under paired workspace focus

Private integration 57a4934, routing-only attempt; ordinary local Accounts reached, quota-row routing and parity remain incomplete:

Integration: local Accounts with two managed entries; floating chat obscures part of the page

Private integration 57a4934, Stop setup only, before any new request; no interruption or continuation acceptance:

Integration: preserved floating OMP source before the unexercised Stop attempt; background error is from an earlier Codex turn

The three judgment points are the reset deadline and shortcut, owning-host transcript directory, and chat-owned Accounts visit.

This branch has not been deployed

No deployments
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