test(prose): declare the prose each case actually walks#574
Open
leeovery wants to merge 3 commits into
Open
Conversation
This was referenced Jul 27, 2026
Open
This was referenced Jul 27, 2026
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:33
f141d41 to
57c2940
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:33
2d4c6b8 to
7ce288f
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:35
57c2940 to
334973a
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:35
7ce288f to
6bf9437
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:37
334973a to
995afd9
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:37
6bf9437 to
16ba569
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:40
995afd9 to
963d371
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:40
16ba569 to
2f7f55c
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:42
963d371 to
fd67ef4
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:42
2f7f55c to
c61e980
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:44
fd67ef4 to
8e11bc3
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:44
c61e980 to
90030d3
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:46
8e11bc3 to
85650d2
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:46
90030d3 to
2c987ae
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:48
85650d2 to
f7a5638
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:48
2c987ae to
2562ad4
Compare
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:50
f7a5638 to
e990814
Compare
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:50
2562ad4 to
f3e17fb
Compare
A case's file list decides whether editing a file selects that case for a run, so a file the walk goes through and the case omits is prose that can be changed without the test covering it ever running again. Seven of the ten had such gaps; ten declarations were missing in total. They were measured, not reasoned about. Each case was walked with its own act, and the list taken from the Read calls in the record. An earlier attempt to derive them by following Load links from the scoped files gave the wrong answer, and I repeated its output as fact before checking: it reports everything reachable, which for the discovery cases meant session-loop, task-loop and conclude-discovery — branches every case deliberately stops before. Three cases turned out to have no gap at all. The omissions are systematic rather than scattered, and they share one cause. invoke-skill.md is absent from three of the four entry cases; it is where every entry skill builds its handoff. casing-conventions.md is absent from all three cases that begin at workflow-start; it is Step 0.1. detection-core.md is absent from both discovery cases; it is Step 2. Each time the list named the files the case is *about* and left out the ones it merely passes through — which is the distinction the whole mechanism turns on. One measured result is deliberately not applied. discussion-entry opens gather-context.md, but the prose only routes there when no carrier exists, and that case has one: the file was read while deciding the branch, not walked. The lint sees opened, not walked, so every result it gives needs that check before it lands. Also restores the literal characters in every case.json. Earlier scripted edits wrote them through a JSON encoder that escaped em-dashes, and the escapes were committed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ough A full run over the freshly-filled file lists reported two cases still opening prose they do not declare: implementation-picks-first-task reads invoke-skill.md, and discovery-commits-new-epic reads resume-detection.md. Both were measured clean during the harvest, by a walk that genuinely did not open them. The harvest walked each case once, and once is a sample: a walk touches a slightly different set of files each time it runs, so a single measurement floors the answer rather than settling it. That is worth knowing about the mechanism itself. A file list converges across runs rather than being audited in one pass, and the lint is the ratchet that closes the gap each time a new file surfaces — not a one-shot check that can be declared finished. The implementation case is the sharper illustration. During the harvest its walker claimed to have read invoke-skill.md, the record showed it had not, and the divergence was recorded as a walker misreporting itself. It was — and the file it invented reading is genuinely on the path, which the next run took. A false claim landed on a true fact. invoke-skill.md is now declared by all four entry cases, which is what the path shape always implied: it is where every entry skill builds its handoff. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
leeovery
force-pushed
the
fix/prose-prescribe-what-we-observed
branch
from
July 27, 2026 14:51
e990814 to
6325906
Compare
Every case so far stops where a skill hands off, which is where the phase begins doing work. Seven processing skills had no coverage at all. This carries on through the handoff into workflow-investigation-process and stops at that phase's durability boundary: the file created, the topic registered, the commit landed, immediately before the symptom interview. The spine is an ordering claim that crosses the skill boundary — the entry's status check must precede the processing skill's topic start, because a topic cannot be started before anything has looked to see whether it already exists. Alongside it, initialisation must read the work's seed before writing: the prose opens the phase from the work's origin, and a walk that wrote first would build the file from nothing. Scoped to Steps 0 through 2 after reading Step 3, which is a question bank rather than a gate — Core, Reproduction, Environment, Impact, Follow-up. That is the organic loop `conduct` is for, and it is better to shape that field against a case that demands it than to guess now. Passed first run: 5/5 with the further claim, all four checks, world matched, and no undeclared prose — the file list was right without a harvest pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
leeovery
force-pushed
the
test/prose-declare-what-walks
branch
from
July 27, 2026 14:51
f3e17fb to
3792c26
Compare
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.
Summary
A case's
files[]decides whether editing a file selects that case for a run. A file the walk goes through and the case omits is prose that can be changed without the test covering it ever running again.Seven of ten had gaps — ten declarations missing.
validate-phase.mdinvoke-skill.mdinvoke-skill.mdinvoke-skill.mdcasing-conventions.md,active-work.mdcasing-conventions.md,detection-core.mdcasing-conventions.md,detection-core.mdinvestigation-entry,spec-entry-from-discussionandimplementation-picks-first-taskhad no gap.Measured, not reasoned about
Each case was walked with its own
act.mdand the list taken from theReadcalls in the record — ten walkers, one per case.An earlier attempt derived them by following Load links from the scoped files, and I repeated its output as fact before checking. It reports everything reachable: for the discovery cases that meant
session-loop.md,task-loop.md,conclude-discovery.md— branches every case deliberately stops before. Measuring found three cases already correct that the crawl had condemned.The omissions share one cause
invoke-skill.md— missing from 3 of 4 entry cases. Where every entry skill builds its handoff.casing-conventions.md— missing from all 3 cases starting atworkflow-start. It's Step 0.1.detection-core.md— missing from both discovery cases. It's Step 2.Each list named the files the case is about and omitted the ones it merely passes through — the exact distinction the mechanism turns on.
One result deliberately not applied
discussion-entryopensgather-context.md, but the prose only routes there when no carrier exists — and that case has one. The file was read while deciding the branch, not walked. The lint sees opened, not walked, so every result it produces needs that check before it lands.Also
Restores literal characters in every
case.json. Earlier scripted edits wrote them through a JSON encoder that escaped em-dashes to—, and the escapes were committed.Test plan
🤖 Generated with Claude Code
Stack