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>
This commit is contained in:
co-authored by
Claude Opus 5
parent
1a2ca44c52
commit
aa3ae24ef2
+112
-18
@@ -9,10 +9,10 @@
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **Version** | **v0.15**, 13 September 2026 |
|
||||
| **Version** | **v0.16**, 13 September 2026 |
|
||||
| **Can it be run?** | **Yes, from this document alone.** A GM with this file and the compendium can run it end to end. |
|
||||
| **Is it convention-ready?** | **Nearly.** The print pack is built (`CLEAN_GROUND_HANDOUTS.html`, held by `check-handouts`). What is missing is a run with human beings, and a slot. |
|
||||
| **Playtesting** | **Five desk passes, no human runs.** `_1.md` GM chair (seed 4271) · `_2.md` Act Four stress (9314) · `_3.md` player chair, contrarian (5580) · `_4.md` **the clock, against v0.13's recut timings** (6142) · `_5.md` **the four-player cut, played** (8815). Thirty-three fixes plus two post-passes. Passes 4–5 are the only ones that describe the current timings; 1–3 ran against a 65-minute Act Two. |
|
||||
| **Playtesting** | **Six desk passes, no human runs.** `_1.md` GM chair (seed 4271) · `_2.md` Act Four stress (9314) · `_3.md` player chair, contrarian (5580) · `_4.md` **the clock, against v0.13's recut timings** (6142) · `_5.md` **the four-player cut, played** (8815) · `_6.md` **the four untested branches, forced** (3319). Forty fixes plus two post-passes. Passes 4–6 describe the current timings; 1–3 ran against a 65-minute Act Two. |
|
||||
| **What it is** | A **convention one-shot**, decided 13 September 2026. It ends in the slot; there is no second session and the text must not promise one. |
|
||||
| **Where it runs** | **Contingency 2027 — Sunday 31 January 2027, afternoon** (slot 9), Searles Leisure Resort, Hunstanton. |
|
||||
| **Runtime** | **3h30 of play plus a 10-minute break — 3h40 wall clock**, which is the house budget. Act Two was cut from 65 minutes to 45 in v0.13 to get there. The **Pacing Note** carries a further 65 minutes of cuts; take them as the default. |
|
||||
@@ -44,8 +44,11 @@ Read GM ESSENTIALS in full — this is only what a GM most often discovers too l
|
||||
far stronger than the numbers look. GM ESSENTIALS has it. Two beats depend on it.
|
||||
2. **Ashcroft cannot fight** — no weapon, no unarmed skill, a 1% attack. That is deliberate
|
||||
and his player must be told before the game. See his entry in Casting.
|
||||
3. **The lethal encounter is the column, in Act Two** — not the monster in Act Four, which
|
||||
cannot hurt anybody. EXPOSURE has the measured figures and the reason.
|
||||
3. **The lethal encounter is the column, not the monster in Act Four**, which cannot hurt
|
||||
anybody — and **at four players the six at the back are lethal on their own** (58.7%
|
||||
wiped, against 0.0% at six). The six at the back are also the encounter the party is
|
||||
likeliest to choose, because they are the only figures the scenario says are not people.
|
||||
EXPOSURE has the measured figures and the reason.
|
||||
|
||||
### Still to do
|
||||
|
||||
@@ -78,6 +81,11 @@ premise (a walk north that never arrives) and the predator's method (imitation).
|
||||
|
||||
- **System:** d100 roll-under. Special under a fifth, critical under a twentieth.
|
||||
96–99 never succeed; 00 always fumbles.
|
||||
- ⚠ **A fumble is the top twentieth of the FAILURE range, not just 00** — and that band
|
||||
widens as the skill falls. **00 at 85, 99–00 at 63, 98–00 at 53, and 97–00 at 40 or
|
||||
below.** Desk pass 6 found this document implying 1% throughout; at Spot 40 it is **4%**,
|
||||
and the cast rolls Spot 40 across two acts. Every fumble branch in this case is commoner
|
||||
than it looks. (`resolveBands().fumbleStart`, tested *before* the 96–99 clause.)
|
||||
- **Panic is live** — 0–5, up. Triggers marked per act. Act Four is where it bites.
|
||||
- **Coherence is the case.** The far side is a filed duplicate and it wants the agents
|
||||
written into it. Coherence loss is the clock on the whole scenario, not a side effect.
|
||||
@@ -182,6 +190,13 @@ written.** See Act Two's budget table.
|
||||
is ten minutes of slack. **Treat it as somewhere between zero and ten, and take the cuts
|
||||
early.**
|
||||
|
||||
⚠ **If a fight starts, none of this is enough.** EXPOSURE's sixth lesson has the figures:
|
||||
the encounter the party is likeliest to pick runs a median 24 rounds, which is the best
|
||||
part of an act. **The moment dice come out against the column or the six at the back, take
|
||||
every remaining cut immediately and tell the table the Close is fixed at 25 minutes.**
|
||||
Do not try to absorb a fight and the re-cut-peg fumble in the same act — desk pass 6 had
|
||||
both and Act Three ran ~115 against a budget of 50.
|
||||
|
||||
Desk pass 4 ran v0.13 on a hostile seed and estimated ~3:46 against 3:40; correcting six
|
||||
misread skill ratings in that pass moved the same seed to ~3:34. **Neither figure is a
|
||||
runtime.** They are two readings of one simulated table, ten minutes apart, and the
|
||||
@@ -698,20 +713,32 @@ carelessness — this column has done this before, and it has lost people doing
|
||||
## Act Three — There is no north *(~50 min, and read the next line before you trust that)*
|
||||
|
||||
> ⏱ **This act has a twenty-minute bomb in it and the 50 does not include it.** If anybody
|
||||
> fumbles Anomaly Lore on the depot entry, the text below sends them chasing the re-cut
|
||||
> peg, and it says in terms that *a table will spend twenty minutes on it*. That is a real
|
||||
> instruction and it should be obeyed — the silence of that failure teaches more than a
|
||||
> correct roll. But 50 + 20 is 70, and the act is budgeted at 50.
|
||||
> fumbles **`[CUS: Anomaly Lore — what a peg is, and what losing one does]`** — the third
|
||||
> beat below, **not** the depot entry, which is a *Research* roll — the text sends them
|
||||
> chasing the re-cut peg, and it says in terms that *a table will spend twenty minutes on
|
||||
> it*. That is a real instruction and it should be obeyed — the silence of that failure
|
||||
> teaches more than a correct roll. But 50 + 20 is 70, and the act is budgeted at 50.
|
||||
>
|
||||
> **Watch the right die.** This warning used to say "Anomaly Lore on the depot entry",
|
||||
> which fused two different beats and sent a GM watching a roll that cannot fire the bomb.
|
||||
> Desk pass 4 inherited the error and its own correction reproduced it; desk pass 6 caught
|
||||
> it. At Anomaly Lore 63 the band is **99–00** — see GM ESSENTIALS, because it is wider at
|
||||
> lower ratings and Pollard, Braithwaite and Okonkwo are all in the thirties here.
|
||||
>
|
||||
> **So if that fumble happens, the northern-seam cut is no longer optional.** Take it the
|
||||
> moment the fumble lands, not at the break. With the cut, a fumbled act runs ~55 and the
|
||||
> session absorbs it. Without it, Act Three runs 70 and the Close pays.
|
||||
>
|
||||
> **The arithmetic is the reason, not a playtest.** Desk pass 4 originally reported hitting
|
||||
> this fumble; re-checking its rolls against the real sheets showed the roll was a plain
|
||||
> failure, not a fumble — 98 against Anomaly Lore 63, and 96–99 never succeed. So nobody has
|
||||
> yet played the twenty minutes. The warning stands on its own: the text predicts the cost,
|
||||
> the budget does not carry it, and nothing connected the two.
|
||||
> **Desk pass 6 played the twenty minutes and they cost what the text says.** The fumble
|
||||
> was forced onto a seeded stream rather than waited for, the agent concluded with complete
|
||||
> confidence that the peg could be re-cut, and *let them try it exactly once* proved to be
|
||||
> the right instruction — the silence at the end of it teaches more than the depot's
|
||||
> paperwork does. **The act ran ~55 with the northern seam cut taken**, exactly as predicted
|
||||
> above.
|
||||
>
|
||||
> *(Desk pass 4 reported hitting this and had not: 98 against 63 is a plain failure. Its
|
||||
> correction was right about the band but reached the answer through the 96–99 clause rather
|
||||
> than through `fumbleStart`, so at a rating of 53 the same reasoning would have been wrong.)*
|
||||
|
||||
**Beats**
|
||||
- **The evidence of the loop — three routes, with the almanac behind all of them.**
|
||||
@@ -798,7 +825,15 @@ them. **Anyone who examines him properly finds this, with no roll.**
|
||||
GM's ear during beat 2 instead of a discovery in front of everybody at beat 3.
|
||||
*Missed:* only the timing and the privacy — which is quite enough to be worth rolling
|
||||
for. **Desk pass 1 failed this roll and the act had no route left. That is what this fix
|
||||
is: the roll no longer holds the only key.**
|
||||
is: the roll no longer holds the only key.** Desk pass 6 failed it *and* the Psychology
|
||||
in the same run, and the act still worked — the un-gated tell in beat 3 carried it.
|
||||
- **On a fumble (98–00 at his 53):** Braithwaite is certain, and says so in front of
|
||||
everybody — ***this man is a baseline human, and I will put my name to it.*** He is
|
||||
the party's only specialist and he has just vouched for it. Play the rest of the act
|
||||
with that sentence sitting on the table: the tell in beat 3 still arrives un-gated,
|
||||
and it now costs somebody their expert. **Do not soften it into a shrug.** A fumbled
|
||||
specialism that produces a confident wrong answer is worth more than one that produces
|
||||
nothing, and it is the only thing in Act Four that can make the party argue.
|
||||
- If nobody examines him at all, **rehearsal step 5 arrives on schedule** and it reaches
|
||||
for somebody in front of the whole cordon. The tell arrives as an event rather than a
|
||||
finding, which is worse for them and perfectly playable.
|
||||
@@ -872,6 +907,33 @@ node tools/simulate.mjs --creature the_understudy \
|
||||
range bands or fire modes, and every one of those makes a fight worse for whoever is
|
||||
losing. Both of the first two are live in this scenario.
|
||||
|
||||
#### ⚠ The fight above is not the fight the table will have
|
||||
|
||||
**Every row in that table is one force fighting alone, and the six at the back are never
|
||||
alone.** They walk in the middle of forty-one refugees. The trigger desk pass 6 reached is
|
||||
the ordinary one — a hollow man tries the swap in Act Three, fails in front of everybody,
|
||||
and the party fires into the column it is standing in. **The document's real question is
|
||||
not how dangerous the hollow men are. It is how many of the column join in.**
|
||||
|
||||
| What they actually fight | Hurt | Down | Wiped | Deaths/run | Median rounds |
|
||||
|---|---|---|---|---|---|
|
||||
| Six hollow men, column stands off | 3.48 of 6 | 0.42 | **0.0%** | 0.04 | 13 |
|
||||
| **+ two of the column** | 5.02 of 6 | 2.78 | **7.8%** | 0.98 | 21 |
|
||||
| **+ three of the column** | 5.55 of 6 | 4.07 | **28.7%** | 1.56 | 24 |
|
||||
| + six of the column | 5.99 of 6 | 5.88 | **92.0%** | 2.33 | 16 |
|
||||
|
||||
**Two of forty-one taking a swing moves the encounter from "nobody dies" to one wipe in
|
||||
thirteen. Three takes it past one in four.** Measured the same way as the table above —
|
||||
2000 runs, seed 11 — and stable across four seeds: 7.3–7.8% at two, 27.8–29.1% at three.
|
||||
|
||||
- **How many join in is the GM's call and it is the most consequential call in the case.**
|
||||
Ivy holds the line by consent and will spend it to stop a firefight; she is one woman
|
||||
against a column that has met armed men before. **Two is the honest default** — not
|
||||
because the column is brave, but because two people out of forty-one losing their heads
|
||||
while their neighbours are shot is not a large number.
|
||||
- **Say the price out loud before dice are picked up.** That is not a warning against the
|
||||
fight; it is the information the party's own briefing would have given them.
|
||||
|
||||
#### The five things a GM needs from that table
|
||||
|
||||
1. **Do not fix the understudy.** It is a 1d3 punch with a 60% chance to land, and it goes
|
||||
@@ -879,10 +941,13 @@ losing. Both of the first two are live in this scenario.
|
||||
every test the party had, not that it is hard to kill. A GM who buffs it into a threat
|
||||
has replaced a scenario about classification with a scenario about a monster, and the
|
||||
case stops meaning anything.
|
||||
2. **Adding hollow men buys rounds, not danger.** Six of them still wipe nobody — and
|
||||
take a **median thirteen rounds** to resolve. In a 45-minute act that is the whole act,
|
||||
and the Close is what pays for it. If Act Four feels thin, the answer is more doubt,
|
||||
not more bodies.
|
||||
2. **Adding hollow men buys rounds, not danger — at six players, with the column standing
|
||||
off, and nowhere else.** Six of them wipe nobody and take a **median thirteen rounds**
|
||||
to resolve. In a 45-minute act that is the whole act, and the Close is what pays for it.
|
||||
If Act Four feels thin, the answer is more doubt, not more bodies.
|
||||
**Both conditions on that sentence are load-bearing**: two of the column joining takes
|
||||
it to 7.8%, and at four players six hollow men wipe **58.7%** on their own. See the two
|
||||
blocks above and below.
|
||||
3. **The column is the lethal encounter in this scenario, and it is not in Act Four.**
|
||||
Three of them is survivable, though somebody dies in about one run in six. **Six wipes
|
||||
one party in seven. Ten wipes nine parties in ten.** The curve between six and ten is
|
||||
@@ -897,9 +962,22 @@ losing. Both of the first two are live in this scenario.
|
||||
|
||||
| Four-player cut fights | Hurt | Down | Wiped | Deaths/run |
|
||||
|---|---|---|---|---|
|
||||
| Three hollow men | 2.80 of 4 | 0.33 | **0.3%** | 0.03 |
|
||||
| **Six hollow men** | 3.94 of 4 | 3.40 | **58.7%** | 0.42 |
|
||||
| **Six hollow men + two of the column** | 4.00 of 4 | 4.00 | **99.9%** | 1.11 |
|
||||
| Three of the column | 3.25 of 4 | 2.31 | **45.0%** | 0.98 |
|
||||
| Six of the column | 4.00 of 4 | 3.99 | **99.8%** | 1.46 |
|
||||
|
||||
⚠ **Read the hollow-man rows first, because they are the ones the party will choose.**
|
||||
The six at the back are the only figures in the valley the scenario tells the players
|
||||
are not people, so they are the encounter with the lowest moral cost — **and at four
|
||||
players they wipe better than half of all parties.** The main table's figure for them
|
||||
is **0.0%**, and that figure is for six players. A GM running the cut who looks the
|
||||
hollow men up and finds 0.0% is reading somebody else's table.
|
||||
**The curve from three to six is 0.3% to 58.7%** — the same near-vertical step this
|
||||
section warns about for the column between six and ten, one encounter earlier and at a
|
||||
smaller table. Stable across four seeds (58.7 / 60.5 / 60.3 / 59.8%).
|
||||
|
||||
**It is not a hard fight. It is two different fights.** That mean of 2.31 down is the
|
||||
average of a coin flip and describes about a tenth of outcomes: **23% of the time nobody
|
||||
goes down at all, 45% of the time everybody does**, and the ground between is thin. Six
|
||||
@@ -927,6 +1005,22 @@ losing. Both of the first two are live in this scenario.
|
||||
rate**. Against the full six it is worth a third of that, because one fighter is a sixth
|
||||
of that line and a quarter of the cut. **This is a property of the cut, not of the
|
||||
column.**
|
||||
6. ⚠ **A fight costs the session, and that is the better reason not to have one.**
|
||||
Everything above prices fights in bodies. The cost that ends conventions is the clock:
|
||||
|
||||
| | Median rounds |
|
||||
|---|---|
|
||||
| Six hollow men, six players | **13** |
|
||||
| Six of the column, six players | 14 |
|
||||
| Six hollow men + three of the column | **24** |
|
||||
| Six hollow men, four players | **30** |
|
||||
|
||||
A d100 round with six agents and nine opponents is not a fast round. **Assume three to
|
||||
four minutes each** — an estimate, not a measurement — and the encounter this section
|
||||
warns about is a **sixty-to-ninety-minute** encounter in an act budgeted at fifty.
|
||||
A GM who has been told the party probably survives has been told the less important
|
||||
half. **If a fight starts, the session is now the thing to protect**: see the Pacing
|
||||
Note, which carries the instruction.
|
||||
|
||||
*Recorded in `tools/first-blood-baseline.json` and re-checked on every build by
|
||||
`check-firstblood`; read it with `node tools/first-blood.mjs`. Earlier drafts of this
|
||||
|
||||
@@ -343,6 +343,16 @@ they were compared against.
|
||||
failure; 96–99 never succeed and only 00 fumbles. So the ten minutes this pass spent
|
||||
chasing the wrong idea, and the whole of finding 2, rest on a fumble the seed did not
|
||||
produce.
|
||||
- **Right answer, wrong reasoning — see desk pass 6.** "Only 00 fumbles" is not the
|
||||
rule. `fumbleStart = 101 - ceil((101 - band) / 20)` and it is tested *before* the
|
||||
96–99 clause, so the band is 99–00 at a rating of 63 and 97–00 at 40. This correction
|
||||
reached the right verdict through a clause that happens to agree at 63; at 53 the same
|
||||
reasoning would have called a fumble a failure.
|
||||
- **And the roll is misnamed here.** This pass logged it as *"Anomaly Lore — the depot
|
||||
entry"*, which is a roll that does not exist: the depot entry is `[CUS: Research]`,
|
||||
and the twenty-minute branch hangs off `[CUS: Anomaly Lore — what a peg is]`. The
|
||||
error came out of the scenario's own Act Three warning, which carried the same
|
||||
conflation until v0.16 and is now fixed.
|
||||
2. **Braithwaite's Xenology succeeded.** The party's one reliable Act Four test did *not*
|
||||
miss. This pass's claim that the single-point-of-failure "finally came up in play" is
|
||||
false, and it remains untested after five passes.
|
||||
|
||||
@@ -323,6 +323,10 @@ supersedes them. These are branch costs, measured against v0.15's budgets:
|
||||
|
||||
7. **Minor: label mixed fights in `simulate.mjs`.** A run of `a,a,b` prints as "3 x A".
|
||||
|
||||
**ALL SEVEN FIXES APPLIED in v0.16**, including the fumbled-Xenology branch this pass
|
||||
asked for and the `simulate.mjs` label (R-283). Pass 4's post-pass corrected in the same
|
||||
commit — it inherited the misnamed roll from the scenario's own warning.
|
||||
|
||||
**Still untested after six passes** — the list is finally shorter, and honest about why:
|
||||
a fight that the *players choose* rather than one this pass reasoned them into; Act Four with
|
||||
a PC taken **and** Ashcroft having accepted, which is the pairing the countdown was written
|
||||
|
||||
+15
-2
@@ -554,6 +554,19 @@ for (const k of creatureKeys) {
|
||||
if (!spec) { console.error(`no such creature "${k}" — try --list`); process.exit(1); }
|
||||
enemySpecs.push(spec);
|
||||
}
|
||||
/* R-283. The header used to read `${enemySpecs.length} x ${enemySpecs[0].name}`, which is
|
||||
only true when every enemy is the same spec. A mixed force — `--creature a,a,b` — was
|
||||
built correctly and then DESCRIBED as N of whatever came first, so six hollow men and
|
||||
six of the column printed as "12 x Hollow man". Two fights that differ by 88 points of
|
||||
wipe rate shared a label. The composition was never wrong; the report was, which is the
|
||||
defect this project keeps finding in itself, and desk pass 6 took every figure in its
|
||||
two headline findings out of a run whose header lied about what was fought. */
|
||||
const forceLabel = specs => {
|
||||
const tally = new Map();
|
||||
for (const sp of specs) tally.set(sp.name, (tally.get(sp.name) ?? 0) + 1);
|
||||
return [...tally].map(([name, n]) => `${n} x ${name}`).join(" + ");
|
||||
};
|
||||
|
||||
const count = Number(opt("--count", 0));
|
||||
if (count > 0) {
|
||||
const one = enemySpecs[0];
|
||||
@@ -625,7 +638,7 @@ if (has("--spread")) {
|
||||
}).sort((a, b) => a.delta - b.delta);
|
||||
|
||||
console.log(`
|
||||
SPREAD — ${enemySpecs.length} x ${enemySpecs[0].name}
|
||||
SPREAD — ${forceLabel(enemySpecs)}
|
||||
every party of ${size} the duty roster can field: ${rows.length} of them, ${runs} runs each, seed ${seed}
|
||||
|
||||
safest ${pc(rows[0].wipe).padStart(6)} wiped ${name(rows[0].party)}
|
||||
@@ -647,7 +660,7 @@ const result = measure(partySpecs, enemySpecs, {
|
||||
|
||||
const pct = x => `${(x * 100).toFixed(1)}%`;
|
||||
console.log(`
|
||||
${enemySpecs.length} x ${enemySpecs[0].name} vs ${partySpecs.length} duty-roster agents
|
||||
${forceLabel(enemySpecs)} vs ${partySpecs.length} duty-roster agents
|
||||
${partySpecs.map(p => p.name).join(", ")}
|
||||
${result.runs} runs, seed ${result.seed}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user