Desk pass 7's finding, turned into the nineteenth guard. check-rollable asks whether a skill is reachable at 25% by the declared cast; pass 5 found that is rollability, not competence; pass 7 found it is also not coverage. A beat could be reachable, well-rated and silent about every band but the one the GM improvises, and the whole suite stayed green. tools/outcome-coverage.mjs measures. Beats are located structurally — the bullet that owns the tag and its children, ending at the next bullet of the same or shallower indent or the next heading, because R-287 is what an unbounded scope does. Band widths are counted by grading all 100 results through gradeRoll, never by arithmetic on fumbleStart, which is off by one and was written wrongly twice this session before being caught. Ratings come from the declared cast via R-286's reader, best-in-cast per skill, because that is the die a table actually rolls. tools/check-outcomes.mjs holds it, in two kinds: RATCHET — stated failure/fumble/special counts may improve and may not regress; unwritten-band exposure may fall and may not rise. --update re-records these, because freezing them would make every improvement fail. HARD CLAIMS — read from what is measured NOW, never from the baseline, so --update cannot silence them: a floor of 18 beats (check-cited once passed with zero citations), no beat bare of every band, every scope structurally bounded and none over 5% of the file, no unparseable tag, no beat naming a skill the cast has no rating for. Verified by breaking it: a stripped beat, a broken tag regex, an unparseable tag and a removed failure case each turn it red; the file and baseline were restored byte-identical after each; and --update with a bare beat present re-records the baseline and still fails. Two bare beats found and filled while building it — the six at the back, and the Insight that is deliberately indistinguishable on a success and a miss, which now says so rather than saying nothing. Coverage 16/21 failure, 5 fumble, 4 special at the start; 18/21, 6 and 6 now. The three figures are cited against the artifact rather than typed, which was the peer session's condition and the right one: pass 7 hand-counted 22 beats where there are 21 (Act Three's warning QUOTES a beat, and a hand count reads the quotation as one — R-286 in the other direction), and its other three counts were stale within one commit. Its first catch was its author: the STATUS line announcing this guard contained a beat-shaped tag and was counted as a beat. The reader was not changed — prose shaped like a beat is what this file is for — and the error message now names the fenced block as the place to write an example. Minutes later check-cited refused a citation-shaped comment in the post-pass about citations. Three readers, three authors describing their own format inside it, each caught by a guard built for a different pass. CLEAN GROUND v0.18. npm run check: 19 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
20 lines
302 B
JSON
20 lines
302 B
JSON
{
|
|
"beats": 21,
|
|
"quotedSkipped": 1,
|
|
"unparsed": 0,
|
|
"bare": [],
|
|
"unrated": [],
|
|
"widestScope": 1229,
|
|
"stated": {
|
|
"failure": 18,
|
|
"fumble": 6,
|
|
"special": 6
|
|
},
|
|
"session": {
|
|
"anyFumble": 41,
|
|
"unwrittenFumble": 30.6,
|
|
"anySpecial": 93,
|
|
"unwrittenSpecial": 85
|
|
}
|
|
}
|