Code review found five defects the earlier passes missed.
The Phase 2 approach step offered ce-prototype for a Rule 7 decision and then
independently offered the visual probe, because its second sentence had lost
the not-Rule-7 conjunct — two incompatible routes for one decision.
The web-default guard matched "default", "substrate" and "web" anywhere in the
body, so "Default substrate is the product stack, not the web, whatever the
product is written in" satisfied every assertion while reversing the rule.
Bound the checks to the sentence that states the rule and reject a negated or
product-stack-first form. Verified: the reversing string now fails the guard.
preview.md still carried "a question that has to be used to be decided" — a
live paraphrase of the retired predicate that the exact-string guard cannot
see. The substrate paragraph authorized a non-browser medium and then closed
with an unconditional "do not introduce another display mechanism", negating
the branch it had just permitted. And CONCEPTS.md promised the artifact
survives the run where the overlay path says nothing survives.
Claude-Session: https://claude.ai/code/session_01KzLbr589npfw9AJezV3mwv
slice(start, -1) does not throw or return empty — it returns everything up to
the last character. So a missing "## " heading silently widened the spine to
the whole document and turned the placement assertion into a presence check
the neighbouring assertion already covered. Proven on a synthetic SKILL.md
with the rule buried under a heading: the test passed green.
Guard the heading index explicitly, and take the frontmatter boundary from the
shipped parseFrontmatter helper rather than re-deriving it with two coupled
magic offsets that also broke under a CRLF checkout. Pin the derivation clause
to the spine as well, matching R1, and correct one failure message that said
"spine" while its assertion scanned the whole body.
Both tightened pins were re-verified to fail against the pre-change bytes.
Claude-Session: https://claude.ai/code/session_01KzLbr589npfw9AJezV3mwv
Nothing guarded the invariant this change establishes, which is why the
drive-versus-look-at predicate spread to nine statements across three skills
before anyone noticed it disagreed with the fidelity test beside it.
Pin the organizing rule and the web-default floor in ce-prototype's spine,
and the sketch half plus the unravel-cost precondition in Interaction Rule 7.
Add a negative assertion that no skill file reintroduces any of the four
retired wordings.
The negative assertion matches exact phrases rather than a semantic pattern
on purpose: ce-prototype's spine deliberately keeps a contrast pair reading
"settled by driving it, so a screen that only looks like the product does not
answer it", which describes the dimension under test rather than a route. A
looser pattern fires on it.
Every new assertion was verified to fail against the pre-change bytes at
a27aa2af; the negative assertion finds five offender files there and none on
this tree.
Claude-Session: https://claude.ai/code/session_01KzLbr589npfw9AJezV3mwv