Applies desk pass 8's five fixes, and adopts R-292's TAG_OPEN.
1. Step 5 now has all three of its outcomes. opposedContestFor returns taken,
held and unsettled; the document printed the first and the third. "They
hold" is 48.1% against the default target, 52.4% against Braithwaite and
74.3% against an Ashcroft who refused — which v0.17 established is what
most tables have, so the middle column is the one they will play. It gets
its own countdown row, its own table, and read-aloud of its own, and the
COMES TO NOTHING paragraph is now explicitly the unsettled case so it can
stop being the nearest text to an outcome it is not about. The reason
they held is the case's own argument arriving as good news: a person with
a life on the record is a difficult document to overwrite. Every figure
re-enumerated over all 10,000 roll pairs before writing.
2. EXPOSURE's five things are six, in order, under a heading that says six.
Introduced in my own v0.16 and survived two versions; asserting a unique
match protects against editing the wrong text and not against inserting in
the wrong place.
3. EXPOSURE opens with a one-minute box. The body is untouched — nothing in
it is padding — but 3,176 words is sixteen minutes about the encounter the
document exists to prevent, and a GM with thirty minutes of prep now has
somewhere to stop.
4. The stale open question is closed. Braithwaite has not been on the
critical path since v0.14 un-gated the tell, and pass 6 ran the act with
the Xenology and the Psychology both failed.
5. Act Four's Psychology has a special: which file it thinks it is, and how
recently it read it. It corrects them on Prichard's service history — it
is not remembering, it is citing.
Coverage 6 -> 7 specials, so the cited figure moved 85% -> 83.7% and
check-cited caught the prose before I did, which is what it is for.
R-292 adopted: outcome-coverage now composes its body onto check-scenarios'
TAG_OPEN through tagRe, so the two readers cannot drift on what starts a tag
while keeping the different bodies they need — and tagRe's fresh matcher per
call avoids the shared-lastIndex defect, this file being the second caller
that would have found it. Verified identical across all seven spellings.
npm run check: 19 guards pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>