07bc09129ee2f5724d6b6f044dc99323486d42e6
68
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
07bc09129e |
art sheet: record what actually rendered, and why Joan did not
Eight plates and six of seven portraits are on disk. Joan Wetherlaw's portrait stalled three times — twice on the bridge's full 1800s window and once on deliberately reworded prompt text, which rules out both the prompt and deduplication. The thirteen before it returned in about forty-five seconds and everything after ~21:20 hung, which looks like fast GPU hours running out mid-batch. The sheet listed every stem as though it existed and named the plates by their pre-conversion stems rather than the webp files actually committed. Both fixed, with the retry instructions and the note that mj-gen exits 0 on a timeout, so the file is the thing to check and not the exit code. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
123e08612e |
STANDING ORDER v0.2: desk playtest 1, and its fix list applied
GM chair, all six cast pregens played as archetypes, every beat rolled on a seeded roller (mulberry32, seed 5291, rolls consumed in printed order) so the run is re-checkable rather than remembered. Fourteen plates and portraits too. The pass found three things worth the afternoon. REVELATION 3 WAS NEVER DELIVERED, AND ITS FALLBACK WAS CIRCULAR. The Psychology roll with Marlow failed, the Larkhall fallback failed, and the only route left was a file in Marlow's private quarters that nothing in the scenario told the players existed — findable only by knowing the thing it reveals. A fallback that requires the revelation it is a fallback for is not a fallback. The file now lives in the sick-bay day room where they already have reason to be, there is a second independent route through Pennyfeather and the 1974 return's CASUALTIES NIL, and the Vigil is an automatic backstop under all three. Psychology was the wrong skill anyway: the audit put the best in the cast at 40, a coin flip on the moral centre of the case, while the Casting table credited Renshaw with it as a strength. It is Insight now — 63, genuinely hers, and a better fit for a woman who is ashamed rather than confused. THE MOST OBVIOUS PLAYER MOVE HAD NO PRINTED ANSWER. The talker told the Controller there had been no war, four minutes in, and the document said nothing. Now printed in three mouths, plus what happens when they take a resident up to see the sky — which works, harms nobody, and solves nothing. ACT THREE RESOLVED IN EIGHT MINUTES OF A FIFTY-MINUTE ACT. The amendment failed and the party cancelled inside ninety seconds, because falling through to the end of the world is so much worse than the alternative that nobody deliberated — and they cancelled without knowing it kills the sixty-one children, because Pennyfeather was two corridors away. She now stands at the Controller's elbow and says the number out loud before the pen moves, and a failed amendment holds Sowerby's pen above the paper for one full round. Also: Act Two ran 75 against 55 and now has a real Pacing Note; the Act One Stealth roll bought nothing and now buys when Teague finds them; time inside versus outside is ruled in the text; the census is marked optional because missing it cost nothing; and Containment gets the one beat the heavy's 3/10 verdict asked for. All twenty-one guards still pass, and check-figures still records this document at zero bare figures. Untested: ending 2, a successful amendment, the quarantine unit, four players. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
70acc1e60b |
STANDING ORDER: a three-act post-apocalyptic crossing case
Two hundred and six people went underground in 1974 to govern the country after the war. There was no war. The Deputy Controller filed the drill as live, on purpose, to save the site a fortnight of arguing about whether it was allowed to start — and reality took the filing. The apocalypse in this one is clerical. At renewal 211 the site's population record exceeds the surviving population of the region it governs, and a record that cannot hold both resolves by correcting the region. Act Two shows the players the sum; Act Three is the decision, and all three endings cost something. Cancelling the order kills the sixty-one children born below, who have no record above ground. The text says so and does not offer the GM a way to make it painless. Deliberately not CLEAN GROUND. That case is a filed valley found by accident and resolved by cancellation; this is a filed institution the department built on purpose, and its best ending amends the order's scope rather than cancelling it — a Borrowed Authority problem, which is the setting's own thesis about arrangements beating fights. Three existing bestiary creatures, nothing new to build: the census counts in the Registry, the overwriter performs the correction if the renewal goes through, and the quarantine unit is the failure state you argue down. Cast declared as a different six from CLEAN GROUND's so the two cases exercise different sheets. All twenty-one guards pass: check-scenarios resolves 115 tags, check-rollable holds every route to the declared cast, and check-figures records the document at zero bare figures — it cites no measured number because it prints none, the quarantine unit's lethality included. The section drawing is hand-built SVG and must stay that way: every label on it is load-bearing and no generator holds legible text. Numbered callouts with a key beneath, per AFTERIMAGE v3.1. NOT playtested. Not once, desk or human. Every timing in it is a guess. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
fa30909dc9 |
handouts: the print rule zeroed the padding the slug depended on
Rendering the pack to PDF to print it showed the GM filing slug printed on top of the first line of three of the four sheets — both almanac tables and the minute's "Copy 3 of 4" line. The cause is one declaration. .slug is position:absolute at top:6mm, and what kept sheet content clear of it was .sheet's 18mm screen padding. The print block then said padding: 0, so in print — and only in print — content started at the very top and ran under the slug. On screen the pack looked perfect, which is why it survived being built, checked and shipped. Fixed by keeping a top padding in print: padding: 11mm 0 0. Side and bottom margins still come from @page, so nothing else moves. check-handouts could not see this and is not at fault for it: it holds the pack's STRUCTURE — the two almanac sheets sharing one class and one set of columns, every line reading 41 mi, nothing under 11pt — and a collision between an absolutely positioned element and the flow is a property of the rendering, not the markup. It took rendering the file and looking at the pages. The almanac trick itself is unaffected and was verified in the PDF: H03a and H03b print identically but for their dates and their counts, forty-one against fifty-three. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
fbe6288c94 |
CLEAN GROUND: re-roll the column plate, and record what the crossing costs
cg_05_column re-rolled and replaced. It now has Ivy a half-step ahead of the line with both hands held open and visible, which is the beat the read-aloud actually describes — "one woman walks forward with her hands held where you can see them". The line behind her is still drawn uniformly, so the six at the back remain indistinguishable, which is the one hard rule in the notes. cg_04_crossing is unchanged. Seven attempts did not beat the original: the plate has to be grey and dead and empty, and the generator supplies any two. The original's livestock are confirmed real rather than rocks — a crop of the hillside shows grazing animals and a barn — so the defect stands, recorded in STATUS rather than quietly kept. What the failures taught is now in CLEAN_GROUND_ART.md, because it is worth more than the plate: - Naming a thing to exclude it puts it in. "No birds, no sheep, no movement" and "the grey is dust and not snow" produced, respectively, livestock and snow. Both negations summoned what they forbade. - Steering off snow steers into summer: the moor comes back green and alive, which is worse than either. - A long --no list stalls the job outright. Four consecutive prompts with ten or more exclusions never produced a grid; the same prompt with four returned in two minutes. - Filter words costing a 30-minute timeout each: wound, dead ground, lifeless, smothered, and shot — including in "nobody in shot". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
310d342767 |
CLEAN GROUND v0.25 — the artwork, generated and placed
Seventeen assets through the Midjourney bridge: six NPC portraits at 512x512 in art/portraits/cg_*.webp and eleven scene plates at 1024x682 in art/scenes/cg_*.webp, matching the dimensions every other scenario in the system already uses. CLEAN GROUND had none; LAST_ADMISSION has 8 plates, OPEN_DAY 10, THROUGH_TRAIN 13. The art direction holds: 1962 Ministry drawing-office hand, pen and ink with pencil shading, dyeline blue-grey wash, buff card grain and a ruled margin, so the far side is drawn on the same paper as the Registry corridor. Ivy reads as competent rather than frail, and cg_05_column obeys the one hard rule in the notes — the six at the back are drawn exactly like the other thirty-five. Three prompts had to be reworded around Midjourney's filter, which declines ephemerally and leaves mj-gen waiting out its full 30-minute timeout on silence. "An empty dog lead WOUND twice round one fist" cost 23 minutes before the pattern was recognised; "nobody in SHOT" and "nothing behind its face" were found by scanning the remaining prompts rather than by hitting them. Two misses recorded in STATUS rather than quietly kept: - cg_04_crossing appears to have livestock on the hillside, and the point of that scene is that every sheep is gone. - cg_05_column has no Ivy; the line is uniform where the text has one woman a half-step forward with her hands open. Neither stops the scenario running. Eight of the seventeen were inspected against their briefs in detail, including every plate carrying an explicit rule. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
fe92f6ceb2 |
CLEAN GROUND art sheet: square portraits, and the word photograph out of the tokens
Two corrections found by checking the repo before generating rather than after. The sheet said --ar 2:3 for portraits, copied from THROUGH TRAIN's tokens. Every raster portrait in art/portraits is 512x512, all sixteen, and every scene plate in art/scenes is 1024x682 across all three scenarios that have them. Foundry wants a square portrait. Corrected to --ar 1:1. And the token said 'composed as a 1962 personnel-file photograph'. The conceit is that the framing is a file record, but leaving the word photograph in the prompt fights --no photography and pulls the generation to photorealism, which is the house gotcha already written down from the Day One prompts. 'Composed square-on like a 1962 personnel record card' gets the framing without the word. --no photography, photorealism added to all three tokens. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
eead6633c8 |
CLEAN GROUND v0.24 — artwork prompt sheet, and an art claim that was too wide
The Casting section said "Portraits already exist in art/portraits for all six. No new art needed." The first sentence is true and verified on disk. The second was only ever true of the cast, and sitting at the foot of Casting it read as a statement about the scenario. It is not: the six named NPCs have no portraits, there is no map, and there are no scene plates at all — while LAST_ADMISSION has 8, OPEN_DAY 10 and THROUGH_TRAIN 13. Not one cg_* asset exists anywhere in art/. Nothing in "Still to do" mentioned it either; that list held only a human run and a slot, both resolved. So: the claim is scoped to the cast and points at the gap, the gap is on the outstanding list where a reader looks, and CLEAN_GROUND_ART.md now carries the prompts — 6 NPC portraits and 11 scene plates, 17 ids, none colliding with a file already on disk. Art direction follows the house pattern (base style plus one scenario line). THROUGH TRAIN draws the present day in an 1881 hand; CLEAN GROUND draws everything as a sheet from the 1962 file — including the far side, because the valley is not a place, it is a filed document nobody cancelled. Same paper, same margin, same grain on both sides of the seam. The notes carry the rules that matter: the six at the back are never singled out in the column plate (the text says do not linger on them, and a plate that picks them out gives away Act Three in Act Two), nobody in the column is lit as a victim, nothing glows, the understudy is never drawn as a monster, and the grey is not snow. Creatures stay in BESTIARY_ART.md; the handout pack is done and its almanac pages must not be illustrated, since their trick is that the two sheets are identical and check-handouts holds that. 21 guards green; the sheet classifies as a record, not a playable scenario. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
91a104e682 |
check-figures: the twenty-first guard — figures with nothing holding them
check-cited resolves every citation marker against the artifact it names, and
has one structural blind spot: it can only resolve the markers that exist. A
measured figure written into prose with no marker beside it is not a failed
citation, it is not a citation at all, and nothing looks at it again.
Desk pass 11 proved it. "A median 24 rounds" sat in the Pacing Note and "24 if
the column joins" in EXPOSURE, against a baseline holding 21 at two of the
column joining and 25 at three, through every pass that checked citations.
This reads the figures instead of the markers. Narrow by design: an earlier
draft matched any number within 45 characters of a measurement word and found
282 candidates, nearly all prose ("down 140 steps", "an engineer on his
rounds", "01:06"). The shapes here are the phrasings the documents actually use
when quoting the simulator, each read off a figure that is cited somewhere.
Opt-in rule: a document that uses citations must mark every measurement figure.
One that cites nothing is held by a ratchet instead — turning three unguarded
scenarios red is how a guard gets switched off on the day it is written — and
joins the strict regime the moment it gains its first marker.
It found three things in CLEAN GROUND before it was wired in:
- 74.9% printed bare twice while cited correctly four times, and that is the
figure that was published at 58.7% until the truncated sweep was found.
- "the longest fight is 120 rounds" — 120 is exactly packs cut.hollow6.longest,
the field check-cited REFUSES to let anybody cite because a sample maximum
moves by a third on a re-seed. Refusing the citation while printing the number
left the least stable figure in the suite as the only one nothing held. The
sentence now leans on the guarantee that is actually strong: check-packs
refuses to record a sweep in which anything reached the cap.
Proved by breaking it, four ways, with byte-identical restores: a stripped
marker fails, a planted "median 24 rounds" fails at its own line, a new bare
figure in an uncited document trips the ratchet, and a threshold column header
("Past 15 rounds") does not fire — that last one was a real false positive in
the first draft, which tested the matched text rather than its context.
v0.23. 21 guards.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
3af4c55f12 |
docs: playtest 11 — record what changed on the way into v0.22
Fix 5 as written said a fight costs the northern seam, the depot and telling Ivy. The Pacing Note names telling Ivy among the three things never to cut, so the applied version says two go and the third is compressed or moves to the stump. Written from memory of the act rather than from the Pacing Note. And applying it found a stale figure no guard could see: 'median 24 rounds' in two places, where the baseline says 21 at two of the column joining and 25 at three. It survived because it carried no citation marker, and check-cited can only resolve markers that exist. Fifth reader caught unable to see its own format. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
65ae156477 |
CLEAN GROUND v0.22 — pass 11's six fixes
1. EXPOSURE's "what to do instead of a fight" said "use three". That predates the measurement and described a fight the party never has: three of the column alone is five rounds and 0.1% wiped, where the trigger's real force is a median 21 rounds and 0.97 deaths. It now points at the mixed-force table instead of carrying its own number, and keeps the good half of the sentence. 2. New "The valley at dawn" block: the count moves. H03a says forty-one and the players are holding it. Do not correct the handout — Ivy counts every morning, so tomorrow she writes a smaller number and the sheet becomes a record of what they did. The Close's arithmetic moves with it. 3. Ivy is ruled out of the target pool, explicitly, where the GM decides how many of the column join in. She walked toward the guns, which puts her in front of the column rather than in it, and the Close is hers. 4. A dead PC now has an answer where only a taken PC did: Registry sends the next name on the sixteen-name duty roster, through the seam inside the hour, knowing nothing — which buys the table a recap. 5. Act Three names what a fight costs rather than only that it costs: the northern seam and the depot go, and telling Ivy cannot (the Pacing Note lists it among the three never to cut), so it is compressed or it happens at the stump, which the Close already branches on. 6. The anchor block assumed cooperation in every line. It now answers the party that shoots: they are never stranded, because the crossing will not close on its own — they walk home with nobody holding the door and come back thin. Also corrected two stale uncited figures found while applying fix 5: "median 24 rounds" at the Pacing Note and "24 if the column joins" in EXPOSURE. The baseline says 21 at two joining and 25 at three; 24 is neither, and had no citation marker to resolve. Both now read 21 and cite packs.line.hollow6col2. And two stale STATUS counts: "seven desk passes" listed ten, and "three post-passes" where there are nine. Counted rather than incremented. 20 guards green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
78e92a2dc8 |
docs: playtest 11 post-pass — the 4.90% answers a question the scenario never asks
No [CUS: Transposition - ...] beat exists anywhere in CLEAN GROUND. The house mission structure requires a Transposition roll per agent on the return (tools/mission.mjs:343), which is where the instinct came from, but this scenario's crossing is a standing open door rather than an aimed one. The 63 appears at 1011 and 1479 and both are characterisation, never a roll. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
a8f48df50e |
docs: playtest 11 — correct finding 6's premise
Finding 6 shipped saying that shooting the thing wearing the anchor strands the party. It does not. Line 136: the crossing is "open since the felling, widest at dusk, and it will not close on its own", and the "seam closes for good" at 1356 is the cancellation ending, a deliberate act rather than a clock. The party can always walk home. The 4.90% was correct and irrelevant. Session b5 reported the gap with that number attached to an unchecked premise; I verified the number and inherited the premise, which is not the same as checking the claim. b5 caught it and sent the correction unprompted. The finding is stronger corrected. The answer to "we shoot it" is not that they are stuck — it is that they walk home through the stump with nobody holding the door and come back thin, which is one step onto the road that ends as the thing they just shot. Built from 136, 256-259, 1012 and 1494, four places that have never been stood next to each other. The man who would have held that door is the one person who already knew what it cost. Post-pass added recording how a verified figure lent its credibility to an unverified sentence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
cd3be7128f |
docs: desk playtest 11 — the fight the players choose
The last of the original four untested branches, played: a party that opens fire at the Act Three swap. Seed 7311 for the played fight, 2000 runs at seed 11 for the distribution around it. The party survives the fight and the document does not survive the aftermath. Six findings: 1. Two blocks two hundred lines apart specify two different fights for the same trigger. "Use three" is a five-round skirmish that kills nobody (0.1% wiped); the mixed force it should name takes 21 rounds and buries an agent (8.3% wiped, 0.97 deaths). The mild one predates the measurement. 2. "Forty-one" appears sixteen times and is load-bearing arithmetic. A fight moves the count and the handout in the players' hands does not. 3. Ivy is unplaced in the one scene that decides whether the Close happens. 4. A taken PC gets six lines; a dead one gets nothing, at a mean of 0.97 per fight in a convention one-shot. 5. A fight in Act Three ends Act Three. Say which three things are lost. 6. The party shooting the thing while it wears the anchor — found by the concurrent session, verified here: Transposition 63 is Ashcroft's alone and the other five are on the 1% floor, so killing it leaves a 4.90% chance anybody opens a door home, and no Close. Every figure checked against tools/pack-tables-baseline.json rather than recalled. 20 guards green. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
4b491b18cf |
CLEAN GROUND v0.21 — the anchor is the way home, and the Close has an ending
Applies desk pass 10's five fixes. 1. The accepted-and-taken branch has a consequence now. One session in five or six reaches it, and the document had nothing: Ashcroft holds the door everyone else goes through, Transposition 63 is his, and the Close cannot happen until somebody is back through — three facts printed in three places that had never met. The way home now WORKS, and works beautifully, because the thing does not need to escape the party, it needs them to walk it home and it is carrying the skill that gets them there. It holds the door properly because that is what the file says an anchor does. The GM is told to play the gratitude: somebody at the table will say thank you, and that is the scene. 2. Act Three's "real scene" is written. It was one sentence claiming to be the act's centre. Ivy is told or she is not; if she is, she asks how long they have known, goes and sits with the line, and does not tell them. And the Close now answers it — if she was told she does not come south to ask whether there is a north, she comes to ask "Well?", because she is no longer asking for the truth, she is asking what they are for. Act Three's real scene is load-bearing instead of decorative. 3. The Close has a failure case, which it was the only scene in the document to lack. Nobody writes anything and the entry stays filed by default — the second ending arrived at by omission, played as an ending. Covers the clock, the split table, a dead Ivy, and a party too far down to sign. 4. Four across and then cancel anyway is priced as a third ending rather than a failed second one, and Ivy chooses the four, not the agents. She picks the youngest and she is not among them. 5. The depot Research has a special: the 1962 cancellation form, blank, filed by somebody who expected this to end. It is the paper they sign in the Close and it has been waiting sixty-four years. npm run check: 20 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
2ee44cef79 |
Desk playtest 10: the Close, and the branch nine passes never reached
Three parts: a census of twelve independent seeds rolled only as far as the three outstanding branches; a played session on the seed that reached two of them at once (4417); and a read of the Close, the only act never given a pass. The census settles the "still untested" list. Ashcroft accepted and was taken in 3 of 12 — one session in five or six, not rare, and nine passes missing it was ordinary luck. The swap succeeded twice against an expected five, which is a mildly cold run at p~0.05 and is recorded as noise: the four consecutive failures passes 6-9 reported are the same thing from the other end. 1. The branch nobody had reached is the one the document has no answer for. Act Four says taking the party's muscle "is a better scene than the anchor being it" and then, one bullet later, arranges the anchor being it in 37% of games. Ashcroft is not an interchangeable body: he holds the door everyone else goes through, Transposition 63 is his, and the Close cannot happen until somebody is back through. The document states all three facts separately and never puts them together. The only guidance on a taken PC is two sentences about the player's evening. And it is worse than a gap, because the thing now has a reason to cooperate: an understudy wearing the anchor does not need to escape the party, it needs them to walk it home, and it holds the door properly because that is what the file says an anchor does. That is the best scene in the scenario and it is not written. 2. "Telling Ivy. Or not telling her" is called the act's real scene and is one sentence — no read-aloud, no failure case, nothing downstream — in a document that gives the fumbled Medicine six lines. And the Close opens with Ivy asking whether there is a north, which only works if she was never told. Its "works in both branches" covers how the PARTY learned, not whether IVY was told. 3. The Close is the only scene in the document with no failure case, and its failures are likely: the clock, a split table, a dead Ivy, a downed party. 4. "Four across, then cancel anyway" is a third ending, not a failed second one, and choosing the four is the most brutal question the case can ask. 5. A critical Research at the depot, with nothing written above the success — the second consecutive pass to land an unwritten special on the first honest session after check-outcomes recorded 83.7%. Five fixes listed, unapplied. npm run check: 20 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
137ab82541 |
R-297: place the step-5 citation markers — 32 of them, no prose touched
Every figure in CLEAN GROUND's step-5 material now resolves against tools/step5-split.mjs, which enumerates rather than stores: the countdown rows, the two-case table and its blend, the Act Four reasoning, the counterfactual pair and the POW×5 targets. No prose changed -- stripping every HTML comment from the result diffs byte-identical against HEAD, which is the check worth having when editing another session's document. Proved live: raising Okonkwo's POW to 13 in a worktree makes Braithwaite the lowest in the room and eleven of the thirty-two markers go red at once, each naming the path and saying nothing can be re-recorded. The three figures that went bad in this document were all in prose rather than tables, which is why the prose is marked and not just the tables. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
47f2df9446 |
v0.20.1: "nearly quadruples" was wrong by three times, in the last two places
Desk pass 9's first fix, applied. The countdown's unsettled row and the Act Four paragraph both compared 14.5% against 3.8%, and the 3.8% is the rate against Ashcroft at his undiminished 85 — a contest that never happens, because if he refuses the thing reaches for the lowest POW in the room. Against what a table actually rolls: 11.3% at six players (Okonkwo), 10.0% in the four-player cut (Braithwaite), 14.5% if he accepted. The factor is 1.29, not 3.9. Both places now name who the target actually is, and the paragraph carries the correction inline so the claim cannot be re-derived from the old framing. What is NOT wrong, and the text says so: the trade THE OFFER describes is real and the taken rate genuinely moves 40.7% to 48.7%. One consequence was overstated, by three times. Written in v0.15, repeated in v0.16, and survived v0.19.1 correcting the identical error in the table beside it. Flagged again by the peer session while mapping citation paths, which is the third time this figure has been caught by somebody reading it rather than by anything checking it — and the argument for the derived-source markers now going onto it. npm run check: 20 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
a5c4378521 |
R-294: EXPOSURE's tables measured into an artifact, and 58.7% was 74.9%
Desk pass 9 found the scenario's most consequential table held by nothing: ~30 sampled figures, no baseline, catchable only by re-running the exact command. lethality-baseline.json does not cover them — it measures creatures SOLO against a frozen four-agent party that is not this cast. Building the measurer found the figures were also wrong. simulate.mjs's CLI calls runFight with no options, so every published figure was measured at the default 40-round ceiling — and runFight does not report truncation, it scores whoever is standing when the loop stops. Measured at 400: line.column6 14.8% -> 15.2% 34/2000 truncated line.hollow6col2 7.8% -> 8.3% 129 line.hollow6col3 28.7% -> 30.1% 264 cut.hollow6 58.7% -> 74.9% 578 <- 29% of runs never finished Fourteen points on the single most alarming number in the case, and the one v0.16 added specifically to warn four-player tables. fight-tail learned this in R-270 and carries an assertUncensored; EXPOSURE's own tables never got one. The longest fight at cap 400 is 120 rounds and 400 vs 2000 are identical, so the cap is comfortable rather than merely sufficient. tools/pack-tables.mjs measures all 17 configs against the DERIVED cast via castAndCut, using measure()'s exact discipline — one rng threaded through every run, not a reseed per run, because reseeding is a different stream and would not reproduce the published table. It refuses to report or record a truncated sweep. tools/check-packs.mjs holds the baseline against the game, so the pair is not a loop: check-cited holds the prose against the record, this holds the record against the harness. Hard claims read `now` and never `base`: nothing truncated, the party equals the declared cast, config floor, and more of the same creature may not make the party safer. Figures compare exactly, since the runs are deterministic. Verified by breaking it: a drifted baseline, CAP lowered to 40, and a removed config each turn it red, and --update refuses outright rather than recording a truncated sweep. The removed-config test first passed for a bad reason — MIN_CONFIGS is a floor and 16 clears it — so a dropped-config check was added and re-tested on a row in no monotonic chain. All files restored byte-identical after each probe. EXPOSURE's three tables and the nine prose figures around them are rebuilt from the artifact with citation markers; the multi-seed stability claims were re-measured too (the cut is 74.9/72.7/75.0/73.5 across four seeds, not 58.7/60.5/60.3/59.8). CLEAN GROUND v0.20. npm run check: 20 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
90cb251358 |
Pass 9 post-pass: the uncited surface counted, and it is not where I said
Fix 2 asked for the audit; here it is, and it reorders the fix list.
101 percentages in CLEAN_GROUND.md, 67 of them computed statistics rather
than skill ratings, 14 cited, 53 held by nothing. They split two ways and the
kind finding 1 was about is the safer one: a deterministic figure that drifts
can be caught by anyone who re-derives it in a second.
The exposed surface is EXPOSURE's two pack tables and the 58.7% four-player
figure — 2000-run samples against the declared cast, catchable only by
re-running the exact command, and behind no artifact at all. I had assumed
lethality-baseline.json covered them. It does not: it measures each creature
SOLO against the frozen party holloway/okonkwo/nkemdirim/ferriby, a different
four agents, storing {wipe, down, rounds}. The document's tables read "of 6"
and fight packs of three, six and ten. None of 3.48, 4.79, 5.97, 0.42, 3.03
or 58.7 appears in any baseline in tools/.
Recorded as a decision: derived figures want to resolve against the rule at
check time, since a stored baseline for them is a cache of arithmetic;
sampled figures want a baseline, since re-running them is expensive and
noisy. Same problem, different mechanisms.
Census and the baseline's shape counted here rather than taken from the peer
session that raised the gap.
npm run check: 19 guards pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
15c2e93b5f |
Desk playtest 9: the regression pass
An audit, not a session. Five versions of fixes went in today, all by one author, and the last three passes each found a defect introduced by the fix for the previous one. Every fix from passes 4-8 re-checked against the document: did it land, is it still true, did it break a neighbour. 1. "THE OFFER nearly quadruples the unsettled rate" is false as a statement about play. It compares 14.5% against 3.8%, and the 3.8% is the same counterfactual v0.19.1 removed from the table one commit ago: Ashcroft at his full 85 is never a target, because if he refuses the countdown reaches for Okonkwo. The real comparison is 14.5% against 11.3% at six players and 10.0% in the cut — a factor of 1.29, not 3.9. Printed in two places, both of which v0.19.1 walked past while correcting the identical error beside them. The trade the document describes is real and the taken rate really does move 40.7% -> 48.7%; only the size of that one consequence is wrong. 2. All 27 fixes from passes 4-8 are present, which is not the reassurance it sounds like. Nothing has gone missing; three of the four defects the last three passes found were created or preserved BY a fix, and a presence check cannot see any of them. What would have caught finding 1 is the thing check-cited does for figures backed by an artifact — and the 3.8% is enumerated from the rule, so nothing holds it. Every uncited number in the document is a number nothing is holding. 3. The understudy carries a dagger (1d4+2) and has no knife skill, so it swings at the 1% floor and the harness correctly picks its punch — every EXPOSURE figure is right. But EXPOSURE's load-bearing first lesson says flatly "it is a 1d3 punch", and a GM who reads the sheet sees a knife and one combat skill. Measured both ways: arming the knife at brawl 60 moves 0.55 hurt to 0.73 and 0.00 deaths to 0.01, still 0.0% wiped, still two rounds. The thesis survives; it is a documentation gap and is reported at that size. content.mjs restored byte-identical after the test. Confirmation session, seed 2260: step 5 landed on "they hold" — the branch v0.19 wrote one commit ago — in the very next session, and by the route that makes the case for it, both sides succeeding with the tie going to the person being acted upon. Ashcroft refused a fourth time (63%, a 16% run) and the swap failed a fourth time (roughly a coin flip, so 1 in 16); both recorded so neither is read as a pattern. Four fixes listed, unapplied. npm run check: 19 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
d68e394fa4 |
v0.19.1: the 74.3% is a counterfactual, not an event
Desk pass 8's finding 1 listed four targets for countdown step 5 and one of them cannot happen. If Ashcroft REFUSES THE OFFER the thing does not reach for him — it reaches for the lowest POW in the room, which is Okonkwo. The 21.9% / 74.3% pair lives in Act Four to price what accepting sold: what it would cost him if it tried. No table ever rolls it. v0.19 carried that straight into the new table under a heading reading "It reaches for", which is the one place it is unambiguously wrong. Rebuilt around the two cases that actually occur, with the split Act Two decides: Ashcroft refused 63% of games -> Okonkwo 55 taken 40.7 hold 48.1 uns 11.3 Ashcroft accepted 37% -> Ashcroft 42 taken 48.7 hold 36.8 uns 14.5 across all games taken 43.6 hold 43.9 uns 12.5 63/37 is the Insight 63 itself: he refuses on anything that is not a failure or a fumble. The warning is now inline in the table rather than left for the reader to derive. The finding is unharmed and the fix was right — the held outcome is still the likeliest single result and was still unwritten. What was wrong was framing 74.3% as a number a GM meets. It propagated before it was caught: the peer session read pass 8 and replied that 74.3% "is the number a GM meets, not the 48.1%", repeating the error out of my own fix list. That is what a wrong number in a fix list does, and it is the argument for correcting the record rather than only the scenario. Pass 8's fix list is amended and carries a post-pass. npm run check: 19 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
6171d1e9b9 |
CLEAN GROUND v0.19 — the outcome where somebody holds
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> |
||
|
|
df38be794b |
Desk playtest 8: the cold read, and the outcome nobody wrote
Two halves: the document taken as a GM meeting it thirty minutes before a
slot, measured rather than impressioned; and an honest session, six players,
seed 5108, nothing forced. Three versions of fixes had landed since anything
was played, every one written by somebody who already knew the document.
1. The climactic roll has three outcomes and the document describes two.
opposedContestFor returns taken, resisted outright, and unsettled. The
taken and unsettled figures are printed and both reproduce exactly, so the
source has always been right. Resisted outright appears nowhere — 48.1%
against the default target, 74.3% against an Ashcroft who refused, which
v0.17 established is what most tables have. It is the single most likely
result of the scenario's climax. Worse than an omission: the paragraph
below is headed WHEN STEP 5 COMES TO NOTHING, is entirely about unsettled,
and carries the beat's only read-aloud — so a GM whose agent simply won
finds text written for a different outcome. Enumerated over all 10,000
roll pairs; no seed.
2. EXPOSURE's "five things" are six and run 1, 2, 3, 4, 6, 5. Introduced in
my own v0.16 (
|
||
|
|
9c2ce9d905 |
R-290: check-outcomes — a beat that names a roll must say what it does
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> |
||
|
|
ecbad45fc6 |
CLEAN GROUND v0.17 — the good rolls now buy something
Applies desk pass 7's five fixes. The pass found the document covering two bands out of five: seventeen failure cases written, four fumbles, three specials — against 90.8% of sessions containing a special or critical on a beat that says nothing, and 36.0% containing an unwritten fumble. 1. Specials written where they matter, starting with the two pass 7 rolled. A critical Persuade on Swinburne now buys her coming to the stump AND talking on the way — the dog went for something on the seam side in June and came back wrong, four months earlier than the case otherwise offers it. Previously a 1 bought what a plain success buys, which is worse than the fumble, and the fumble buys a dog. A special Xenology, a special Medicine (how long ago it stopped — the almanac's gap before the almanac) and a special Spot (the third set circles and goes back toward the seam) likewise. GM ESSENTIALS now states the shape the existing three share: portable, private or early, never more conversation. 2. The Act Three swap beat points at EXPOSURE. v0.16 named that beat as the trigger for the fight it measured and left the beat silent, with "survivable" as the last word before the decision — which is about the swap, not about what follows. 3. Every fumble branch prints its band. Three of four did not, and the one that did was the one written in v0.16. 4. The fumbled Medicine and fumbled Spot are written. Pass 7 hit both cold and lost ten minutes, because four beautifully specific fumble branches make their absence elsewhere read as an oversight rather than a licence. 5. Act Four says which branch its headline figures are for. Ashcroft refuses about five times in eight — passes 6 and 7 both did — and the 48.7%/14.5% pair is printed far more prominently than the 21.9%/3.8% one most tables will be in. Every band printed was re-derived from resolveBands/gradeRoll by enumeration rather than arithmetic, which is where the off-by-one lives. Pass 7's finding 3 overstated itself and is corrected in the same commit: the Close's fumble branch does name a skill, inheriting the Anomaly Lore tag from the bullet above it. Post-pass appended. npm run check: 18 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
4ae4e13196 |
Desk playtest 7: an honest session, and the three bands nobody wrote
Full session, six players, seed 7742, nothing forced. Pass 6 forced its triggers on purpose; this one takes what the dice give, because a forced pass proves a branch works and cannot say how often a GM meets one. It reached neither thing pass 6 asked for — no fight, and Ashcroft refused THE OFFER again. What it found is what both of those are instances of. 1. The document covers two bands out of five. Seventeen failure cases are written across the acts, which is the house rule honoured properly. Four beats state a fumble. Three state a special or a critical. Enumerated through gradeRoll against the cast's best rating for each of the 22 rollable beats: 42.1% of sessions contain a fumble and 36.0% contain one with no written case; 93.9% contain a special or better and 90.8% contain one on a beat that says nothing. Specials are not rare — 13% at 63, 11% at 53 — and the scenario asks for 22 rolls. This seed landed on four uncovered bands in thirteen rolls, three of them GOOD rolls: a critical Persuade on Swinburne that buys less than the fumble does, and a special Xenology with nothing above the success. 2. v0.16 wrote the trigger into EXPOSURE and never wrote EXPOSURE into the trigger. The Act Three swap beat is named in the new mixed-fight block as the moment that starts the fight, and it carries no pointer back; its last word before the decision is "survivable". Act Two has done this correctly for versions. Five locations across 1,100 lines to adjudicate one beat. 3. Three of the four fumble branches do not print their band, and the one that does is the one written in v0.16 — the fix landed where it was being thought about, not where the same need already existed. The Close's is worse: "on a fumble asking the question" names no skill at all. The v0.16 fumble clause earned itself immediately: 99 against Medicine 53 is a fumble, and v0.15's wording read it as a plain failure. Timing: ~3:35 against 3:40 at six players with no cuts taken. First honest pass to land inside the clock unaided. Two fumbles in thirteen rolls is a 4.4% event and is recorded as an illustration, not a rate. Five fixes listed, unapplied. npm run check: 18 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
aa3ae24ef2 |
CLEAN GROUND v0.16 — the fight it was never measuring, and R-283
Applies desk pass 6's seven fixes. 1. EXPOSURE now measures the fight the table will have. Every row in the old table was one force fighting alone, and the six at the back are never alone — they walk inside forty-one refugees. Six hollow men wipe 0.0%; with two of the column joining, 7.8%; with three, 28.7%. Two is now the stated default, because two people out of forty-one losing their heads while their neighbours are shot is not a large number. 2. The four-player block has hollow-man rows: 0.3% at three, 58.7% at six, 99.9% with two of the column. Its only hollow-man figure before was the six-player 0.0%, so a GM running the cut was reading somebody else's table — for the encounter the party is likeliest to choose, because the six at the back are the only figures the scenario says are not people. GM ESSENTIALS item 3 carries the same correction. 3. Act Three's warning named a roll that does not exist. Its twenty-minute bomb hangs off "Anomaly Lore — what a peg is"; the depot entry is a Research roll. Pass 4's post-pass inherited the conflation from this warning and is corrected too. 4. GM ESSENTIALS states the real fumble band. fumbleStart is 101 - ceil((101-band)/20), tested before the 96-99 clause: 00 at 85, 99-00 at 63, 98-00 at 53, 97-00 at 40. Four times what "00 always fumbles" implies, in a case that rolls Spot 40 across two acts. Pass 4's correction was right at 63 by luck and would have been wrong at 53. 5. Sixth EXPOSURE lesson: a fight costs the session. Median 13 rounds on the printed row, 24 mixed, 30 at four players — sixty to ninety minutes in an act budgeted at fifty. The Pacing Note now says what to do when one starts, and not to absorb a fight and the peg fumble in the same act. 6. The fumbled Xenology is written. At 53 it fumbles on 98-00 and Braithwaite puts his name to a baseline human in front of everybody. The un-gated tell still arrives; it now costs the party its expert. 7. R-283: simulate.mjs described a mixed force as N of whichever spec came first, so six hollow men and six of the column printed as "12 x Hollow man" — two fights 88 points of wipe rate apart under one label. The composition was always right and the report was not. Uniform and --spread output are byte-identical, so nothing already published goes stale. Every figure re-run before writing rather than carried over. npm run check: 18 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
e70d25271f |
Desk playtest 6: the four branches five passes never reached
A branch pass, not a session pass. Seed 3319. For each untested branch the roller draws from the stream until the roll lands in the target band; every roll downstream of it is taken as it falls, and the draw counts are printed. All four branches work as written. The Swinburne fumble is better than the drawer, the re-cut peg costs the twenty minutes the text promises, and a failed Xenology no longer strands Act Four — the v0.14 un-gated tell carried the act with BOTH gated lines failed, which is the strongest result here. What the pass actually found is outside the branches: 1. The fight the table produces is not the fight the document measures. The six at the back stand inside forty-one refugees. Six hollow men alone wipe 0.0%; with two of the column joining, 7.8%; with three, 28.7%. Stable across four seeds. EXPOSURE measures the two forces separately and never says what the column does when somebody fires into it. 2. At four players six hollow men wipe 58.7%, and the only hollow-man figure in the document is the six-player 0.0%. EXPOSURE's four-player block — which exists to say the cut is a different game — has no hollow-man row. The curve from three to six is 0.3% to 58.7%. 3. The Act Three warning names the wrong roll. Its twenty-minute bomb hangs off "Anomaly Lore — what a peg is"; the depot entry is a Research roll. Pass 4 inherited the same confusion and nobody noticed, because the text it was checked against carried the error. 4. GM ESSENTIALS understates every fumble band. "00 always fumbles" reads as 1%; fumbleStart is 101 - ceil((101-band)/20), tested first, so Spot 40 fumbles on 97-00. Four times what the summary implies, in a scenario that rolls Spot 40 through two acts. 5. EXPOSURE prices fights in bodies and never in minutes. Median 13 rounds printed, 24 mixed, 30 at four players. Also: simulate.mjs labels a mixed force with the first spec's name and the total count, so 6 hollow men + 6 column prints as "12 x Hollow man". The composition is right and the header is not; every figure above came out of a run whose header lied about what was fought. First run in six passes where Ashcroft refused THE OFFER, and the first where a player character was taken. Seven fixes listed, unapplied. npm run check: 18 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
8705b00631 |
CLEAN GROUND v0.15 — the four-player cut, fixed
Applies desk pass 5's five fixes and corrects a claim the pass itself overstated. 1. The cut cannot see. Pollard's Spot 53 is the best in the declared cast (others 40/40/40/35/35) and he is the first agent the scaling notes drop. At five players and fewer his clues — the stump, the six at the back, the lorry — are given, not rolled for. check-rollable cannot warn about this: it tests the 25% floor, not competence. 2. The split table now has a four-player column. Four of its five rows named Pollard or Okonkwo, or said "all six". 3. The Pacing Note says the cuts are sized for six. At four, keep the northern seam; pass 5 ran 3:15 with every cut taken. 4. The line rests twenty minutes at four players — Ashcroft is aside for THE OFFER, so three agents are talking, not five. 5. Act Four records that THE OFFER nearly quadruples the unsettled rate: 14.5% if Ashcroft accepted against 3.8% if he refused. Accepting makes him both the likeliest person to be taken and the likeliest reason the beat resolves into nothing. Verified against roster.mjs rather than recalled, which caught pass 5's own error: Spot 53 is the best in the CAST, not the roster — four agents carry 58. Post-pass appended. The check also found that Agyeman's 58 makes the substitution the scaling notes already name the single best answer to the cut, which is now written in. npm run check: 18 guards pass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
97f5cbbcae |
Desk playtest 5: the four-player cut, played for the first time
Seed 8815, four players — Ashcroft, Bhattacharya, Renshaw, Braithwaite. Every rating pulled from roster.mjs before rolling, which is the direct consequence of pass 4 having typed six of sixteen from memory. The cut is the most measured thing in this project and had never been played. EXPOSURE prices its fights, check-firstblood holds its swing, check-attackers holds what each of the four contributes -- and no pass in four had run a session with Pollard and Okonkwo off the table. THE RESULT IS NOT ABOUT COMBAT. The fights were never the problem. What breaks is the party's eyes: POLLARD'S SPOT 53 IS THE HIGHEST IN THE ENTIRE ROSTER AND HE IS THE FIRST PERSON THE SCALING NOTES DROP. At five players the party's eyes go from 53 to 40; at four they stay at 40 with a 35 alongside. This run missed the stump (79 vs 40) and the six at the back (67 vs 35), both Pollard's lane in the six-player game, both clues the scenario leans on. check-rollable cannot see this, and the reason is worth keeping: it asks whether every named skill is reachable at 25% or better, and Spot 40 clears 25 comfortably. It is a rollability check, not a competence check, and the cut is where the difference bites. The scaling note's only stated cost of dropping Pollard is that "the cordon loses its shield", which is about a fight, in a scenario whose first two acts are almost entirely looking at things. Second finding: FOUR OF THE FIVE PARTY-SPLIT ROWS NAME PEOPLE WHO ARE NOT THERE. The table is introduced as the fallback for a table that will not choose its own splits -- and at four players the fallback does not exist, which is exactly when it is most needed. Timing runs the other way from pass 4: ~3:15, twenty-five minutes SHORT, because four people ask fewer questions. Nothing in the Pacing Note says the cuts are player-count dependent, so a GM following it at a small table finishes early. The unsettled countdown fired for a second pass running. Recorded with the caveat that both passes had Ashcroft accept THE OFFER, so both used the Difficult branch -- 14.5% unsettled against 3.8% if he refuses. Not two draws from the same distribution, and the document prints only one of those figures. Five fixes listed, none applied. Also listed: what five passes have still never tested -- the Swinburne fumble, the re-cut-the-peg fumble, a failed Xenology, and any fight at all. npm run check: 17 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
ae06df8e04 |
Correct desk pass 4: six of sixteen ratings were typed from memory
Found while setting up pass 5 by pulling the sheets from roster.mjs instead of recalling them. The d100s are unchanged; only what they were compared against was wrong, and three outcomes flip: Pollard Spot, the stump 58 -> 53 success becomes fail Bhattacharya Anomaly Lore 58 -> 63 FUMBLE becomes plain failure Braithwaite Xenology (Baseline) 45 -> 53 fail becomes success So three things pass 4 reported did not happen. The re-cut-the-peg fumble never fired -- 98 against 63 is a plain failure, 96-99 never succeed -- which means the ten-minute chase and the whole of finding 2 rest on a roll the seed did not produce. Braithwaite's Xenology succeeded, so the scenario's one single-point-of-failure remains untested after five passes rather than having 'finally come up in play'. And Pollard missed the stump. Read correctly, the same seed lands near 3:34 -- six minutes UNDER budget rather than six over. Findings 1, 3 and 5 are untouched: the special was a real 7, the Swinburne fumble a real 00, and THE OFFER's staging is not a dice question. Finding 2's conclusion also survives because it never depended on the roll -- Act Three is budgeted at 50, the text predicts the fumble costs 20, and nothing connected that to the cut. The reasoning was right and the evidence was invented, and the scenario now says so instead of citing a playtest that did not happen. The Pacing Note's slack claim is withdrawn rather than replaced. One seed read two ways gave 3:46 and 3:34, and the gap between them is about the size of the margin being argued over. It now tells a GM the shape -- every scene has something that ends it, the cuts are real, Act Three is the likeliest overrun -- rather than a number a desk pass cannot produce. npm run check: 17 guards, exit 0. |
||
|
|
c127184763 |
CLEAN GROUND v0.14: pass 4's fixes, and one finding corrected in the applying
Five fixes from desk playtest 4. One of them was wrong and the correction is the more useful half. 1. A SPECIAL ON THE COLUMN PERSUADE NOW BUYS SOMETHING PORTABLE. It bought more conversation, which the line's rest clock then took away -- a player in pass 4 said "I rolled a 7 and got less time", which is a good roll punished by a timing device. It now buys the almanac early, or a name from 1962, or "the six at the back don't eat". Each travels out of the scene, so the line still stands up on schedule and the roll still paid. 2. ACT THREE'S TWENTY-MINUTE BOMB IS NOW BUDGETED -- and this is the finding that was wrong. The pass said the re-cut-the-peg fumble had "no duration and no ender". It has both, and always did: the text says a table will spend twenty minutes on it and to let them try it exactly once. What was missing is that ACT THREE IS BUDGETED AT 50 AND THE TEXT PREDICTS 50 + 20, with nothing connecting the fumble to the cut that pays for it. Act Three now opens with that warning and makes the northern-seam cut compulsory the moment the fumble lands. The clause itself is untouched; it was already right. 3. A FUMBLED PERSUADE ON SWINBURNE HAS AN ANSWER. She does not produce the photocopy -- she produces the dog, walks them to the stump in silence, and H01 reaches them later from the coroner, confirming rather than revealing. Better staging than the drawer, and the GM should not regret the fumble. 4. THE SLACK CLAIM IS HONEST NOW. The Pacing Note said ten minutes. Pass 4 on a hostile seed finished at ~3:46 with one cut unspent: four minutes and a cut. Ten is the friendly-seed number and is what a GM would have planned against. 5. THE OFFER'S STAGING ACCIDENT IS NOW DELIBERATE. Moving it inside the column scene was purely a time saving; the side-effect is that the offer has no audience and Ashcroft returns to a conversation that carried on without him. Written down so nobody moves it back. The correction to 2 is recorded in the playtest document as its own lesson: a reading made while looking for faults finds faults that are not there about as readily as ones that are. Apply fixes against the source, not against the notes. npm run check: 17 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
23262855b4 |
Desk playtest 4: the clock, against v0.13's recut timings
Seed 6142, banding from rules.mjs rather than estimated, every roll logged. Run because desk pass 1's 4:25 describes a scenario that no longer exists -- Act Two was 65 minutes when that pass ran and is now 45. VERDICT: the clock holds, and for the reason it was built to. Every beat in Act Two ended on something written into the text rather than on GM judgement, which is what the recut was for and what the 65-minute version never had. The run landed at ~3:46 against 3:40, with two of three Pacing Note cuts taken and the third still in hand -- the first time this scenario has finished a pass with a cut unspent. A hostile seed, deliberately not re-rolled: two fumbles, eight failures, and the party's one reliable Act Four test missing. A clock only tested under lucky rolls is not tested, because failure is what generates table time. THREE THINGS THE DICE FOUND, none of them about minutes: - A SPECIAL FIGHTS THE REST CLOCK. Renshaw rolled 7 against 63 and the column opened up at exactly the moment the scene wanted to end. A GM who has just rewarded a good roll will not then stand the line up. The roleplay-first archetype's verdict was "I rolled a 7 and got less time", which is the only sour note in the session and a real design fault. - THE RE-CUT-THE-PEG FUMBLE HAS NO DURATION. The clause is one of the best things in the document and the text itself says a table will chase it. It added ten minutes with no guidance about what ends it. - A FUMBLED PERSUADE ON SWINBURNE HAS NO ANSWER. H01's failure case is written for a party who did not ask, not one that asked badly. Predates v0.13, and the third pass running to find the failure cases written for absence rather than for bad rolls. WHAT WORKED, WRITTEN BLIND: the unsettled countdown outcome added in v0.12 was asked for on its first ever roll -- the understudy fumbled 100 against Ashcroft's failure on the Difficult branch, so the contest came back unsettled. That is the 14.5% case, it is the aggressor-fumble the rule's author left for this document to price, and the price is right. No fix needed. Also confirmed: THE OFFER running inside the column scene costs zero wall clock, and has a side-effect worth keeping on purpose -- the aside has no audience, so Ashcroft returns to a conversation that moved on without him. Five fixes listed, none applied. npm run check: 17 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
00e5a993cc |
CLEAN GROUND v0.13: Act Two cut from 65 minutes to 45, and the clock now fits
The scenario ran 20 minutes over the house budget (3h30 play plus a ten-minute break, 3h40 wall clock) and Act Two carried all of it at 65 minutes. It is now 45, and the session lands at 3:40 exactly: 45 + 45 + 50 + 45 + 25 = 210 minutes of play. NOTHING WAS DELETED. The twenty minutes came out of structure, which is the only kind of cut that survives contact with a table: - THE CROSSING IS CAPPED AT FIVE. It was "let the silence sit until a player breaks it", which is open-ended by construction. If the table is still quiet at minute five the Geiger finds its own voice. A silence that has stopped being tense is just a pause. - THE OFFER RUNS INSIDE THE COLUMN SCENE, not beside it. It was "somewhere in this act, take Ashcroft's player aside for one minute" -- a separate slot. Run during the line's rest, while the other players are talking to Ivy, it costs nothing, because the table is already occupied. - THE LINE'S REST IS THE ACT'S CLOCK, and this is the cut that does the work. The column walks every day and stops to rest, not to meet people. Ivy talks for as long as the line is sitting down, and the line sits for twenty-five minutes; then the old ones stand up, because they always do. The scene ends on the GM's schedule through the scenario's own premise rather than through a GM deciding to move things along -- and it is the loop showing itself for the first time, which makes the timer do dramatic work as well as temporal. The Pacing Note now carries 65 minutes of further cuts against what was a 55-minute problem, so there is about ten minutes of genuine slack for a table that talks. That is the first slack this scenario has ever had. It also now says where to cut if the break arrives late: Act Three's depot search, never Act Four, which is the shortest act with the most to do. Also fixed a stale duplicate: the Overview said "Runtime: 4h00" while STATUS and the timing table said otherwise. Every runtime figure in the document now agrees, and the remaining mentions of 4h00 are explicitly historical. CAVEAT, STATED IN THE DOCUMENT: desk pass 1's 4:25 predates this restructure and no fourth desk pass has been run against the new timings. The first human run is also the first test of this clock. npm run check: 17 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
e21446b164 |
CLEAN GROUND: say plainly that it runs 20 minutes long
Found while revising the Contingency 2027 prep deadlines. The house standard (docs/house-standards.md in the convention repo) allows 3h30 of play inside the four-hour slot plus a ten-minute break -- about 3h40 wall clock against roughly 3h15 of content. This document has always budgeted 4h00, which is the whole slot with nothing either side, and never said that was over. Worse, the Pacing Note's ~25 minutes of cuts read as slack and are not: desk pass 1 ran 4:25, so taking every cut lands at 4:00, still 20 minutes past the house budget. A GM reading "4h00 including a break" alongside "the Pacing Note carries cuts" would reasonably conclude there was room to spare. There is none. STATUS now carries the overrun, and the two honest ways out are written down rather than left implicit: find another 20 minutes, most likely in Act Two's 65, or declare it a deliberate exception and run it where nothing follows -- which at Contingency 2027 it does, Sunday afternoon with only a reserve behind it. Not decided; that is Tim's call. Until then the instruction is explicit: assume an overrun and take the cuts from the start rather than deciding at the break. npm run check: 17 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
dee2c8f776 |
CLEAN GROUND: booked — Contingency 2027, Sunday 31 January, afternoon
Slot 9. Recorded in STATUS and both open questions closed. The convention repo (slaguru666/contingency2027) carries the booking and points back at this file rather than copying it: seventeen guards check the scenario here, and a copy over there would be a second version nothing checks. That spends the Sunday afternoon re-run reserve, which was real slack. The convention schedule note now names this game as the one that gives if prep on the eight booked games slips — it is the newest, least tested, and the only one whose absence costs nobody a booked seat. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
9f3a63174f |
CLEAN GROUND v0.12: convention one-shot, the print pack, and the real opposed roll
Tim settled the last two questions: convention one-shot, and rules.mjs gains a real opposed roll (landed by a peer session at R-273). Both decisions change the document, and the one-shot unblocked the print pack. THE PRINT PACK — docs/scenarios/CLEAN_GROUND_HANDOUTS.html, guard 17. Four A4 sheets, self-contained, no external fonts or assets: H01 the coroner's note on white, H02 the 1962 committee minute on cream with photocopy grain, H03a and H03b the almanac on ruled paper. 11pt floor throughout. The binding constraint is that H03a and H03b must print identically or the almanac trick dies, so that is structural rather than careful: they share one `.almanac` class and every dimension comes from a variable defined once. There is no selector anywhere that names one page and not the other, and check-handouts fails the build if one appears, if their markup structures diverge, if their columns differ, if any row stops reading "41 mi", if the counts stop being forty-one now against fifty-three then, or if the pack and the scenario drift apart. It earned itself immediately: its first run failed my own pack for five rules at 10.5pt, under the house 11pt floor. Rendering was checked visually too, which caught two things no guard would have — the "TO CLEAN GROUND" header colliding with NOTES, and the writing crossing the red margin rule instead of starting right of it. THE ONE-SHOT. Countdown step 6 said "and this is a campaign", which the decision contradicts. Rewritten, and the Close's "leave it filed" ending now says how to land it tonight: do not end on "you'll be back", because the table never will and a hook they cannot take reads as an unfinished scenario. Name the next agent who gets sent, and have Registry thank them. THE OPPOSED ROLL. The scenario-local ruling is deleted; GM ESSENTIALS points at the game. Both beats were re-priced against the real rule by enumerating all 10,000 roll pairs -- exact, no seeds -- and two things fell out: THE OFFER IS PRICED. Ashcroft refusing is taken 21.9% of the time, the safest file at the table. Accepting: 48.7%, past Braithwaite's 37.6%. Accepting does not make him a bit more vulnerable, it makes him the easiest person in the room, and the countdown reaches for the easiest. STEP 5 CAN COME TO NOTHING, 14.5% of the time against an Ashcroft who accepted, and that row fires once and is marked permanent. Previously a silent gap in a climactic beat. It is now a written outcome with read-aloud text: the reach fails, it wears the wrong face for a moment, the party learns what it is and cannot prove it, and the clock still turns to step 6. Also: update-readme's count-word list ran out at sixteen, one guard after its own comment warned about hardcoded lists going stale. It failed loudly rather than silently, so it is an inconvenience and not a defect. Extended. npm run check: 17 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
8279cdfda8 |
R-272: guard the tail, and stop prose drifting from its artifacts
Three things Tim asked for together: measure the long end of a fight, make the swing check bite on stale prose, and record in rules.mjs the coincidence that hid an invented rule from two readers. GUARD 15 — check-fight-tail, on tools/fight-tail.mjs. Fourteen guards measured this scenario's combat and none could see a long fight, because every one of them averages. The cap is the measurement here, so the tool passes its own (400, not runFight's default 40) and --update refuses to record anything reaching it. Verified by lowering it back to 40: the cut loses 20 fights to the ceiling, the six-a-side 117, 107 of those ending neither won nor wiped, and the recorder stops. Two claims, both read from a fresh measurement rather than the baseline, so --update cannot silence them. "The long end is twice the median" was rejected as a claim because it is true of both encounters and so distinguishes nothing. Instead: a fight past 15 rounds wipes the party materially more often than a short one, and the SIX-A-SIDE fight is the longer one (median 14 vs 10.7) -- R-270 showing up as duration, since a disabled fighter keeps fighting 30 points down. The cut is shorter because it is decisive, not safer. GUARD 16 — check-cited, on tools/check-cited.mjs. check-firstblood and check-attackers catch the game changing; neither reads the document. Re-record after a re-cast and the artifact updates, the guard goes green, and the prose keeps printing the old number under a citation saying where the new one lives. So citations are now machine-readable -- **40**<!-- cite: first-blood cut.swing --> -- and resolved on every build. 25 of them. It failed three times on its first runs, all real: a config keyed "column" that the prose called "line", two figures rounded 32.3 -> 32, and a vacuous pass on zero citations, now fatal in its own right. It also refuses citation of unstable fields. fight-tail.longest may not reach prose: same party, same seeds, same runs, and renaming a config moved it 71 -> 90 rounds, because seedFor derives the stream from the id. Across seven labels -- median spread 0, p95 1, p99 3, longest 21. A sample maximum reads like a bound and is a property of the label. EXPOSURE states p99 instead. Same discipline on the deadlier ratio: 2.42 with seed spread 1.1, so the document gives its direction and declines to quote its size. RULES.MJS — one comment, no rule change. Over resolveLocationHit: its two thresholds are unrelated and usually agree. disabled is a fraction of the pool per location; majorWound is ceil(hp/2) and feeds only dyingLimitFor; neither removes anyone from a fight, which is conditionFor at 2 hit points or a destroyed head. At 10 hp, leg/abdomen/chest capacity is 5 and majorWoundFor is 5, and those locations take 12 of 20 melee results and 15 of 20 ranged -- so two readers reconstructed a rule that does not exist, checked it against the log, and were confirmed by it. The note says to test an arm, the only place the difference shows. Guards verified to bite, not assumed: drift, re-cast, censoring, the longest refusal, the rounding catch and the vacuous-pass catch were each forced and each failed the build with the right guidance, then restored. npm run check: 16 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
6e46ad0909 |
CLEAN GROUND v0.11.1: correct the mechanism under the first-blood swing
Two wrong mechanisms in one sentence of my own v0.10 prose. The measured swing of 40 is unaffected -- what was wrong was the explanation I gave for it, which I wrote from intuition rather than from rules.mjs. 1. "every disable removes an attacker" -- it does not. locationEffectsFor (rules.mjs:461) charges 30 points off physical for a ruined leg or manipulation for a ruined arm, and simulate.mjs:305 applies the manipulation penalty to melee and ranged attacks alike. A 40% attacker disabled is a 10% attacker, not an absent one: still swinging, still drawing attacks, still a target. A slope, not a cliff. 2. "both sides go down at half their maximum hit points" -- also wrong, and this one nobody flagged. Half maximum hit points is majorWoundFor, the MAJOR WOUND threshold, which feeds dyingLimitFor and decides how long a dying character lasts. It has nothing to do with leaving the fight. conditionFor (rules.mjs:1630) puts somebody down at 2 hit points or on a destroyed head, and that is the only thing that stops them acting. The paragraph now states the real loop and warns the GM off the wrong one, because playing disables as removals gets the fight wrong in the party's favour -- the direction that makes a party-ending encounter feel survivable. Credit where due: the first error was caught by a peer session correcting prose it had sent me twice. I found the second only because I verified the first against rules.mjs instead of taking it on assertion. npm run check: 14 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
dc801f7e9f |
CLEAN GROUND v0.11: Dodge 68, and Ashcroft is busy rather than sidelined
Two holes a peer session's per-agent measurements pointed at. Their scratch figures are not used; both edits are sourced to published numbers or to the guard that now holds them. EXPOSURE gains a fifth point: the party's sheets read about twice as effective as they are, and the number doing it is the column's Dodge 68. That is arithmetic off two published values, not a measurement -- Dodge 68 on The Quiet Neighbours (tools/content.mjs, printed by the bestiary) and one defence spent per incoming blow, so a 40% attack against a fresh dodge connects about one time in eight. Nothing in the document said so, and grep for "expect to hit" / "hit rate" / "lands about" returned nothing at all. The point carries its own way out: DEFENCE_STEP is -30, so a defender who has dodged once meets the next blow at 38%, then 8%, then the floor. Spend their dodges rather than out-shooting them. That is also the other half of why the four-player cut is a different game -- three attackers cannot spend three defenders' dodges and six can, so the missing attacker is the one who would have made everybody else's shots land. The recorded landing rates agree and are now citeable (16-18%, above the naive one-in-eight because most blows are not the first of their round), so the sub-bullet cites tools/attackers-baseline.json rather than asserting. The scaling note's Ashcroft warning gains the sharper reading: he is not sidelined, he is busy and ineffective -- 9.2 attacks a fight of which 1% land and 0.1% disable anybody, both held by check-attackers. A player who cannot act knows to do something else; a player rolling once a round for an hour thinks he is fighting. So the note now says what to give him instead, using only what is on his sheet: First Aid 40, Dodge 63, Insight 63, the anchor. Verified rather than relayed: Dodge 68 at tools/content.mjs, DEFENCE_STEP -30 and the per-round reset in rules.mjs and simulate.mjs, the three fighters' skills at 40/40/35, and the per-attack rates re-measured independently across three seeds before the baseline existed (17.6-18.3 / 17.4-17.6 / 15.5-16.2 / 1.0%, against the recorded 17.8 / 17.3 / 16.2 / 1.0). npm run check: 14 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
a0d15ad7a9 |
CLEAN GROUND v0.10: EXPOSURE reframed on the first disabling blow
The old EXPOSURE paragraph read the fight at round five and quoted bucket figures no guard held. Round five is where the outcome becomes legible; round two is where it is decided. Reframed on the first disabling blow and cited to tools/first-blood-baseline.json, so every figure in the paragraph is one the build re-measures: cut 50.3% first blood at mean round 1.8, 25.5% vs 65.5% wipes, swing 40 line 54.1% at round 1.3, 7.8% vs 23.2%, swing 15.4 An earlier draft carried 43 for the cut swing from a single seed. Three seeds give 40.0. The note stays in the document. Also adds a Casting coupling warning: the declared cast in the `cast:` marker is load-bearing on check-rollable and check-firstblood, and re-casting invalidates the recorded swing. Verified rather than assumed — swapping braithwaite for agyeman in the marker fails both guards and the build, and check-firstblood names the fix: "The recorded swing describes the old cast; re-record with --update, do not revert the cast." npm run check: 13 guards, exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
996bd248d3 |
CLEAN GROUND: one status block, and the end of the build archaeology
A stand-in GM opening this had no single place to start: the state of the document lived across three playtest logs, twenty commit messages, a status paragraph and a checklist at the foot. Worse, the two written accounts had drifted apart — the status paragraph still said the scenario "wants a stress re-run of Act Four, a player-chair pass", both of which were done and committed, and the foot checklist still said v0.8 in a v0.9 document with a sentence broken in half. STATUS now sits at the top and answers the questions a GM actually arrives with: what version, can I run it (yes, from this file alone), is it convention-ready (no — never played by human beings, no print pack), what playtesting exists and at which seeds, how long it runs and where the cuts are, how many players. Then the three things that are not obvious, as pointers rather than restatements, because GM ESSENTIALS is where rules live: opposed rolls use a scenario-local ruling since rules.mjs has none; Ashcroft cannot fight and his player must be told before the game; and the lethal encounter is the column in Act Two, not the monster in Act Four, which cannot hurt anybody. The foot checklist is deleted rather than corrected. Every item on it was either struck through or now in STATUS, its history is in the logs and the commits, and keeping a second account of what is outstanding is what let the first one drift. Open Questions stays as the single home for decisions and STATUS says so in a line instead of holding a copy — the same rule this repository applies to rule formulas, applied to prose about state. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
8e5a30a263 |
CLEAN GROUND v0.9: the anchor cannot fight, and the cut is three
Reading two narrated fights from another session showed Dominic attacking at `vs 1`, four times in one of them. Confirmed against the sheet rather than the log: weapons is empty and his only combat skill is Firearm (Pistol) 43, with nothing to fire. So the four-player cut fights with Renshaw and Bhattacharya on compact pistols and Braithwaite on a knife — a quarter of the party out of any fight, and a large part of why EXPOSURE already said violence at four players is party-ending without knowing that was the reason. A defect I introduced. "He carries no weapon, and the GM must not fix it" was written as characterisation about an anchor having both hands full, and was never checked against a fight. Not fixed by arming him, which would cost the character to solve what is really a briefing failure. Said out loud instead: his entry now states the 1% plainly and instructs the GM to tell his player BEFORE the game that Dodge 63, First Aid 40, Insight 63 and the anchor are his set-piece. A player who is not told will roll at 1% for twenty minutes and conclude the sheet is broken, which is the actual harm here. The scaling note carries the three-attacker arithmetic and points at Agyeman as fixing the sum as well as the lane; EXPOSURE names the cause in its own prose. Also recorded in the pass-3 log, deliberately NOT applied: the bimodality now has a mechanism — both sides disable at half max HP, so each disable thins the return fire and makes the next likelier, and first blood is a true coin worth 43 points of wipe rate in the cut against 14 at six-vs-six. It reproduces exactly. It stays out of the scenario because it comes from a reading tool with no guarded baseline, and a GM-facing page may not carry a figure nobody can re-derive. The duller published sentence is the checkable one. If that measurement gets a guarded home the paragraph should be reframed around the first disabling blow, which is the better frame. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
6b95a2c5a5 |
CLEAN GROUND v0.8: the player chair found the refusals, and both needed deciding
Desk pass 3 is committed alongside — full session from the player chair, choosing against the scenario at every junction, seed 5580 with one corrected branch at 7731. Every failure case and every pass-2 fix held. What it found instead were the two things players do that no GM-chair pass can reach, because both are refusals rather than rolls. "We are not going through." Three acts live on the far side and the document had no line about declining to cross, which is the most professionally sensible choice a party can make after reading a coroner's note about a man who walked himself to death. Answered now with a reason and not a compulsion: the entry is pegged to a tree that no longer exists, so a seam with no peg does not sit still — waiting does not make it safer, it makes it unfindable, and the forty-one go with it. Registry says that once and leaves the choice alone. A party that still refuses gets a real ending in ten minutes rather than four railroaded hours. "Can we cancel it from in here." A Research fumble and an Anomaly Lore success both landed on a question the document could not answer either way. Decided rather than fudged: cancellation is a REGISTRY ACT ON OUR SIDE, because the entry is a record and the record is held here. So it cannot be done from inside, somebody has to be back through before it happens, and anyone still in the duplicate when it goes goes with it, having never been filed as being there. The Close now costs not only what they choose but who is standing where when it takes effect, and if they are bringing anyone through those two questions collide. Also: Ray Teasdale, the clearance foreman the timeline always implied and the roster never carried — a Persuade success in pass 3 bought an interview with a man who did not exist. Act One's failure case no longer assumes the party is at the farm, since pass 3 spent the act twenty miles away and the automatic notch sat uselessly on the other side of the county. The re-cut is answered on a success as well as a fumble, with the reason: the entry is pegged to the older authority and there is no older tree. Fix 7's conditional target moved onto the countdown row, because I missed it myself eight minutes after writing it. A special for reading the child. And the bimodality paragraph, which took three attempts to earn its place: held when its citation failed, verified after another session found the cause — three separate random generators, so a seed named a different fight in each tool — and corrected once more when its illustration turned out to compare targeting modes rather than the two ends. Published now as 23% nobody down against 45% everybody, decided by round five, with the focus-fire claim removed. Twenty-three fixes across three passes. The cadence is complete; what remains is the print pack and two decisions that are not a scenario's to make. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
796bb7df73 |
CLEAN GROUND: the second EXPOSURE table, and four ratios that moved with it
Another session re-pinned the main exposure table at
|
||
|
|
8f3e1ff48e |
CLEAN GROUND: re-pin EXPOSURE against the corrected harness
The table was measured at |
||
|
|
6f33525b3a |
CLEAN GROUND v0.7: pass 2's seven fixes, and an opposed roll the game has not got
Desk pass 2 stressed Act Four across five contrarian branches at seed 9314 and is
committed alongside. The fixes from pass 1 held — beat 3's ungated tell worked and
the four-beat spine stopped the sprawl — but the stress found seven more holes.
The serious one: rehearsal step 5 is beat 3's guaranteed fallback, and in branch C
both sides rolled successes, which rules.mjs has no way to resolve. It defines no
opposed roll at all, while the hollow man's tactics text, slice-text.mjs and this
scenario all ask for one. Same class as Scent and Science (Botany): content naming
a mechanic the engine cannot perform.
GM ESSENTIALS now carries a SCENARIO-LOCAL ruling so the case is playable — both
roll, better band wins, ties to the agent, both fail and nothing happens — using
only banding the game already has, labelled a local ruling rather than a rule.
rules.mjs is untouched: whether the system gains a real opposed roll is not a
scenario's call, it is logged as an open question, and the text says to delete the
local ruling if that rule ever lands.
Verified against rules.mjs's own banding rather than by eye. Branch C now resolves
to Okonkwo resisting on equal bands. Branch D, with fix 7, has the understudy
prefer Ashcroft if he accepted THE OFFER, resisting at Difficult —
applyDifficulty(85,"difficult") is 42, the system's own grade and not a number I
invented — which finally makes the fiction and the numbers agree, because a
compromised anchor was previously the hardest man in the room to take.
Also in: the early-kill branch, which pass 2 measured at ten minutes of act and
thirty-five of dead air, now continues as Braithwaite's twenty minutes over a body
wearing Prichard's face, with nobody having yet asked where the real Prichard is;
a miss for Psychology, since the best line in the document cannot sit behind one
40% roll; a critical result for Borrowed Authority, which happens one roll in
twenty-five; step 5's target named as the lowest POW in the room, Okonkwo at 55%,
because a thing that has practised thirty years takes the easiest file; and one
sentence saying the hollow man's anchor immunity does NOT transfer, set up by
Ashcroft being skipped in Act Three so that he draws the wrong conclusion.
The EXPOSURE table is marked correct-as-of-5450521 and still needs re-pinning: the
harness rewrite landed at
|
||
|
|
555fa761c0 |
check-rollable: guard eleven, because a real skill is not the same as a route
check-scenarios resolves every skill a scenario NAMES against the catalogue, which is a different question from whether anybody present can roll it. CLEAN GROUND shipped four commits with three clues gated on Track (base 10), Navigate (base 10) and Science (Botany) — base 1, so the 1% floor was the whole of it — and every guard passed, because all three are perfectly real skills. A desk playtest found it by auditing the acts against the sheets the scenario casts. That audit is mechanical, so it belongs in the build. Two tiers. Corpus-wide, some roster agent must reach VIABLE for every skill any scenario names. Per scenario, a document that DECLARES its cast is held to that cast instead, and that is the tier that catches this defect class. The cast is declared rather than inferred, and that is the interesting part. The first version scraped pc_ keys out of the prose and swept up the substitutes named in CLEAN GROUND's player-count scaling — a cast of nine instead of six, which put Sandoval and his Track 35 in scope and made the guard pass the very bug it was written for. A guard that guesses the cast is worse than none, because it reports success. CLEAN GROUND now carries a cast comment and the guard reads it off the raw text, since scenarioText strips HTML comments. Verified load-bearing rather than assumed: re-injecting the original Track tag into the real CLEAN_GROUND.md fails the guard, naming the skill, the base chance and the declared cast. Worth recording that the corpus-wide tier would never have caught it — Lindqvist trains Botany at 40, so it is rollable by the roster and simply not by the six who were cast. The first fixture test passed for that reason and misled me; only the declared-cast tier finds this. VIABLE is 25 and is justified, not picked: it is the commonest base chance in the catalogue, what an untrained agent brings to Spot, Listen or Brawl, so it is the level the game itself treats as worth attempting. Below it a clue is not gated, it is buried. check-scenarios exports its tag parser rather than growing a second copy, behind the invokedDirectly pattern simulate.mjs already uses; a duplicated parser is exactly what this repository's one standing law forbids. update-readme then caught me fairly — it cross-checks the advertised guard list against npm run check — so the guard is registered there too and the README advertises eleven in all three places. No REVIEW_LOG entry: the log is clean at R-260 and is being appended to every few minutes by concurrent work, so the end of that file is the likeliest place to collide. Left for whoever next touches it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
bf8db68383 |
CLEAN GROUND v0.6: the eight fixes desk pass 1 earned, and its log
Desk pass 1 is committed alongside, seed 4271 and the roll stream printed, so the run is re-checkable rather than remembered. It failed the scenario, which is what it was for. The pre-flight audit did the real damage before a die was rolled: Track, Navigate and Science (Botany) were named by the acts and rollable by nobody in the cast, and Botany is base 1 — the same unusable-test defect fixed in Act Four two commits earlier and left standing in Act One. check-scenarios cannot see this; it resolves skill names and has no opinion on whether anyone present can roll one. Then the dice found the rest. Xenology (Baseline) failed and Act Four had no route left, which is the concentration risk logged as an open question arriving as a dead end on the first run. A fumbled Anomaly Lore had no written result and I invented a ruling at the desk. Act One's failure case backstopped arrival rather than the peg. The act ran 4:25 against 3:55 on three lucky rolls. Fixed: the notch is automatic and the three broken routes moved onto Spot, Knowledge and Anomaly Lore; every roll in the document now carries a written miss; the Act Four tell is ungated, with Xenology buying it early and privately instead of holding the only key; the fumble is answered by the re-cut delusion, tried once, failing in silence; Act Four has a four-beat spine because with no mechanical threat the structure has to be in the text; and THE OFFER finally fires Ashcroft's seam, priced at 2 Coherence he must accept before being told. Verified by re-running seed 4271 through the rewritten acts, so the identical rolls that broke the run were put back through the fix. Every one now has an answer, and Act One's three must-land clues all land despite two failures. Timing is improved and NOT solved: cuts recover 20-25 minutes, landing near 4:00-4:05 on a 3:55 budget, and on-the-minute is a fail for strangers. A third cut is likely needed and the candidate is named. Whether Act Four's spine holds 45 minutes, and whether THE OFFER plays as a decision, cannot be settled from a desk and are recorded as such. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |