Skip to content

test(director): the boot stretch hands the keyboard over - #208

Merged
wine-fall merged 1 commit into
mainfrom
zachg-0904--line0-cannot-reproduce
Sep 4, 2026
Merged

test(director): the boot stretch hands the keyboard over#208
wine-fall merged 1 commit into
mainfrom
zachg-0904--line0-cannot-reproduce

Conversation

@wine-fall

Copy link
Copy Markdown
Owner

Roadmap line 0 — "the listener's first typed line is silently dropped" (issue
#145) — no longer reproduces under its own recorded conditions. This retires it
as cannot-reproduce, not fixed, and spends most of its effort making sure
that distinction survives the deletion.

The evidence

Three runs on 2026-09-04 reproducing the August 25 setup exactly: the real
Claude brain, a seeded persona.md (so first-run onboarding is skipped),
--plain, piped stdin, one line typed after the second beat aired plus a 3s
settle. Run B's shape — a single line, so there is no second line to confuse
the result.

run first line echoed settings.json
1 yes not read (the probe quit too early)
2 yes musicEnabled: false after 35.2s
3 yes musicEnabled: false after 5.0s

musicEnabled has exactly one writer in the tree, src/steer-tools.ts — the
Director's steer tool. So runs 2 and 3 are read at a deterministic seam: the
line did not merely echo, it crossed the steer path.

Why this is not "fixed"

No cause was ever identified. lineReader's settled guard predates the
August 25 loss by a week, and LineQueue's take/peek semantics have not
changed since — so the guard is pinned by test here, never credited with the
cure. Either an unrelated change closed the window, or the timing drifted, or
the original conditions held a variable nobody wrote down.

That makes the pin more worthwhile, not less: a race that closed without a
known cause returns silently — no error, no log line, just a listener's first
sentence going missing.

What landed

  • test/director-steer.test.ts — the hand-over the issue asked for: once a
    pre-broadcast reader (the crash-report offer, the setup conversation) has
    settled, the next line typed reaches the Director's steer path, on a real
    LineQueue. test/guide.test.ts already pins the reader's own guard on the
    quit and eof arms; the seam between them was not covered.
    Mutation-verified — delete settled from src/guide.ts and this test goes
    red with the steer brain never seeing the line, which is the reported
    symptom exactly.
  • specs/spec01/01-core-loop.md §3.3 — the violated contract now carries
    its own history, so a first line going missing again is recognisable as this
    defect returning rather than a fresh one.
  • ROADMAP.md — line 0 and its §0 are deleted; the disposition is recorded
    under "Not on this roadmap". Line 4's eval half (Steer tool-choice eval (Ollama): switch/end/reply routing has no repeatable LLM-in-the-loop test [spec 11 §5] #98) is now read first among
    the P2s, being the only line overdue rather than upcoming.

Peer review

codex exec review (gpt-5.6-sol, xhigh): 1 finding, applied. It observed
that the new test is green on the base revision — it exercises a guard that was
already there, not the unexplained failure — and that deleting line 0 risked
dropping the record from planning.

Both halves are correct as facts. The remedy it proposed (keep line 0 until a
base-revision-red test drives the recorded startup path) is not reachable: you
cannot write a red test for a defect that will not reproduce, so the item would
sit at the top of the roadmap permanently undischargeable. The response instead
states the limitation in the places a future reader will actually look — the
test's own comment, the commit message, and the spec — and keeps the record in
two places rather than keeping a phantom P0.

Verification

  • vitest: 1413 passed, 1 skipped, 69 files
  • tsc --noEmit: clean
  • oxlint src test scripts .github/scripts: clean
  • The repro harness lives in the gitignored scratch/ and is not committed.

AI coding brief

Original request — the user asked what was left on the roadmap, then, on
seeing a P0 they had no memory of, asked what it actually was so they could try
to reproduce it and "otherwise just mark it done". The why: an unremembered P0
blocking every by-ear judgement above it is worse than no P0.

Manual interventions — the user asked for concrete commands plus an
investigation the agent could run itself, rather than a description handed back
to them. Mid-run they asked directly whether the bug was fixed, which is what
forced the cannot-reproduce / fixed distinction to be made explicit instead of
being quietly rounded to "done".

Retro — two things cost a round each and were self-inflicted. The first
probe quit the moment it saw the echo, before the brain could act, which
proved nothing: has two printers (director.ts on the steer path,
guide.ts when a reader consumes), so only the settings.json seam decides.
Asking "which seam proves this, and who else can write it" before running would
have skipped that. The first test draft also fired the esc pulse synchronously,
before the read registers on a microtask — test/guide.test.ts already had the
setImmediate line, so reading the neighbouring tests first would have avoided
it. Both are the same lesson the repo already states: read the seam, not the
narration.

🤖 Generated with Claude Code

https://claude.ai/code/session_018nkjmN4XQdDbffSRnnAaEi

Roadmap line 0 no longer reproduces under its own recorded conditions.
Three runs on 2026-09-04 with the real brain, a seeded persona, --plain and
piped stdin, one line typed after the second beat plus a 3s settle: the line
echoed every time, and runs 2 and 3 were read at the deterministic seam —
settings.json gained musicEnabled:false, and src/steer-tools.ts is the only
writer of that key, so the line genuinely crossed the Director's steer path.

This is cannot-reproduce, NOT fixed, and the difference is kept everywhere it
matters. No cause was ever found: the `settled` guard predates the August 25
loss by a week and LineQueue's take/peek semantics have not changed since, so
the guard is pinned by test, never credited with the cure. The new test is
green on the base revision too — a characterization pin over the hand-over,
not a red-to-green regression, which the test says of itself so a later
reader cannot mistake it for proof the defect is dead.

guide.test.ts already pins the reader's own guard on the quit and eof arms.
What was missing is the hand-over: once a pre-broadcast read has settled, the
next line typed is the Director's, on a real LineQueue. Removing `settled`
turns it red with the steer brain never seeing the line — the reported
symptom exactly.

Line 0 leaves the roadmap because nothing about it is schedulable — no repro
means no red test to write and no cause to fix — and its record stays: the
contract and the history in spec 01 §3.3, the disposition under "Not on this
roadmap". A first line going missing again reopens it with the new repro.
Line 4's eval half (#98) is now read first among the P2s.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018nkjmN4XQdDbffSRnnAaEi
@wine-fall
wine-fall merged commit 9cf562a into main Sep 4, 2026
3 checks passed
@wine-fall
wine-fall deleted the zachg-0904--line0-cannot-reproduce branch September 4, 2026 10:33
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