Files
RingBRP/tools/lethality-baseline.json
T
slaguru666andClaude Opus 5 4b718595fe check-lethality: guard eight, and the README stops advertising a subset
Seven guards checked that content is WELL FORMED. None checked what it DOES, so a
change to a damage modifier, a hit-point formula or the armour value on a service vest
could double a creature's lethality without touching one line of that creature - and
nothing in the build would notice, because the creature did not change.

Built as a regression test rather than the hand-declared bands the creature-forge plan
described. Bands are the wrong shape here: declaring "keepers: dangerous" across
forty-six creatures means inventing forty-six judgements, and after --spread it is
clear the interesting question is not "is this dangerous" - that has no single answer -
but "is this the same as it was". A recorded baseline answers exactly that, needs no
authoring, and cannot be argued with.

Every creature is measured solo against a FROZEN party of four, two armed postings and
two trades, at a fixed seed, so the only thing that can move a number is a change to
the rules or to the creature. Tolerances are 6 points of wipe rate and 0.35 agents,
which is outside the noise floor of 200 runs - a guard that cries wolf gets deleted.

Verified by tampering: told the baseline the nuckelavee was harmless and the guard
caught it at +16.5 points and +1.67 agents down, exit 1. Runs in half a second, so it
joins the pre-build checks rather than being something to remember to run.

Also: the README's guard block was a hardcoded list of four while the suite was seven.
It had silently stopped mentioning every guard added after it was written, including
check-creatures and check-scenarios. Now all eight, and the prose says eight.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 21:20:09 +01:00

244 lines
3.9 KiB
JSON

{
"note": "Generated by tools/check-lethality.mjs --update. Do not edit by hand.",
"party": [
"pc_holloway",
"pc_okonkwo",
"pc_nkemdirim",
"pc_ferriby"
],
"runs": 200,
"seed": 11,
"creatures": {
"quiet_neighbours_npc": {
"wipe": 0,
"down": 0.01,
"rounds": 2
},
"keepers": {
"wipe": 0,
"down": 0.04,
"rounds": 2
},
"cleaner": {
"wipe": 0,
"down": 0.04,
"rounds": 2
},
"cleaner_marksman": {
"wipe": 0,
"down": 0.07,
"rounds": 2
},
"revenant": {
"wipe": 0,
"down": 0.14,
"rounds": 3
},
"duplicate": {
"wipe": 0,
"down": 0.05,
"rounds": 2
},
"barghest": {
"wipe": 0,
"down": 0.48,
"rounds": 4
},
"kelpie": {
"wipe": 0,
"down": 0.23,
"rounds": 3
},
"redcap": {
"wipe": 1,
"down": 0.34,
"rounds": 3
},
"boggart": {
"wipe": 0,
"down": 0,
"rounds": 1
},
"churchgrim": {
"wipe": 0,
"down": 0.25,
"rounds": 4
},
"hollow_man": {
"wipe": 0,
"down": 0,
"rounds": 2
},
"the_tenant": {
"wipe": 0,
"down": 0,
"rounds": 1
},
"the_choir": {
"wipe": 0,
"down": 0,
"rounds": 2
},
"precedent": {
"wipe": 0,
"down": 0.17,
"rounds": 3
},
"carrion_file": {
"wipe": 0,
"down": 0.06,
"rounds": 5
},
"the_understudy": {
"wipe": 0,
"down": 0.01,
"rounds": 2
},
"surveyor": {
"wipe": 7,
"down": 1.33,
"rounds": 11
},
"quarantine_unit": {
"wipe": 85.5,
"down": 3.69,
"rounds": 8
},
"cuckoo_array": {
"wipe": 1,
"down": 0.76,
"rounds": 8
},
"long_walker": {
"wipe": 68,
"down": 3.33,
"rounds": 15
},
"auditor": {
"wipe": 0,
"down": 0.1,
"rounds": 3
},
"washer_ford": {
"wipe": 0,
"down": 0,
"rounds": 1
},
"lantern_man": {
"wipe": 0,
"down": 0,
"rounds": 2
},
"grindylow": {
"wipe": 0,
"down": 0.15,
"rounds": 3
},
"knockers": {
"wipe": 0,
"down": 0,
"rounds": 2
},
"spriggan": {
"wipe": 0,
"down": 0.3,
"rounds": 4
},
"nuckelavee": {
"wipe": 16.5,
"down": 1.68,
"rounds": 7
},
"hedley_kow": {
"wipe": 0,
"down": 0,
"rounds": 2
},
"apple_man": {
"wipe": 2.5,
"down": 1.1,
"rounds": 12
},
"the_committee": {
"wipe": 0,
"down": 0,
"rounds": 2
},
"night_registry": {
"wipe": 0,
"down": 0.09,
"rounds": 3
},
"the_locum": {
"wipe": 0,
"down": 0.06,
"rounds": 2
},
"lost_property": {
"wipe": 1.5,
"down": 0.75,
"rounds": 8
},
"the_minutes": {
"wipe": 0,
"down": 0,
"rounds": 1
},
"waiting_room": {
"wipe": 0,
"down": 0.17,
"rounds": 6
},
"the_predecessor": {
"wipe": 0,
"down": 0.09,
"rounds": 3
},
"switchboard": {
"wipe": 0,
"down": 0,
"rounds": 4
},
"the_census": {
"wipe": 0,
"down": 0.14,
"rounds": 4
},
"the_courier": {
"wipe": 6,
"down": 1.37,
"rounds": 9
},
"the_relay": {
"wipe": 0.5,
"down": 0.69,
"rounds": 11
},
"the_stanchion": {
"wipe": 26,
"down": 2.25,
"rounds": 19
},
"the_yield": {
"wipe": 1,
"down": 0.78,
"rounds": 6
},
"the_overwriter": {
"wipe": 0,
"down": 0.17,
"rounds": 6
},
"the_arrears": {
"wipe": 7.5,
"down": 1.58,
"rounds": 10
},
"the_margin": {
"wipe": 0,
"down": 0.03,
"rounds": 3
}
}
}