Files
RingBRP/docs/VERIFY_GENERATORS.md
slaguru666andClaude Opus 5 3e915b6bfd A checklist for verifying the generators in a live world
The three sidebar buttons build actors through Actor.create, compendium reads
and a dialog, and check-behaviour says in its own header that it cannot reach
any of that. The derivations are covered by 450 forged combinations and 210
posting × tier pairs; the glue is covered by nothing, and no world was
running to exercise it.

So this is the shortest path from a launched world to knowing. Every expected
value in it was derived by running the code — drawKitFor for the kit rows,
forgeCreature at seed 7 for the forge rows — rather than written from memory.

It also says what a failure means: a wrong number points at the derivation
and should reproduce from the CLI, while a missing item or a dialog that does
not open points at the glue and will not.

One figure in the first draft — "476 guarded combinations" — was invented.
Replaced with the two the guards actually print. A verification document that
carries a made-up number is worse than none, because it is read as the
authority on what to expect.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 01:23:15 +01:00

4.3 KiB
Raw Permalink Blame History

Verifying the generators in a live world

The three Actors-sidebar buttons build actors through Actor.create, compendium reads and a dialog. tools/check-behaviour.mjs says in its own header that it cannot reach any of that, so none of it has been exercised — the derivations behind it are covered by check-forge (450 creatures derived across every role, size, tier and species) and check-generator (210 posting × tier pairs), and the Foundry glue is covered by nothing.

This is the shortest path to knowing whether it works. Every expected value below was derived by running the code, not remembered.

Before starting: the system must be redeployed and the world relaunched. Foundry builds its package list at world launch, so a world launched before the deploy is running the old code and will show none of this.


1 · New NPC · Trained · Containment

Actors sidebar → New NPC → Species baseline, Role Containment, Threat Trained, Count 1.

Expect Why
A Marksman rifle, equipped the posting's first weapon; draw.weapons is 1 at this tier
Firearm (rifle) at 30–45% the rifle names its own skill, granted at the tier band
A Breaching suit, equipped draw.armour is 1
3 gear items, drawn at random from the posting's nine draw.gear is 3
Natural armour 0 the number used to stand in for armour; the suit is a real item now
62 skills on the sheet, untrained ones at their printed base every other actor in the game has them
A chat card naming the rifle and armour 7 — Breaching suit 7 the card printed neither before

The one that matters: before this work the actor got a utility knife while the dialog's role card promised nine items. If you see a knife, the deploy did not take.

2 · New NPC · Apex · Containment — the balance case

Same dialog, Threat Apex.

Expect Why
Marksman rifle and Entry bar draw.weapons is 2, taken in the order the posting lists them
Breaching suit and Riot shield draw.armour is 2
Grasping limb and Unmaker as well creature tiers keep their natural attacks on top of what they drew
Natural armour 7, and the card reading armour 17 hide 7 + suit 7 + shield 3, which stack per location
Skills at 65–85% the tier band

Read the number before using one at a table. Measured against the four agents check-lethality freezes, this wipes the party 88.5% of the time, up from 68.2%. An Anomalous Containment officer went from 0.3% to 19.2%. R-310 has the table and the reason.

3 · Forge creature — the new button

Actors sidebar → Forge creature → role Brute, size Large, tier Apex, Seed 7.

Expect Why
The card describes it before you press Forge it forges a throwaway at those settings rather than describing one
Body quadruped, though species is baseline a brute is an animal; the role picks the body
Horn / tusk and Trample what a quadruped can do, in the role's preference order
SIZ 17, STR 21, hide 7 seed 7 exactly — a different seed gives a different animal
Token 2×2 on the map SIZ ≥ 21 is 2 squares, ≥ 30 is 3
The line under the tier: "kills about one agent…" measured, not an adjective

Then node tools/forge.mjs explain --role brute --size large --tier 4 --seed 7 should name the rule behind every one of those numbers, and match what the sheet shows. If the sheet and the CLI disagree, that is the failure this design exists to prevent — say so rather than picking one.

4 · Count 4

Any of the three, Count 4. Four different actors, not four copies: gear is drawn at random per actor and the forge walks its seed. Four identical sheets means the randomness is resolved once and reused, which is a defect this generator has had before.


What a failure here means

The derivations are guarded and measured; what is unproven is Actor.create, the pack reads and the dialog wiring. So a wrong number points at the derivation and should be reproducible from the CLI, while a missing item, an empty sheet or a dialog that does not open points at the glue and will not be.

Private convention play materials — not for sale or distribution.