/** * CLEAN GROUND names an agent who cannot fight, and that sentence must keep being true. * * The scaling note prints "the four-player cut is three effective attackers, not four. * Ashcroft is not one." Give him a sidearm, or change what the column dodges at, and the * warning is false while the page goes on printing it — a claim nothing checks, which is * the defect this suite exists for and the one R-267 was caught committing inside a guard. * * Thin on purpose: the measurement lives in effective-attackers.mjs, which is also the * tool a reader runs, so the guard and the reading cannot drift apart. */ import { spawnSync } from "node:child_process"; const r = spawnSync(process.execPath, [new URL("effective-attackers.mjs", import.meta.url).pathname, "--check"], { encoding: "utf8" }); if (r.status !== 0) { process.stdout.write(r.stdout ?? ""); process.stderr.write(r.stderr ?? ""); console.error("check-attackers: FAILED — the four-player cut no longer fights the way CLEAN GROUND " + "says it does. Read `node tools/effective-attackers.mjs` before re-recording."); process.exit(1); } // update-readme reads the line beginning with this file's own name. const m = r.stdout.match(/three of the cut disable on ([\d.]+)% of their attacks or better, and Ashcroft on ([\d.]+)%/) ?? []; console.log(`check-attackers: OK — three of the four-player cut disable on ${m[1] ?? "?"}% of their attacks ` + `or better, and one of them on ${m[2] ?? "?"}%`);