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>
244 lines
3.9 KiB
JSON
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
|
|
}
|
|
}
|
|
}
|