Repository navigation
Questions across replay and reconnect on the phone and paired desktops (CF-6) - #389
Merged
Merged
Conversation
…desktops (CF-6) Red: a legacy phone is told a question answered on the phone was answered on the Mac. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…F-6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (CF-6) Red: the phone does not receive nativePhase, so it cannot tell Codex's plan from an ordinary answer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lan is marked (CF-6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n every client (CF-6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e or deny (CF-6) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ugh the journal (CF-6) The paired fixture now keeps an event journal, so every UI test polls with a cursor. Two more question threads are closed on the Mac (answered, stopped) while open on the phone with a draft; the next poll closes each card. QuestionCardTests adds delta, withdrawal, reload and uncertain cases. All passed on first run: they pin behaviour the model already had. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…ered question (CF-6) The host's 8 MB stream backlog had no test. A real paired desktop over TLS stops reading; the host drops its stream past 8 MB; its reconnect from the old cursor would replay more than 4 MB, so it reloads, and thread:items shows the card answered. Passed first run: it pins existing behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Code coverage overviewLanguages: TypeScript TypeScript / code-coverage-agent
View coverage of the 5 most impacted files.
ℹ️ Calculations represent line coverage. Results may change as calculations are updated. Updated |
Contributor
Author
|
Val chose (2026-10-23) to land #389 first as the CF-6 base. #388 ( |
BunsDev
added a commit
that referenced
this pull request
Oct 23, 2026
… live journal check, a mid-reply kill (CF-6) Rebased onto #389 (cf6-replay) at Val's choice, keeping only what it does not already cover: - The Windows and Linux platform jobs run the journal, replay and request suites, now including question-replay. journal-resume's crash test accepts Windows, where a self-SIGKILL ends the child with an exit code rather than a signal. - The live smoke checks the journal in the real app with MODEX_EVENT_JOURNAL=1, and a Chat-mode scenario replays an approved card exactly as saved. - An e2e kills the app in the middle of a streaming reply: a new journal id, the reply unknown at its saved length, nothing run again. It found that the journal can be ahead of the thread files at a crash. - event-journal.md: an 8 MB drop reloads in practice, the heartbeat also drops a stalled stream, and the crash finding. The gate review records these and Val's deferrals of the Windows and Linux app sessions and a real power cut. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
BunsDev
added a commit
that referenced
this pull request
Oct 23, 2026
… live journal check, a mid-reply kill (CF-6) Rebased onto #389 (cf6-replay) at Val's choice, keeping only what it does not already cover: - The Windows and Linux platform jobs run the journal, replay and request suites, now including question-replay. journal-resume's crash test accepts Windows, where a self-SIGKILL ends the child with an exit code rather than a signal. - The live smoke checks the journal in the real app with MODEX_EVENT_JOURNAL=1, and a Chat-mode scenario replays an approved card exactly as saved. - An e2e kills the app in the middle of a streaming reply: a new journal id, the reply unknown at its saved length, nothing run again. It found that the journal can be ahead of the thread files at a crash. - event-journal.md: an 8 MB drop reloads in practice, the heartbeat also drops a stalled stream, and the crash finding. The gate review records these and Val's deferrals of the Windows and Linux app sessions and a real power cut. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 23, 2026
This branch was successfully deployed
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.
Part of CF-6 (#279), under tracker #273. It builds on CF-3's phone answers (#373) and Codex's native plan mode (#385).
Most of CF-6 has already landed: #285, #308, #309, #318, #329, #330, #335 and #336. This PR covers what #373 and #385 made possible. A structured question must survive replay and reconnect on the phone and on paired desktops, and Codex's
planmessage must converge on every path.Fixes (each had a failing test first)
companion.ts,phoneItem)nativePhase, so the plan (nativePhase: "plan") is marked. Older phones ignore the field.New tests
test/question-replay.test.ts. Uses a real Codex app-server fixture, journal, companion over TLS and paired desktop.serverRequest/resolved), or stopped.sendingat a crash: it reads as uncertain on both kinds of phone and is refused if sent again.invalidand Codex hears nothing.test/journal-resume.test.ts. One typed turn runs through these steps:Every path agrees: the live projection, the saved files, the event stream, the live journal and a fully coalesced one (each replayed twice), the paired desktop, both kinds of phone (full snapshot against mid-run snapshot plus delta), and a restarted runner. Codex heard the phone's answer once.
test/conversation-migration.test.ts. Loads questions and a plan as v0.3.0 saved them.ended.iOS
QuestionCardTests. A delta that closes one card drops its draft and keeps another card's draft. A withdrawn card sends nothing. A reload replaces the transcript instead of merging into it. An uncertain answer stays closed.iOS UI (
CompanionFlowTests). The paired fixture now keeps an event journal, so every UI test polls with a cursor. Two question cards are closed on the Mac (one answered, one stopped) while open on the phone with a choice made. The next poll closes each one ("Answered on your Mac" and "Not answered — the turn was stopped") and removes its controls.The iOS tests passed on their first run. They pin behaviour the iPhone model already had; they are not red-then-green repairs.
Results
Final head
fa4b7cb, onmainat2eba641, with every commit signed. Environment: macOS, Node v24.22.0, pnpm 10.34.5, the iOS 27.0 simulator (a dedicated iPhone 18 Pro).pnpm build && pnpm typecheck && pnpm testpnpm test:e2excodebuild … -only-testing:ModexCompanionTests testapps/ios/ModexCompanion/Scripts/test-e2e.sh(MODEX_UI_TIMEOUT_SCALE=2)No test was flaky, hung or retried. The 6 e2e skips and 16 unit skips are the existing opt-in, live-provider and platform-specific cases.
Gates beyond the tests
The CF-6 gate review records each gate:
final/plan.touch, its late deny got a 409, and every view agreed.Live evidence and its sha256 hashes are outside the tree, at
~/.claude/task-evidence/cf6-2026-10-22/.Docs
human-requests.md: a "question closed while a client was away" section, the older phone's new wording, and the new tests.event-journal.md: the phone'snativePhase, the typed convergence test, and the journal-on iPhone fixture.status.md: a new unreleased entry.docs/reviews/2026-10-22-cf6-gates.md: the gate review above.Still open for #279
These gates need Val or hardware; this PR doesn't close them:
The TestFlight upload of a Companion build with the card is Val's.
🤖 Generated with Claude Code