Play PAPER WINDOW with the shipped pregens; fix four silent defects

Ran the starter end to end. It closed, and it found four defects in what I shipped an
hour earlier — all in the scenario data, all silent.

R-247: the Borrowed Authority did not work. I wrote scope "operate", which is not one
of the five scope tiers; an unrecognised scope ranks 0 and every action came back
"impossible" with no error. The first scene of the starter is the Borrowed Authority
tutorial. Fixed, guarded in check-kits, and covered by a test that documents the
failure mode.

R-248: the contact subsystem was unreachable in the scenario built around it. The case
file carried a standing for the Returned Clerks and no GROUP ITEM; resolveContact
returns null without one, so READ, SIGNAL and OFFER did nothing. Groups are data now,
and a test asserts every standing on a shipped case file has a group behind it.

R-249: legs wrote `kindId` where resolveLegDialog reads `leg.kind`. It worked only
because the terrain text happens to begin with "Extraction".

Not a defect: phase four went Difficult because Resources hit 0 and destitution makes
every remaining phase Difficult. Best beat in the session.

All four phases failed and the case still closed — Containment 8 to 2, Resources 8 to
0 — which is what the scenario is built to survive. Two of six closing requirements
succeeded and the settlement still completed. The Cancellation Man opened with a
critical against a raised riot shield and went through 10 points of armour, teaching
the shield and graded-defence lessons in one roll.

