Repository navigation
Prove the conversation path end to end and record what fidelity still needs (CF-8, first part) - #294
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…for real e2e/conversation-fidelity.spec.ts runs through the real app, main process and claude -p adapter against a fake Claude CLI shaped like 2.1.302 that edits a disposable repository and counts what it runs. Golden path: a reported plan, an approval, a real edit and check, the final answer, Save to Notes twice (same note, next revision), Open, and a restart that restores identical items with no re-run. Variants: a denial (bytes unchanged, nothing run), a failing check, and Stop while a check runs. Assertions are on bytes, counts, outcomes and revisions. These cover behaviour CF-1 to CF-7 built, so there was no red phase. Refs #281 Coven-Harness: Claude Code / claude-opus-5-5
docs/conversation-fidelity.md: supported behaviour per CLI, fallbacks, privacy limits (Streamer Mode is visual only), migration and rollback. The acceptance receipt lists every #273 requirement with its evidence and leaves the gate open: CF-2, CF-3, live provider runs, VoiceOver, reference captures and measurements. Refs #281 Coven-Harness: Claude Code / claude-opus-5-5
8 of 27 tasks
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
Brings in #294 (CF-8, first part). Coven-Harness: Claude Code / claude-opus-5-5
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
Coven-Harness: Claude Code / claude-opus-5-5
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
Coven-Harness: Claude Code / claude-opus-5-5
This was referenced Oct 18, 2026
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
The merge is clean. CF-8's conversation-fidelity spec drives Stop through the claude -p adapter, and now runs against CF-2's interrupt-then-grace Stop. Refs #275 Coven-Harness: Claude Code / claude-opus-5-5
11 tasks
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
Opening a tab (⌘⇧B) focuses its address bar twice: once when the tab becomes active, and again in an animation frame that newTab queues for when the panel was not yet visible. Chromium can hold frames back for an inactive or busy window. The late focus then landed after the person, or a test, had already moved on, and took the caret out of the composer mid-typing. That failed CI on #293: store-desktop.spec.ts's browser-tools recovery case filled the composer just as the late frame ran. The text went into the address bar and the composer stayed empty (job 117782462586). The same case failed on #294's first run. The late focus now applies only if focus has not moved since the tab opened. The new workspace.spec.ts case holds animation frames, moves to the composer, releases the frames and types. It failed first: the composer lost focus when the frame ran. Coven-Harness: Claude Code / claude-opus-5-5
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
Opening a tab (⌘⇧B) focuses its address bar twice: once when the tab becomes active, and again in an animation frame that newTab queues for when the panel was not yet visible. Chromium can hold frames back for an inactive or busy window. The late focus then landed after the person, or a test, had already moved on, and took the caret out of the composer mid-typing. That failed CI on #293: store-desktop.spec.ts's browser-tools recovery case filled the composer just as the late frame ran. The text went into the address bar and the composer stayed empty (job 117782462586). The same case failed on #294's first run. The late focus now applies only if focus has not moved since the tab opened. The new workspace.spec.ts case holds animation frames, moves to the composer, releases the frames and types. It failed first: the composer lost focus when the frame ran. Coven-Harness: Claude Code / claude-opus-5-5
BunsDev
added a commit
that referenced
this pull request
Oct 18, 2026
…ards (CF-3) (#293) * Define the human-request contract and a pure broker with one resolution shared/human-requests.ts: approvals and native questions as one versioned contract. A request is bound to thread, turn, attempt, account, runtime and native request id plus a digest of the exact action; it accepts one local answer, and an unknown id, a wrong identity, a changed action, a withdrawn request or a second answer authorises nothing. Stop withdraws pending requests; one whose answer was being sent becomes uncertain, never resolved. Codex's experimental item/tool/requestUserInput (codex-cli 0.163.0) maps to typed questions, answers are validated against them, and secret answers are hidden from anything shown, saved or exported. Not wired in yet: that consumes #275's interfaces once #286 lands. Refs #276 Coven-Harness: Claude Code / claude-opus-5-5 * Answer each request once, route Codex questions to a card, and close stale cards The runner keeps the turn's approvals and questions in the human-request broker. The first answer is taken; every other one is refused with a reason (already resolved, withdrawn, unknown, invalid) that thread:answer now returns and the phone receives as a 409. Codex item/tool/requestUserInput (codex-cli 0.163.0, experimental) becomes a question card, answered through thread:answer-question. Answers are checked against the questions before anything reaches Codex. A secret answer goes to the CLI only and is saved as "(hidden)". Stop sends an error reply, never an empty answer. When serverRequest/resolved arrives for a request still open, Codex settled it, so the card closes as withdrawn and no answer is sent. Approvals now carry the CLI's own request id (Codex JSON-RPC id, Claude request_id). Cards a dead process left open close as ended when their thread loads, saved and emitted. Phones see a question as a notice to answer on the Mac. Part of #276. Coven-Harness: Claude Code / claude-opus-5-5 * Show question cards with a control for each question Options are radio buttons, with Other when the question takes free text. A free-text question gets a text field, and a secret one a password field. A refused answer says why on the card. An answered card lists the answers, with a secret shown as (hidden). A closed card says why, in the approval card's words. The turn header reads "Waiting for your answer" while a question waits. An answered or closed question folds into the turn's work; an open one never does. The e2e drives a fixture codex-cli 0.163.0 app-server through the real UI. It covers an incomplete answer refused in place, one reply carrying the answers, a refused second answer, Stop giving an error reply, and no secret anywhere under MODEX_HOME/app. Part of #276. Coven-Harness: Claude Code / claude-opus-5-5 * Document the human-request contract and record CF-3 in status docs/human-requests.md covers the broker's exported signatures, its states and refusals, the runner's binding and withdrawal rules, the Codex 0.163.0 and Claude 2.1.302 mappings, the clients, how secrets are kept, the tests, and what is left for CF-6 and CF-7. Part of #276. Coven-Harness: Claude Code / claude-opus-5-5 * Keep a new tab's late focus from taking the caret away Opening a tab (⌘⇧B) focuses its address bar twice: once when the tab becomes active, and again in an animation frame that newTab queues for when the panel was not yet visible. Chromium can hold frames back for an inactive or busy window. The late focus then landed after the person, or a test, had already moved on, and took the caret out of the composer mid-typing. That failed CI on #293: store-desktop.spec.ts's browser-tools recovery case filled the composer just as the late frame ran. The text went into the address bar and the composer stayed empty (job 117782462586). The same case failed on #294's first run. The late focus now applies only if focus has not moved since the tab opened. The new workspace.spec.ts case holds animation frames, moves to the composer, releases the frames and types. It failed first: the composer lost focus when the frame ran. Coven-Harness: Claude Code / claude-opus-5-5
11 of 13 tasks
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 #281 (CF-8 of tracker #273).
What changes
e2e/conversation-fidelity.spec.tsdrives the real app, main process andclaude -padapter with a fixture Claude CLI. The fixture editsgreeting.txtfor real and counts what it executes. Four cases:TodoWrite) → approval → real edit → check → final answer → Save to Notes → Open the note → restart.{ edits: 1, checksStarted: 1, checksFinished: 1 }both before and after the restart.thread:itemsafter the restart. Nothing re-runs.docs/conversation-fidelity.mdsays what the conversation path supports today, child by child, and what its gate still needs.docs/reviews/2026-10-18-conversation-fidelity-acceptance.mdis the integration matrix. Each requirement is listed with its evidence and its state (verified by fixture, verified by unit test, partial, or open), plus what is left:docs/status.mdadds the acceptance line under the conversation-fidelity entry.These are acceptance tests of behaviour CF-1 through CF-7 already built, so they had no red phase.
Checks run locally
On
mainatf6976df(CF-7 landed), macOS on Apple Silicon, Node v24.18.1, pnpm 10.34.5:pnpm build: passed.npx playwright test e2e/conversation-fidelity.spec.ts e2e/task-to-notes.spec.ts: 6 of 6 passed (44 s).There are no source changes, so the unit suite is unchanged from
main.Not in this PR
The fidelity gate is not complete. The review lists every open row. The fixture runs Claude only, and no live provider was used.
Coven-Harness: Claude Code / claude-opus-5-5