Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Grade R4/S4.
F7 A count or list typed into prose goes stale in silence when what it describes changes, and stays true only when it is generated or checked
| Field | Value |
|---|---|
| Status | active |
| Topic | Context economy and agent prose |
| Grade | R4/S4 |
| Cases | roadkeep, polyweave, freewilly, winwright, Shio |
| Contrary | none |
| Harness facts | none |
Claim
In every project a figure or an enumeration written into prose (a skill, a README, a configuration comment, a contributing guide) was found wrong after the thing it described changed, with nothing failing, and the remedies that held were to generate the number from its source or to check the sentence against a measurement.
Mechanism
A number typed into a sentence is true when it is written and has no link to what it counts. The change that makes it false (a new page, a new block, a new workflow, a new key) is made elsewhere, often by another session, and nothing reads the sentence at that moment. An agent that later loads the prose trusts it, so a stale figure misleads the next session rather than failing anything. A figure produced from the source, or a test that reads the sentence against a measurement, has the link the typed one lacks.
Observations
- roadkeep. RK367 found two figures a non-goal argued from "stated in five places and both have drifted" [roadkeep@91754240:docs/CHANGELOG.md#L354];
RK1588 found "a withholding reason quoted a total that was stale within the session that read it" [roadkeep@91754240:docs/CHANGELOG.md#L799]; RK1094 found standing advice resting "on a figure that is off by half" [roadkeep@91754240:docs/CHANGELOG.md#L657]. The configuration records the lesson beside the budget, "a percentage in a comment is what went stale the first time" [roadkeep@91754240:roadkeep.toml#L248], and a test now sweeps caller-facing prose for figures [roadkeep@0f956e8b].
- polyweave. The audit skill, added on the first day, lists the roadmap's blocks as
"for the current set; today it answers:" [polyweave@6d1c136:.claude/skills/audit/SKILL.md#L52] followed by blocks A to H, while the roadmap at the pin also has "Voxel models from a declaration" [polyweave@6d1c136:docs/ROADMAP.md#L31] and "A bar a person sets once" [polyweave@6d1c136:docs/ROADMAP.md#L33]. It also says "the three governed docs" [polyweave@6d1c136:.claude/skills/audit/SKILL.md#L29], while the configuration declares a fourth, the deferred store [polyweave@6d1c136:roadkeep.toml#L10-L14], added the same day because "That needed a deferred store, which this project had never declared." [polyweave@e26bd7c]
- freewilly. DD165 added a fifth window destination and left
llms.txt
"counted four window destinations against the five" [freewilly@0794e60] the product declares. DD159 had already filed "the counts on the site are typed where the source could state them" [freewilly@c1c2eaf:docs/CHANGELOG.md#L290], and the writing skill states the rule "Counts and versions are generated, not written" [freewilly@c1c2eaf:.claude/skills/ai-writing-freewilly/SKILL.md#L97]. At the pin the contributing guide still opens its gates section with "Two workflows, and each runs exactly one of them" [freewilly@c1c2eaf:CONTRIBUTING.md#L21], while four workflow files are in the tree (git ls-tree --name-only c1c2eaf .github/workflows/).
- winwright. WW503 found the README's
winwright.jsonexample missing a key:
the key "had been missing from it since the capture verb shipped" [winwright@ae44ecc], and the gate over the example had not seen it because it checked "nine names somebody typed" [winwright@861b82e:docs/CHANGELOG.md#L453]. The new check reads the build's own catalogue of keys, and was seen to fail: taking the key out again "back out turned the case red naming it" [winwright@ae44ecc].
- Shio.
agents.mdsaid "25 mutating paths" [shio@be9fa3727] when "The scan finds twenty-eight roots" [shio@be9fa3727],
and the test written for it records that the "rule was known and the exception was written two lines below it" [shio@821f18d74:cli/test/agents-md-figures.test.mjs#L12]. That test now fails a sentence stating such a figure uncited (SH974). Separately, the site made its measured figures generated after "two of them had been typed, and both were a measurement taken three tasks" [shio@821f18d74:shio-site/README.md#L91] before the ceiling they quoted moved.
Independence
Five origins: each stale figure was written and went stale in its own project's files, so each counts where it happened (grading rule 1). The remedies are also each project's own: generation in freewilly (DD159) and Shio (the site's figures), and checks in Shio (SH974), roadkeep (the figures sweep) and winwright (WW503). freewilly's typed-count rule and Shio's site rule may both come from the shared user-level writing skill; that affects the count of remedies, not of failures. Within freewilly the fault recurs after its remedy, since the contributing guide was not covered by the generated counts.
Counter-evidence
- winwright's case shows a check built from a typed list reproducing the fault it guards:
the earlier gate held the example to nine typed names and missed the key for that reason. A check is a remedy only when it reads the source of the figure.
- Some typed figures are records of a moment rather than claims about the present, such as
a ledger entry's count on the day it shipped; those do not go stale in this sense, and none of the observations above is of that kind.
- Shio's figures test is not recorded failing on a real sentence after it was written; the
S4 grade rests on winwright's control.
Grade
R4: a stale typed figure or enumeration is observed independently in all five projects. S4: winwright's WW503 check encodes the claim (it fails when the prose no longer matches what the build reads) and its commit records it failing on a control. The counted observations elsewhere are S3: 25 against 28 in Shio, four against five and two against four in freewilly, eight blocks against ten in polyweave, five places in roadkeep.