Also documented: nobody on the starter team can aim the return, because only the Anchor
Officer trains Transposition. The extraction page now says to narrate it rather than
roll six dice that will all fail.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-08-11 23:39:43 +01:00
co-authored by Claude Opus 5
parent 49c2e9fc7b
commit 4e28de2a64
118 changed files with 266 additions and 110 deletions
+1 -1
View File
@@ -183,6 +183,6 @@ The build runs all three guards before it writes anything:
check-rules: OK — 87 rules, 16 files scanned, 3 aliases + 41 constant sets checked, 275 formulas verified
check-kits: OK — 25 roles, 10 trades, 218 catalogue items, every kit key resolves, every posting can use what it carries, every loadout distinct
check-lang: OK — en.json, 926 keys, no leaf/branch collisions
check-behaviour: OK — 28 behavioural tests
check-behaviour: OK — 36 behavioural tests
```
<!-- guards:end -->
+70
View File
@@ -4941,3 +4941,73 @@ stable keys after import (raw ids do not survive one), the handouts come in
player-visible and the GM text does not, and **phase one runs straight out of the box** —
Nia leading the cordon on Tradecraft 53. Then everything imported was deleted again,
which the pack does not notice.
## PAPER WINDOW — played with the shipped pregens
Ran the starter end to end with the six pregens exactly as they import. It closed, and
it found four defects in what I had shipped an hour earlier — all four in the scenario
data rather than the engine, and every one of them silent.
**R-247. The Borrowed Authority did not work, and said nothing.** I wrote the
credential's scope as `"operate"`, which is not one of the five scope tiers. An
unrecognised scope ranks 0 — *nothing* — so `scopeStanceFor` returned "impossible" for
a routine site inspection by a surveyor at a demolition site. No error, no warning: the
credential was simply inert, and the first scene of the starter is the Borrowed
Authority tutorial. Fixed to `"routine"`, guarded in check-kits, and covered by a test
that asserts an unrecognised scope makes everything impossible so the failure mode is
documented rather than rediscovered.
**R-248. The contact subsystem was unreachable — in the scenario built around it.** I
gave the case file a standing record for the Returned Clerks and no group *item*.
`resolveContact` looks up the group and returns null without one, so READ, SIGNAL and
OFFER did nothing at all. PAPER WINDOW's central scene is a three-stage negotiation with
those clerks. The group is now data in `scenario-starter.mjs`, consumed by the builder,
and a test asserts every standing on a shipped case file has a group behind it.
**R-249. A phase kind written to the wrong field.** I wrote `kindId` on the legs;
`resolveLegDialog` reads `leg.kind` and falls back to a regular expression on the terrain
prose. It worked only because "Extraction — closing the register" happens to begin with
the word. Rename a phase and the return clock stops moving.
**And one that was not a defect.** Phase four resolved as Difficult when the scenario
table says Average — because Resources had reached 0 and destitution makes every
remaining phase Difficult. That is the rule working, and it was the best beat in the
session: they ran out of supplies and the way home doubled in difficulty.
### How it actually played
The credential carried them in and then the stretch for an asbestos exclusion spent it
to **Trust 0** — two hours bought, and nothing left for later. Phases one, two, three and
four **all failed**, which the scenario is explicitly built to survive: Containment 8 → 2,
Resources 8 → 0, Clearance 6 → 5, and the case still closed.
The investigation split cleanly across four players and three of the four discoveries
landed. Amira's READ turned up **both** taboos on one roll — Read the Room granting the
extra fact — and Elin **criticalled on 01** for the desire. SIGNAL and OFFER at
favourable took the clerks to **Standing 2**, which fired Evelyn's rewards automatically
and put the clean settlement on the table.
The Cancellation Man opened with a **critical on 01** against Callum, whose riot shield
was raised and whose arm therefore had 10 points of armour. A critical ignores armour
entirely: 10 through, Major Wound, 15 → 5. That is the shield lesson and the graded
defence lesson in a single roll, in round one, without any prompting from me.
Then the closing scene did the thing the scenario promises: **two of six requirements
succeeded and the settlement still completed.** Nia's authority failed and spent the
Clearance anyway; Callum's containment failed for a point; Elin certified them and is
now personally responsible for reviewing all 317 cases; Owen's repair worked and took
the last of the spare cells. Sennen's **special on 07** recovered the crown stamp with
the procedure intact, using the +20% Evelyn had given him at Standing 2 — a reward
granted by the contact engine, spent in the final scene. That chain is the whole design
working unassisted.
### One thing the starter needs saying out loud
**Nobody on this team can aim the return.** Transposition is trained by exactly one
posting in the register — the Anchor Officer — and none of the six has it, so all six
roll the printed 1%. The rule that failure gets an agent home *near* the target and
never strands them is what makes that survivable, but asking a GM to roll six dice that
are all going to fail teaches nothing. The extraction page now says so: narrate it, roll
only if somebody wants a clean arrival, and note at debrief that the department sent six
people to a crossing and no anchor. That is the campaign rather than an oversight — but
it is a deliberate choice a GM should be able to see, not a hole they fall into.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.314417 1742cf000 Recovering log #3
2026/08/11-23:23:08.314570 1742cf000 Level-0 table #5: started
2026/08/11-23:23:08.314789 1742cf000 Level-0 table #5: 4591 bytes OK
2026/08/11-23:23:08.315089 1742cf000 Delete type=0 #3
2026/08/11-23:23:08.315117 1742cf000 Delete type=3 #2
2026/08/11-23:39:03.882913 16f9c7000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.827615 17117f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.332681 174adb000 Recovering log #3
2026/08/11-23:23:08.332779 174adb000 Level-0 table #5: started
2026/08/11-23:23:08.332918 174adb000 Level-0 table #5: 4129 bytes OK
2026/08/11-23:23:08.333190 174adb000 Delete type=0 #3
2026/08/11-23:23:08.333236 174adb000 Delete type=3 #2
2026/08/11-23:39:03.926223 1701d3000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.870148 17198b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.316151 174adb000 Recovering log #3
2026/08/11-23:23:08.316320 174adb000 Level-0 table #5: started
2026/08/11-23:23:08.316628 174adb000 Level-0 table #5: 31614 bytes OK
2026/08/11-23:23:08.316965 174adb000 Delete type=0 #3
2026/08/11-23:23:08.317018 174adb000 Delete type=3 #2
2026/08/11-23:39:03.885484 16e9af000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.829491 170973000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.298312 174adb000 Recovering log #3
2026/08/11-23:23:08.300367 174adb000 Level-0 table #5: started
2026/08/11-23:23:08.301985 174adb000 Level-0 table #5: 225945 bytes OK
2026/08/11-23:23:08.302352 174adb000 Delete type=0 #3
2026/08/11-23:23:08.302416 174adb000 Delete type=3 #2
2026/08/11-23:39:03.901710 16f9c7000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.845061 17198b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.309911 1742cf000 Recovering log #3
2026/08/11-23:23:08.310322 1742cf000 Level-0 table #5: started
2026/08/11-23:23:08.310473 1742cf000 Level-0 table #5: 3295 bytes OK
2026/08/11-23:23:08.310750 1742cf000 Delete type=0 #3
2026/08/11-23:23:08.310794 1742cf000 Delete type=3 #2
2026/08/11-23:39:03.919152 1701d3000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.862697 17198b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.294604 174adb000 Recovering log #3
2026/08/11-23:23:08.295663 174adb000 Level-0 table #5: started
2026/08/11-23:23:08.296163 174adb000 Level-0 table #5: 58792 bytes OK
2026/08/11-23:23:08.296520 174adb000 Delete type=0 #3
2026/08/11-23:23:08.296610 174adb000 Delete type=3 #2
2026/08/11-23:39:03.892036 16e9af000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.835678 17198b000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.320015 175af3000 Recovering log #3
2026/08/11-23:23:08.320173 175af3000 Level-0 table #5: started
2026/08/11-23:23:08.320528 175af3000 Level-0 table #5: 33474 bytes OK
2026/08/11-23:23:08.320923 175af3000 Delete type=0 #3
2026/08/11-23:23:08.320978 175af3000 Delete type=3 #2
2026/08/11-23:39:03.924025 1701d3000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.868156 17117f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.305494 1742cf000 Recovering log #3
2026/08/11-23:23:08.305911 1742cf000 Level-0 table #5: started
2026/08/11-23:23:08.306128 1742cf000 Level-0 table #5: 7590 bytes OK
2026/08/11-23:23:08.306405 1742cf000 Delete type=0 #3
2026/08/11-23:23:08.306467 1742cf000 Delete type=3 #2
2026/08/11-23:39:03.875989 16f9c7000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.820649 172197000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.328983 1752e7000 Recovering log #3
2026/08/11-23:23:08.329262 1752e7000 Level-0 table #5: started
2026/08/11-23:23:08.329521 1752e7000 Level-0 table #5: 16892 bytes OK
2026/08/11-23:23:08.329805 1752e7000 Delete type=0 #3
2026/08/11-23:23:08.329838 1752e7000 Delete type=3 #2
2026/08/11-23:39:03.917638 16f9c7000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.860796 17117f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.324024 1752e7000 Recovering log #3
2026/08/11-23:23:08.325074 1752e7000 Level-0 table #5: started
2026/08/11-23:23:08.325775 1752e7000 Level-0 table #5: 89206 bytes OK
2026/08/11-23:23:08.326188 1752e7000 Delete type=0 #3
2026/08/11-23:23:08.326248 1752e7000 Delete type=3 #2
2026/08/11-23:39:03.913120 16f9c7000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.856844 17117f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.330955 1742cf000 Recovering log #3
2026/08/11-23:23:08.331078 1742cf000 Level-0 table #5: started
2026/08/11-23:23:08.331226 1742cf000 Level-0 table #5: 3739 bytes OK
2026/08/11-23:23:08.331550 1742cf000 Delete type=0 #3
2026/08/11-23:23:08.331583 1742cf000 Delete type=3 #2
2026/08/11-23:39:03.906240 1701d3000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.849798 17117f000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
MANIFEST-000004
MANIFEST-000002
+1 -5
View File
@@ -1,5 +1 @@
2026/08/11-23:23:08.307829 174adb000 Recovering log #3
2026/08/11-23:23:08.308163 174adb000 Level-0 table #5: started
2026/08/11-23:23:08.308314 174adb000 Level-0 table #5: 5770 bytes OK
2026/08/11-23:23:08.308647 174adb000 Delete type=0 #3
2026/08/11-23:23:08.308699 174adb000 Delete type=3 #2
2026/08/11-23:39:03.879030 16f1bb000 Delete type=3 #1
-1
View File
@@ -1 +0,0 @@
2026/08/11-23:22:30.823417 172197000 Delete type=3 #1
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More