Repository navigation
Codex and pi sessions run under the file-channel runner - #572
Merged
barelyworkingcode merged 6 commits intoOct 21, 2026
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Owner
Author
|
Weakening reviewed: stateNotRun in the new journey session-codex-host-runner, why: it is that journey's own NOTRUN when no stack local model endpoint exists; no existing journey gains a skip |
Owner
Author
|
merge-check: merged. approved, target, contract, evidence, owner, weakening |
This was referenced Oct 21, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #537
Codex and pi sessions run under the file-channel runner, as Claude sessions do. A local codex session keeps its agent across a relay restart; a codex session on a Unix host keeps it across a dropped link. Pi runs under the runner and ends with relay-sessions, as before (its model key is bound to the launch).
Part of epic #525. Contract: the issue's
## Contractwith Amendments 1 to 4.What changed
runfollow.go: the provider-neutral half of the Claude runner code (follow, send with receipt, link loss, stop/release, replay, cursor). Claude's behaviour, error text, log keys and saved state are unchanged; the suite passed unedited after this commit.runConn; codex attaches with no handshake and never answers a request twice; pi runners are killed at shutdown and stopped at startup; manager and relay-side restart checks cover codex.runner.sh: the agent's stderr is an anonymous pipe copied tostderr.log. Found by the real-app check: a sandboxed pi (node) aborted at start because the profile refusesfstaton a file (or named FIFO) in the run directory. No profile change.TestRunnerAgentStderrIsPipe; the fake pi writesagent_settled, the fake agent records its stderr kind.session-codex-host-runner(api phase): a codex session on a loopback host survivesrelay host disconnect. Codex gets a scratch config home whose only provider is the stack's local endpoint, and no login.Notes
session-swap-backFAIL andsession-adoptBLOCKED while a real-app check was rebuilding Relay.app on the same box; the rerun with nothing overlapping was green. Not seen again.agent.codeis written before the stderr copier drains (nothing reads it); no test covers a stale pi runner left by a crash (decision A12, not a criterion).turn/startreads as an open turn after a restart.Review: no blocking findings (round 1, default model, at 29abde8; 0b3e44f then changed one test comment and two doc lines from its minors)
Journey: session-codex-host-runner PASS on a stack at 29abde8 (head harness pass=9 fail=0 notrun=2)
Harness weakening: none (one journey added, no journey, timeout or assertion changed)
Main harness vs head: epic-base harness (d26ab6b) against head 29abde8 on a stack: pass=8 fail=0 blocked=0 notrun=2
Break-and-restore: send initialize on codex attach -> TestCodexRunnerNoSecondInitialize red (3 initialize lines); host codex ignores Detach -> journey FAIL (no runner.json); stderr back on stderr.log -> TestRunnerAgentStderrIsPipe red; each restored, shared tree untouched
Real-app check: Relay.app from 29abde8: local codex kept runner pid and start time across quit and reopen, one initialize, send landed in sent/, loopback endpoint answered; stock pi session answered a turn, no runner after quit, dormant then resumed with history
🤖 Generated with Claude Code