Skip to content

Keep existing Continue actions reliable after agent exit and failed starts - #36074

Merged
brennanb2025 merged 10 commits into
mainfrom
brennanb2025/continue-lifecycle-fixes
Oct 30, 2026
Merged

brennanb2025 merged 10 commits into
mainfrom
brennanb2025/continue-lifecycle-fixes

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

Continuing a terminal conversation in Chat UI can lose the conversation after the agent exits. Codex conversations can open with missing earlier messages, and a failed terminal start can leave its process running without a cleanup owner. This fixes those lifecycle problems for the Continue buttons already in Orca.

What Changed

  • Retain the last conversation for an existing terminal pane, bounded and invalidated when its source changes.
  • Import the complete saved Codex conversation, including inherited and compressed history, from the resolved account's store.
  • Keep cleanup ownership of a native process if terminal creation fails after it starts, through retry and disposal, until the terminal’s existing exit signal.

Continue in Chat UI still opens a new chat tab and stops nothing. Continue in terminal agent still creates a fork. The Continue buttons become the same-tab switcher in #31595; this PR does not change what they do.

On Windows, cleanup no longer force-kills a process by its number, which could hit an unrelated program; the terminal's process group handles it.

Why

Conversation identity must outlive live status, saved history can span multiple files, and a started process needs a cleanup owner before its terminal is published.

Account-scoped ownership was considered and dropped: accounts can share one conversation log, so main's refusal is correct. Existing ownership checks and their ordering stay unchanged.

Linked Issue

tracked in #31595

Visual Proof

No layout or control is added. On the current head, fresh terminal conversations import their complete marked history after normal exit and retain their source.

Claude immediate (221ms):
Claude imported history after exit

Codex immediate (222ms):
Codex imported history after exit

Paused Claude and Codex imports also passed. The Codex paused run included an unrelated filesystem filename listing during its fixed 30-second pause; the listing did not read app state or gate the click. That procedural departure is retained in the evidence record.

Testing

Full review path. Fresh whole-head correctness, consumer, reference, performance and readiness source reviews agree with cd7964c. Current-head CI is green, including static checks, typechecks and all 12 unit shards. The latest focused repair batch passed 198 tests with four existing skips across 11 named suites; earlier overlapping batches cover retained conversation identity, Codex ancestry/compression/canonical history, unchanged ownership order and native creation failure/retry/disposal. Tests were pared to real bugs and production boundaries under independent counsel.

