Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Grade R3/S3.
F300 A rule stated only in prose, with no check that reads it, was found broken by the repository that wrote it
| Field | Value |
|---|---|
| Status | active |
| Topic | Gates, verification, and hooks against instructions |
| Grade | R3/S3 |
| Cases | Shio, freewilly |
| Contrary | none |
| Harness facts | none |
Claim
A rule that lived only in an instruction file, a skill or a comment, with no test, lint or hook reading the text it governs, was found broken in two projects by a counted measurement, and in each the repository that stated the rule was the one breaking it.
Mechanism
A written rule is read by the session that loads it and by nothing else. Later edits, other files carrying the same content, and sessions that never load the rule are all outside its reach, and nothing fails when they drift. A check that reads the governed text turns the same rule into a failure someone sees. The projects' own sources state this reason for moving a rule into a check.
Observations
- Shio. The roadmap's one-sentence rule was measured broken when it was noticed: "95 active task lines averaging" [shio@821f18d74:docs/agents/agent-surface.md#L1502]
142 words, and six of the worst "eight were written in the same session that then found the problem" [shio@821f18d74:docs/agents/agent-surface.md#L1503]. The rule against piping a gate, "Never pipe a gate into" [shio@821f18d74:agents.md#L150], is held by a lint whose stated reason is the drift of prose: "Why a lint and not a sentence" [shio@821f18d74:shio-app/src/test/java/com/viglet/shio/ShTestCommandDocLintTest.java#L41], because "the pipeline reads better without it and nothing fails." [shio@821f18d74:shio-app/src/test/java/com/viglet/shio/ShTestCommandDocLintTest.java#L44] The lint reads "The two files that document how to run this suite." [shio@821f18d74:shio-app/src/test/java/com/viglet/shio/ShTestCommandDocLintTest.java#L53] The build skill is not one of them, and at the pin it still pipes the suite into a filter: "-Dskip.npm=true 2>&1" [shio@821f18d74:.claude/skills/shio-build-test/SKILL.md#L17]. git log --format=%h 821f18d74 -- .claude/skills/shio-build-test/SKILL.md lists only its creation, [shio@f4ffdb0d9]. The index keeps a section headed "Invariants that fail silently and have no lint" [shio@821f18d74:agents.md#L109] and states the principle: "A rule nobody can check is a preference, so" [shio@821f18d74:agents.md#L229].
- freewilly. DD184 counted em dashes in the published prose, "207 of them, and two in every three sentences" [freewilly@0794e60],
and wrote a skill that "records the rule so the next session does not restore the dashes" [freewilly@0794e60], headed "No em dashes in published prose" [freewilly@c1c2eaf:.claude/skills/ai-writing-freewilly/SKILL.md#L30]. No gate reads the prose for them. git grep -c -P '\x{2014}' c1c2eaf -- README.md gives 2 at the pin and no match at its parent: the pinned commit added two lines of README prose with em dashes [freewilly@c1c2eaf:README.md#L375-L376].
- winwright. Not a rule but a figure written in prose, which shows the same mechanism: a
count of the block criteria in the shipping skill drifted with no failure: "the skill said thirty-three while the roadmap declared thirty-seven, and nothing had gone red" [winwright@a686d44]. The same commit moved the rule under a check, "A case holds the skill to it." [winwright@a686d44], and ran it as a control: "taking the bullet out of the skill turned the third red" [winwright@a686d44]. The skill also names a rule it knows has no check: "Nothing goes red when a" [winwright@861b82e:.claude/skills/roadmap-docs/SKILL.md#L151] criterion is untrue.
- roadkeep. The project's every-turn budget was moved from prose into its gate because of
a failure measured in Shio: "This budget lived in prose at" [roadkeep@91754240:roadkeep.toml#L235] the bottom of the file, the arrangement "that let Shio's reach 186 KB while declaring 150 lines about itself." [roadkeep@91754240:roadkeep.toml#L237] This records Shio's failure and roadkeep's remedy; it is not a failure of roadkeep's own.
Independence
Two independent origins, one in each of Shio and freewilly, each of a rule local to that project (the roadmap format and the pipe rule in Shio, the em-dash rule in freewilly). winwright's drifted count is independent too, but it is a stated figure, not a rule, so it supports the mechanism and is not counted as an origin of the claim. The roadkeep observation is Shio's failure seen from the tool built in answer to it, and adds no origin. The roadmap measurement in Shio predates roadkeep's adoption there [shio@af98be3f0], so the shared tool does not explain it.
Counter-evidence
None found at the pins. The pins do not show the opposite case, a rule with no check that held over time, but absence of a recorded violation is not evidence of one, so this is a gap rather than a contrary observation. Where a check was added (Shio's lint, winwright's case, roadkeep's gate), no source records whether the rule then held, apart from winwright's control run.
Grade
R3: independent failures in two projects, which the scale's R3 requires and does not exceed. S3: Shio's is counted in its source (95 lines, 142 words, six of eight) and freewilly's by git grep at the pin (two against none) and by DD184 (207). Not S4: winwright's case was seen to fail in a deliberate control, but it encodes one rule (the shipping order in the skill), not the finding that unchecked rules drift, and Shio's lint is not recorded failing.