Targeted Mac validation passed with real Claude and Codex, each immediate and after a recorded 30-second pause: all four history messages rendered once and in order in a new chat, with the terminal source retained. Every actual request exercised absent source-owner rows plus captured local source provenance. Both app launches stopped gracefully and sampled real config hashes matched. Windows: Codex after-exit Continue passed 1 trial (immediate, ~2 s) with context and fork; 2 further trials not reached (driver stopped before the agent replied); Claude on Windows not exercised (QA machine's Claude launcher broken); Claude and Codex both passed on Mac. The lane owner accepted this targeted coverage and stopped further trials. Stage 2 stopped before exit, with input submission unconfirmed; stage 3 was not started. The recorded 1.969-second Windows interval ends at click invocation, rather than a captured DOM click event. Prior Windows evidence covers graceful upgrade, resumed Codex history/context/fork, native Claude context/fork, ordinary close and command-start failure, with the original input limits retained. Earlier fresh imports failed; only a later captured Claude trial directly established the missing-locator refusal. The initial Claude and Codex rejecting branches remain unproved.

post-spawn UI failure: NOT EXERCISED (not user-reachable; proved by boundary tests)

Review

The split preserves current Continue behavior. It adds no switch RPC, Stop protocol, source retirement, same-tab placement or same-ID terminal reopening. Current main's cases and newer startup/host behavior are preserved. Windows cleanup route assertions are updated under narrow owner exceptions to verify owned cleanup without unverified process-number signals.

Agent skill upstream boundary

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

Notes

Cross-platform native creation, SSH/old-daemon behavior and mixed client/server versions are in scope for review. The full review, targeted QA and final raw-artifact audit are complete under the coverage and limitations described above.

Checklist

  • Scoped to the existing Continue actions and ordinary failed-start cleanup
  • Explained the user-facing change and mechanism
  • Targeted before/after evidence attached
  • Final correctness, consumer, reference and performance source review complete
  • Cross-platform, SSH/remote, mobile and mixed-version impact considered
  • CI passes on cd7964c; local checks limited to the normal commit hook and focused tests

Known adapter limits: cleanup uses the existing terminal exit signal. On Windows, a relay/socket failure can report exit before the shell completes. A native spawn that creates a child then throws before returning its handle can still escape ownership. These existing boundaries are separate follow-up work; the panel found no demonstrated worse outcome on the same input. This change adds no independent native-exit confirmation. Both limitations are tracked in STA-12894.

Intended continuation contract

After a terminal agent exits, Continue in Chat UI can import its saved conversation when its status locator has disappeared and the host captured a supported local source. Conflicting or unknown source evidence still refuses. The existing unary replay test now uses an unknown-provider source for its invalid-source case; a production import case covers the formerly rejected absent-locator input and verifies early and late history. Its ownership, account-drift, ordering and publication guarantees remain.

The source repair has passed fresh independent review and current-head CI. Targeted Mac and Windows Continue validation is complete under the accepted scope above. The independent audit verified all 47 selected Windows artifacts and supports the successful import/context/fork chain. Current Windows success is supported by recorded rendered UI text and context/fork receipts; no passing Windows screenshot was captured under the accepted no-helper scope. Earlier failures remain part of the QA record; later successes cannot reconstruct their missing captures.

The successful Windows driver initially wrote new automatic UI evidence files into the admitted QA worktree, then reattached from its evidence folder. This procedural departure is retained in the QA record. Natural compressed/history_base runtime formats and supplementary folder-workspace QA were not exercised; fixtures and consumer tests cover those contracts.

@brennanb2025
brennanb2025 marked this pull request as ready for review October 29, 2026 20:38
@greptile-apps

greptile-apps Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 4/5

[Medium impact] The changes affect terminal startup and existing Continue workflows, but stay within those bounded paths.

Fix duplicate messages in legacy Codex imports before merging.

Findings

  1. P1 Legacy messages appear twice ▶

Summary

Keeps existing Continue actions available after agent exit and retains cleanup ownership after failed terminal starts.

  • Terminal starts keep a cleanup owner until the process exits or the session takes over.
  • Chat UI imports earlier turns from the saved Codex conversation.
  • Continue in Chat UI can still find a pane's last conversation after its agent exits.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Agent reports conversation] --> B[Retain pane identity]
  B --> C[Continue in Chat UI]
  C --> D[Resolve account history]
  D --> E[Read ancestor prefixes and selected file]
  E --> F[Import into new chat]
  G[Start native process] --> H[Record cleanup owner]
  H --> I{Terminal published?}
  I -->|Yes| J[Session owns cleanup]
  I -->|No| K[Retain cleanup through retry or disposal]
  K --> L[Release after physical exit]
Loading

Reviews (1) · Last reviewed commit: "Fix lifecycle handling for existing Cont..." · Reviewed by Greptile

@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
Walkthrough

The daemon changes track PTY creation outcomes and physical ownership through spawn, session publication, and cleanup. Codex transcript import now reads paginated history across rollout files, validates segment boundaries, and carries account-store context through adoption. The renderer stores pane conversation identities separately from agent status, validates them during collection, and uses last-reported identities for resume-source resolution.

Priority: Normal

Estimated code review effort: Complex

Merge Risk: High · up to 48dae

Concurrent Continue actions can terminate an existing agent, while failed starts can leave later attempts waiting. Resolve these issues and confirm legacy history retention before merging.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 29.79% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly identifies the main purpose: improving existing Continue actions after agent exits and failed terminal starts.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description is complete and relevant. It covers the user impact, implementation scope, rationale, linked issue, visual evidence, testing, platform coverage, limitations, review notes, and checklis…
Full details: Description check

Explanation

The description is complete and relevant. It covers the user impact, implementation scope, rationale, linked issue, visual evidence, testing, platform coverage, limitations, review notes, and checklist. The AI Disclosure section is omitted, but the template allows internal contributors to omit it; the Linked Issue section references #31595.

Full details: Docstring Coverage

Explanation

Docstring coverage is 29.79% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 47 functions across 59 files.

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b5f97b46-e173-4099-b639-911978509a01
Commits

Reviewing files that changed from the base of the PR and between e8e0803 and 8d1a2e5.

Files selected for processing: 66
  • src/main/daemon/daemon-server-async-spawn-cancellation.test.ts
  • src/main/daemon/daemon-server-creation-failure.test-fixture.ts
  • src/main/daemon/daemon-server-options.ts
  • src/main/daemon/pty-subprocess.ts
  • src/main/daemon/pty-subprocess/conpty-startup-input-reader.ts
  • src/main/daemon/pty-subprocess/daemon-pty-physical-owner.ts
  • src/main/daemon/pty-subprocess/native-pty-spawn-windows.test.ts
  • src/main/daemon/pty-subprocess/native-pty-spawn.ts
  • src/main/daemon/pty-subprocess/subprocess-handle.ts
  • src/main/daemon/session-output-pipeline.ts
  • src/main/daemon/session-termination-controller.ts
  • src/main/daemon/session.ts
  • src/main/daemon/terminal-creation-work.ts
  • src/main/daemon/terminal-host-agent-session-claim.ts
  • src/main/daemon/terminal-host-concurrent-create.test.ts
  • src/main/daemon/terminal-host-cwd-readability.test.ts
  • src/main/daemon/terminal-host-disposal.ts
  • src/main/daemon/terminal-host-options.ts
  • src/main/daemon/terminal-host-returned-process.ts
  • src/main/daemon/terminal-host-session-create.ts
  • src/main/daemon/terminal-host-session-process.ts
  • src/main/daemon/terminal-host-session-publish.ts
  • src/main/daemon/terminal-host-session-shutdown.ts
  • src/main/daemon/terminal-host.ts
  • src/main/daemon/terminal-spawn-gate.test.ts
  • src/main/native-chat/agent-session-journal/adopted-transcript-source.ts
  • src/main/native-chat/agent-session-journal/codex-history-test-fixture.ts
  • src/main/native-chat/agent-session-journal/journal-codex-history.test.ts
  • src/main/native-chat/agent-session-journal/journal-legacy-identity.ts
  • src/main/native-chat/agent-session-journal/journal-legacy-import-record-bound.test.ts
  • src/main/native-chat/agent-session-journal/journal-legacy-import-tool-pairing.test.ts
  • src/main/native-chat/agent-session-journal/journal-legacy-import.ts
  • src/main/native-chat/agent-session-journal/journal-legacy-transcript-stream.ts
  • src/main/native-chat/agent-session-wire/structured-agent-session-adopted-import.test.ts
  • src/main/native-chat/agent-session-wire/structured-agent-session-create-adoption.test.ts
  • src/main/native-chat/codex-local-history.ts
  • src/main/native-chat/codex-rollout-history-source.ts
  • src/main/native-chat/codex-rollout-history-stream.ts
  • src/main/native-chat/transcript-line-decoders-codex.ts
  • src/main/native-chat/transcript-reader-codex-history-mode.test.ts
  • src/main/runtime/session-tabs/structured-session-create-support.ts
  • src/main/runtime/structured-agent-session-create-adoption.ts
  • src/renderer/src/components/tab-bar/cli-chat-resume-source.ts
  • src/renderer/src/components/tab-bar/tab-session-history-switch.parity.test.ts
  • src/renderer/src/components/tab-bar/tab-session-history-switch.test.ts
  • src/renderer/src/components/tab-bar/tab-session-history-switch.ts
  • src/renderer/src/components/tab-bar/tab-session-history-test-fixture.ts
  • src/renderer/src/hooks/ipc-events/agent-status-partial-updates.ts
  • src/renderer/src/lib/ai-vault-tab-title-requests.ts
  • src/renderer/src/store/agent-conversation-retention.ts
  • src/renderer/src/store/index.ts
  • src/renderer/src/store/slices/agent-pane-conversation.ts
  • src/renderer/src/store/slices/agent-status/agent-status-authority-actions.ts
  • src/renderer/src/store/slices/agent-status/agent-status-batch-update.ts
  • src/renderer/src/store/slices/agent-status/agent-status-drop-actions.ts
  • src/renderer/src/store/slices/agent-status/agent-status-drop-reducer.ts
  • src/renderer/src/store/slices/agent-status/agent-status-live-actions.ts
  • src/renderer/src/store/slices/agent-status/agent-status-live-reducer.ts
  • src/renderer/src/store/slices/agent-status/agent-status-provider-session-actions.ts
  • src/renderer/src/store/slices/agent-status/agent-status-provider-session.test.ts
  • src/renderer/src/store/slices/agent-status/agent-status-runtime.ts
  • src/renderer/src/store/slices/agent-status/agent-status-slice-contract.ts
  • src/renderer/src/store/slices/agent-status/agent-status.ts
  • src/renderer/src/store/slices/store-test-helpers.ts
  • src/shared/claimed-agent-pty-owner.ts
  • src/shared/pty-creation-disposition.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nitpick comments: 1
src/main/native-chat/transcript-line-decoders-codex.ts: 1

85-85: Trivial · Data Integrity & Integration · Heavy lift

Preserve wrapped Codex response blocks during history import.

Wrapped response_item messages still use claudeContentBlocks, so input_text, output_text, and input_image are not decoded. The focused fixtures do not cover this path: paginated response items are filtered out, while the visible assertions use completed items or unwrapped records.

Use a decoder that supports Codex response-item blocks while preserving existing supported blocks, then deduplicate mirrored records separately. This behavior predates the PR.


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: cbe159da-a92e-4c0c-9914-e2c671b61a72
Commits

Reviewing files that changed from the base of the PR and between 8d1a2e5 and 0a8a324.

Files selected for processing: 12
  • src/main/daemon/pty-subprocess-handle-lifecycle.test.ts
  • src/main/daemon/pty-subprocess-io-failure-cleanup.test.ts
  • src/main/daemon/pty-subprocess/conpty-startup-input-reader.ts
  • src/main/daemon/pty-subprocess/daemon-pty-physical-owner.ts
  • src/main/daemon/pty-subprocess/native-pty-spawn-windows.test.ts
  • src/main/daemon/session-termination-controller.ts
  • src/main/daemon/terminal-host-fenced-termination.ts
  • src/main/native-chat/agent-session-journal/codex-history-test-fixture.ts
  • src/main/native-chat/agent-session-wire/structured-agent-session-create-adoption.test.ts
  • src/main/native-chat/transcript-line-decoders-codex.ts
  • src/main/native-chat/transcript-reader-codex-history-mode.test.ts
  • src/main/windows/windows-pty-job.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 1 remain after this review.

@brennanb2025
brennanb2025 marked this pull request as draft October 29, 2026 23:46
@brennanb2025
brennanb2025 marked this pull request as ready for review October 29, 2026 23:57

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Follow-up Comments

Outside diff Strip the creator's recovery callback before joining its disposition.

32-40: Major · Stability & Availability · Quick win

Strip the creator's recovery callback before joining its disposition.

A joiner receives the creator's creation disposition. The current join(creation) also inherits its recover callback. For different requested session IDs, adoption attaches to the creator's live session, but the outer cleanup checks the joiner's original ID and finds no local session. Cleanup can then call the creator's recovery callback, and shutdownOwnedTerminalProcess can terminate the live process that the joiner did not start.

Preserve the creator's completion and exit metadata, but remove its recovery authority at this join boundary.

Suggested fix
       if (creation) {
-        args.options.creationWork?.join(creation)
+        args.options.creationWork?.join(
+          creation.then((disposition): PtyCreationDisposition => {
+            if (disposition.kind === 'no-fork') {
+              return disposition
+            }
+            if (disposition.kind === 'unknown') {
+              return { kind: 'unknown' }
+            }
+            if (disposition.kind === 'failed') {
+              return { kind: 'failed', completion: disposition.completion }
+            }
+            return {
+              kind: 'physical',
+              completion: disposition.completion,
+              exitCode: disposition.exitCode
+            }
+          })
+        )
       } else {

Open the source location


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a3ac1b01-5082-4cb1-b84f-df2e0c8ef797
Commits

Reviewing files that changed from the base of the PR and between 4c2605e and 48daedc.

Files selected for processing: 1
  • src/main/daemon/terminal-host-agent-session-claim.ts
Files skipped from review as they are similar to previous changes: 1
  • src/main/daemon/terminal-host-agent-session-claim.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.

@brennanb2025

Copy link
Copy Markdown
Contributor Author

After a terminal agent exits, Continue in Chat UI can lose its conversation. Codex imports can omit earlier messages, and a failed terminal start can lose the process cleanup owner. This PR remembers the pane's last valid conversation, imports complete saved Codex history from the selected account store, and keeps cleanup ownership across ordinary creation failures. Continue in Chat UI opens a new tab and stops nothing; Continue in terminal agent forks and retains its source. The same-tab switcher is separate, tracked in #31595.

Six semantic review rounds are complete. Fresh correctness, consumer, reference, performance and readiness source reviews agree with cd7964c. Current-head CI has 53 successful and 23 skipped checks, including static checks, typechecks and all 12 unit shards. The latest focused repair batch passed 198 tests with 4 existing skips across 11 suites; overlapping earlier batch counts are not additive. Independent test counsel pared additions to real bugs and production boundaries. Source-counted performance bounds do not establish measured runtime latency.

On the exact current head, Mac Claude and Codex each passed fresh ordinary-terminal two-turn imports immediately after normal exit and after a recorded 30-second pause. Measured shell-observation-to-click intervals: Claude 221ms/30.214s; Codex 222ms/30.223s. Each new chat rendered all four marked history messages once/in order, retained its source, and captured zero addressed ownership rows plus exact supported local route. Codex delayed included an unrelated filename listing during its fixed pause: a disclosed procedural departure, no app-state/readiness gate or altered timer. Immediate Codex independently met the no-intervening-wait condition. Build/launch/identity receipts bind the head; they are not independent cryptographic loaded-bundle attestation.

Windows: Codex after-exit Continue passed 1 trial (immediate, ~2 s) with context and fork; 2 further trials not reached (driver stopped before the agent replied); Claude on Windows not exercised (QA machine's Claude launcher broken); Claude and Codex both passed on Mac. The successful Windows import rendered all four original messages once and in order, produced a real prior-context chat reply, then a distinct-provider terminal fork with a real context reply and both sources retained. Its recorded 1.969-second interval is shell observation to click invocation, not a captured DOM event. The second trial stopped before exit with submission unconfirmed; the third was not started. The lane owner accepted the targeted evidence and stopped further trials. An independent audit of all 47 selected Windows artifacts supports this chain. Initial automatic UI evidence files were written into the admitted QA worktree before the driver reattached from the evidence folder; this procedural departure is retained in the record. Existing native-Claude and resumed-Codex context/fork evidence retains its original input limits.

Earlier Windows fresh imports failed. Only a later captured fresh Claude input directly established missing-locator admission; initial Claude/Codex rejection branches remain unproved. The Mac initial absent-menu attempt had an isolated config/hook-target mismatch; later aligned passes do not establish whether that original identity was never reported or cleared, or uniquely reconstruct historical failures. Natural compressed/history_base runtime formats and supplementary folder-workspace QA were not run; retained history fixtures and consumer tests cover those contracts.

post-spawn UI failure: NOT EXERCISED (not user-reachable; proved by boundary tests)

Prior Windows ordinary command-start failure/close evidence and exact known-handle receipts carry. Finite recorded cleanup is not universal native/descendant death proof. Existing Windows exit signalling can precede native completion; a native spawn that creates a child then throws before returning its handle can escape ownership. Both remain tracked in STA-12894; this PR adds no independent native-exit witness. A custom callback throwing without creation disposition stays conservatively unknown; no shipped failing path was demonstrated.

For Brennan's review:

After-exit input Recorded baseline 896fc04 (Continue absent) Current-head successful import
Claude Claude baseline after exit Claude current import
Codex Codex baseline after exit Codex current import

Baseline images are the recorded older baseline, not a claim about current main. Paused current-head imports: Claude 30.214s, Codex 30.223s with departure above. Carried native-Claude fork/context result and source retained. Prior command-start failures: Claude, Codex, then ordinary close. Current Windows success is recorded in the saved rendered UI text and context/fork receipts; no passing Windows PNG was captured under the no-helper scope. The carried resumed-Codex fork/context image records that unchanged flow at 2f5d17e. It is not labelled as the fresh current-head input.

Judgment spots: captured terminal provenance, saved history resolution, unpublished process ownership.

@brennanb2025
brennanb2025 merged commit 28e4764 into main Oct 30, 2026
76 checks passed
@brennanb2025

Copy link
Copy Markdown
Contributor Author

Post-merge Windows verification for #36074 (squash merge 28e4764): the two remaining Codex after-exit imports and all three Claude imports passed. Claude also passed the fresh chat-context and terminal-fork chain. No product failure was observed and no product code was changed.

All five runs used Windows high spec through qa-gate. Codex used main e9be993f476a3131062239b35be40e2f9e0a69e9; Claude used main 561de18ad8a7b42809f52e2f52634e348c19768d. Both contain 28e4764 and were fetched/pinned for their respective runs.

Trial Result Shell observation → Continue invocation / completion
Codex 2 (C2R1) PASS 1158 / 3215 ms
Codex 3 (C3R1) PASS 2027 / 4052 ms
Claude 1 (A1) PASS 1564 / 3606 ms
Claude 2 (A2R1) PASS 1982 / 3994 ms
Claude 3 (A3) PASS 1632 / 3623 ms

Each used ordinary New tab → agent, two real completed turns, normal /exit, then ordinary Continue in Chat UI in one sequential operation as soon as the selected pane showed its shell prompt. Each opened a distinct, visibly bound new chat with the four original messages exactly once and in order, retaining the source terminal and its history. The copied executed scripts, native transcripts, rendered bindings, bounded logs and original screenshots were independently audited. Timings include ordinary menu overhead and measure observation to locator invocation/completion; physical exit and DOM event dispatch were not measured. The runtime source-admission branch remains unknown.

In Claude A1, the imported chat answered the earlier codeword without receiving it again. Ordinary Continue with Terminal Agent then opened a distinct native conversation (20aa0e7d…, versus source/chat fd823d36…) and answered the earlier number, 86327, without receiving it again. The source terminal and imported chat were both retained. The fork's distinct native ID was proven after its first completed turn, when its transcript materialized. This chain ran once. The original Codex context/fork proof remains historical at cd7964c, including its missing passing-PNG and old helper-identity limitations; these two import repetitions do not relabel it as fresh context/fork evidence.

The original low-spec Claude launch failure was a stale npm shim pointing to a missing executable. Production PATH-merge replay reproduced why a duplicate native-directory prefix can lose precedence; the exact historical reordering stage was not captured. The revised QA scope allowed either admitted Windows machine. These Claude trials verified ordinary app-shell resolution/version and a real New tab reply with native Claude 2.1.312 on high spec. They do not claim app verification of the original low-spec forwarding remedy. No product, typed command, npm installation, real profile or real configuration was changed.

Preserved nonpasses were QA setup failures: missing E2E observer exposure, premature or unmounted-pane observer checks, preflight/capture-script mistakes, one pre-exit interruption after misclassifying permitted OS-assigned listeners, and a setup reply missing its requested period. None is counted as a trial pass or an Orca product failure; held attempts and raw receipts remain retained.

Cleanup receipts: both app copies stopped gracefully; their configured ports are empty. The Codex finite audit covered 465 identity records: 459 absent, six reused records representing five numeric PIDs, zero matching owned identities. The Claude finite audit found all 65 recorded identity records absent (record count, including timestamp-format duplicates). Nine sampled real-config states matched for Codex; all 16 selected before/after config/profile states matched for Claude (the eight overlapping supervisor-baseline records also matched). Source and index remained clean. The leads and transfer controls exited normally before their exact handles were closed, and the Electron, diagnostic and unused queued admissions were released. These finite checks do not establish universal descendant or native-process death.

Receipt limits remain explicit: the first Claude setup capture has a null exit-code receipt with later finite absence, A1's source-native birth tuple was missed, and early lead tool-shell waits/launcher internals lack birth tuples. Harness completion is not independent PID-absence proof. Deferred STA-12894 native-witness limits remain unchanged. post-spawn UI failure: NOT EXERCISED (not user-reachable; proved by boundary tests).

Original screenshots from these post-merge runs

Codex 2:
C2R1-import.png

Codex 3:
C3R1-import.png

Claude 1:
A1-import.png

Claude 1 terminal fork:
A1-fork.png

Claude 2:
A2R1-import.png

Claude 3:
A3-import.png

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