@alpaca-software/40kdc-data 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gen-conformance.js +63 -0
- package/dist/gen-conformance.js.map +1 -1
- package/dist/translate/condition.d.ts.map +1 -1
- package/dist/translate/condition.js +13 -6
- package/dist/translate/condition.js.map +1 -1
- package/dist/translate/effect.d.ts.map +1 -1
- package/dist/translate/effect.js +36 -13
- package/dist/translate/effect.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen-conformance.js","sourceRoot":"","sources":["../src/gen-conformance.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Generate the cross-implementation conformance corpus under repo-root\n * `conformance/`. The TypeScript package is the reference implementation, so\n * the goldens it emits are what the Rust crate must reproduce byte-for-byte\n * (structurally). Run via `npm run gen:conformance`; CI regenerates and asserts\n * `git diff --exit-code conformance/` is clean.\n *\n * Outputs:\n * - `conformance/normalize.json` — `[{ input, expected }]` for normalizeName.\n * - `conformance/roster/<case>/expected.roster.json` — the resolved Roster.\n * - `conformance/roster/<case>/expected.<fmt>.{txt,json}` — every export\n * target's golden output. The TS exporter is the oracle; the Rust mirror\n * asserts byte-equal output for the same Roster.\n * - `conformance/roster/<case>/input.newrecruit-{wtc-compact,wtc-full,simple}.txt`\n * — text inputs derived from the seed by the exporter, so a re-import\n * regression in either implementation surfaces immediately.\n *\n * Seeding: each `<case>/` carries one canonical input — either the legacy\n * `input.json` (ListForge) or `input.newrecruit-json.json` (NewRecruit). Other\n * inputs are derived.\n */\nimport { readdirSync, readFileSync, writeFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Dataset } from \"./data/dataset.js\";\nimport { baseLoadout } from \"./data/loadout.js\";\nimport { normalizeName } from \"./data/normalize.js\";\nimport { describeScoringCard, describeAbility, type Effect, type AbilityUsage, type AbilityTrigger } from \"./translate/index.js\";\nimport type { GameEvent } from \"./generated.js\";\nimport { awardsOf } from \"./scoring/index.js\";\nimport { createRunnerState, dispatch } from \"./runner.js\";\nimport { exportRoster, type ExportFormat } from \"./export/index.js\";\nimport {\n decodeShareToken,\n encodeShareToken,\n shareRegistryVersion,\n type ShareList,\n} from \"./share/index.js\";\nimport { importRoster, REGISTERED_ADAPTERS } from \"./import/import-roster.js\";\nimport { selectAdapter } from \"./import/adapter.js\";\nimport type { ParsedRoster, Roster } from \"./import/types.js\";\nimport { encodeBase } from \"./runner.js\";\nimport { attributeStages } from \"./cruncher/attribution.js\";\nimport type { EngineInput } from \"./cruncher/index.js\";\nimport {\n resolveLayout,\n type TerrainTemplate as ResolverTemplate,\n type TerrainLayout as ResolverLayout,\n} from \"./terrain/resolve.js\";\nimport { keystoneMeasurements, BOARD_INCHES } from \"./terrain/keystones.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst REPO_ROOT = join(__dirname, \"../..\");\nconst CONFORMANCE = join(REPO_ROOT, \"conformance\");\n\nconst NORMALIZE_INPUTS = [\n // NFD diacritic strip\n \"Khârn the Betrayer\",\n \"Brôkhyr\",\n \"Ûthar\",\n \"Magnús\",\n // apostrophe / quote variants\n \"T'au\",\n \"Be’lakor\",\n \"Kor’sarro Khan\",\n \"Aetaos'rau'keres\",\n \"‘quoted’\",\n // whitespace / hyphen collapse + trim\n \"Brôkhyr Iron-master\",\n \" the betrayer \",\n \"space--marines\",\n // casefold\n \"KHÂRN THE BETRAYER\",\n // already-normalized (idempotence)\n \"kharn the betrayer\",\n // distinctness anchors (must NOT collapse together)\n \"Khorne\",\n \"Khârn\",\n // Unicode whitespace beyond ASCII — every Unicode whitespace must collapse\n // identically across implementations or `find(\"Khorne Lord\")` and\n // `find(\"Khorne Lord\")` will silently disagree across ports.\n \"Khorne Lord\",\n \"Khorne Lord\",\n // Turkish dotted-I: NFD decomposes to `I` + combining dot above; the dot is\n // stripped, then locale-independent lowercase yields `i`. The case pins that\n // no implementation introduces locale-aware casefolding (which would map\n // `I` → `ı` under Turkish locale and break ASCII-text search).\n \"İmperial Fists\",\n // Zero-width joiner: passes through every step today. Pinned so behavior\n // does not silently change — if a future commit strips Cf-category chars,\n // this golden updates in the same PR.\n \"KhorneLord\",\n];\n\nfunction writeJson(path: string, value: unknown): void {\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\nfunction writeText(path: string, value: string): void {\n writeFileSync(path, value);\n}\n\nfunction genNormalize(): void {\n const table = NORMALIZE_INPUTS.map((input) => ({ input, expected: normalizeName(input) }));\n writeJson(join(CONFORMANCE, \"normalize.json\"), table);\n console.log(`normalize.json: ${table.length} cases`);\n}\n\n/** Locate the canonical input for a fixture dir: prefer `input.json` (legacy\n * ListForge), then `input.newrecruit-json.json` (NewRecruit), then the\n * text-only `input.gw.txt` / `input.listforge-text.txt` (app text exports —\n * import-only, like ListForge). */\nfunction seedRoster(caseDir: string, ds: Dataset): Roster {\n const decoded = decodeCanonicalSeed(caseDir);\n return importRoster(decoded, { dataset: ds });\n}\n\n/** Return the decoded payload for the canonical seed — the same value the\n * import pipeline would dispatch on. JSON seeds come back parsed; text seeds\n * come back as the raw string. */\nfunction decodeCanonicalSeed(caseDir: string): unknown {\n const jsonSeed = join(caseDir, \"input.json\");\n if (existsSync(jsonSeed)) {\n return JSON.parse(readFileSync(jsonSeed, \"utf8\"));\n }\n const nrSeed = join(caseDir, \"input.newrecruit-json.json\");\n if (existsSync(nrSeed)) {\n return JSON.parse(readFileSync(nrSeed, \"utf8\"));\n }\n const gwSeed = join(caseDir, \"input.gw.txt\");\n if (existsSync(gwSeed)) {\n return readFileSync(gwSeed, \"utf8\");\n }\n const lfTextSeed = join(caseDir, \"input.listforge-text.txt\");\n if (existsSync(lfTextSeed)) {\n return readFileSync(lfTextSeed, \"utf8\");\n }\n // A hand-authored WTC-full seed — used for cases exercising WTC-only header\n // features (e.g. `+ FORCE DISPOSITION:`). Import-only, like the other text\n // seeds: the non-WTC formats can't carry the disposition, so their derived\n // round-trip inputs would diverge structurally. Checked after the\n // NewRecruit-JSON seed above, so it never shadows a NewRecruit-seeded case's\n // DERIVED `input.newrecruit-wtc-full.txt`.\n const wtcFullSeed = join(caseDir, \"input.newrecruit-wtc-full.txt\");\n if (existsSync(wtcFullSeed)) {\n return readFileSync(wtcFullSeed, \"utf8\");\n }\n // A hand-authored canonical Roster (roster-json) — the lossless carrier used\n // for cases that no upstream format can yet express, e.g. multi-detachment\n // 11e lists. Like the legacy seeds it is import-only (no derived round-trip\n // inputs are generated), since the text/header exporters print every\n // detachment but their importers read only one.\n const rosterJsonSeed = join(caseDir, \"input.roster-json.json\");\n if (existsSync(rosterJsonSeed)) {\n return JSON.parse(readFileSync(rosterJsonSeed, \"utf8\"));\n }\n throw new Error(`no canonical input found in ${caseDir}`);\n}\n\n/** Run a decoded payload through the adapter pipeline up to (but not past)\n * resolution. The result is the format-agnostic ParsedRoster — the same\n * intermediate the resolver consumes. Pinning this layer surfaces parser\n * regressions even when resolution masks them. */\nfunction parsedFromCanonicalSeed(caseDir: string): ParsedRoster {\n const decoded = decodeCanonicalSeed(caseDir);\n const adapter = selectAdapter(decoded, [...REGISTERED_ADAPTERS]);\n return adapter.parse(decoded);\n}\n\nconst TEXT_FORMATS: { format: ExportFormat; inputName: string; goldenName: string }[] = [\n {\n format: \"newrecruit-wtc-compact\",\n inputName: \"input.newrecruit-wtc-compact.txt\",\n goldenName: \"expected.newrecruit-wtc-compact.txt\",\n },\n {\n format: \"newrecruit-wtc-full\",\n inputName: \"input.newrecruit-wtc-full.txt\",\n goldenName: \"expected.newrecruit-wtc-full.txt\",\n },\n {\n format: \"newrecruit-simple\",\n inputName: \"input.newrecruit-simple.txt\",\n goldenName: \"expected.newrecruit-simple.txt\",\n },\n];\n\n// Export-only text formats — no importer exists, so they get an `expected.*.txt`\n// byte-equality golden but never a derived `input.*.txt` round-trip seed.\nconst EXPORT_ONLY_TEXT_FORMATS: { format: ExportFormat; goldenName: string }[] = [\n { format: \"atc-2026-compact\", goldenName: \"expected.atc-2026-compact.txt\" },\n { format: \"atc-2026-full\", goldenName: \"expected.atc-2026-full.txt\" },\n];\n\n// Export-only *Dataset-backed* formats — no importer, and the serializer reads\n// the dataset (not just the Roster), so the golden is generated with `ds`\n// passed through `exportRoster`. Byte-parity holds across ports because every\n// port embeds the same dataset.\nconst EXPORT_ONLY_DATASET_FORMATS: { format: ExportFormat; goldenName: string }[] = [\n { format: \"yellowscribe\", goldenName: \"expected.yellowscribe.ros\" },\n];\n\nfunction genRosters(): void {\n const ds = Dataset.embedded();\n const rosterDir = join(CONFORMANCE, \"roster\");\n for (const entry of readdirSync(rosterDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const caseDir = join(rosterDir, entry.name);\n\n const seed = seedRoster(caseDir, ds);\n writeJson(join(caseDir, \"expected.roster.json\"), seed);\n\n // Parsed-stage golden — the intermediate ParsedRoster produced by the\n // adapter for the canonical seed, before resolution. Catches parser bugs\n // that resolution would otherwise mask (e.g. wrong unit count from a\n // duplicate cost line that resolves to the same unit twice).\n writeJson(join(caseDir, \"expected.parsed.json\"), parsedFromCanonicalSeed(caseDir));\n\n // JSON export golden — NewRecruit-shaped skeleton.\n const jsonOut = exportRoster(seed, \"newrecruit-json\");\n writeJson(join(caseDir, \"expected.newrecruit-json.json\"), JSON.parse(jsonOut));\n\n // Canonical Roster JSON export — should equal the resolved roster.\n writeJson(join(caseDir, \"expected.roster-json.json\"), JSON.parse(exportRoster(seed, \"roster-json\")));\n\n // Text exports: always write the export golden so every fixture exercises\n // the cross-implementation byte-equality check. Only write the\n // `input.*.txt` round-trip seed when the fixture was authored for the\n // NewRecruit pipeline — legacy ListForge fixtures carry decoration\n // (multi-force warnings, leader-attachment inference) that the simple/wtc\n // exporters can't fully preserve, so the round-trip would fail\n // structurally rather than uncover a parser bug.\n const isNewRecruitSeed = existsSync(join(caseDir, \"input.newrecruit-json.json\"));\n // The header text formats (wtc-compact/full, simple) print every detachment\n // but their parsers read only one, so a multi-detachment roster can't\n // round-trip through them — emit the export golden but not the derived\n // round-trip input (the same reasoning as the legacy-ListForge skip).\n const textRoundTrippable = isNewRecruitSeed && seed.detachments.length <= 1;\n for (const { format, inputName, goldenName } of TEXT_FORMATS) {\n const out = exportRoster(seed, format);\n writeText(join(caseDir, goldenName), out);\n if (textRoundTrippable) {\n writeText(join(caseDir, inputName), out);\n }\n }\n\n // Export-only text formats (ATC 2026) — golden only, never a round-trip input.\n for (const { format, goldenName } of EXPORT_ONLY_TEXT_FORMATS) {\n writeText(join(caseDir, goldenName), exportRoster(seed, format));\n }\n\n // Export-only Dataset-backed formats (Yellowscribe `.ros`) — golden only.\n // Pass the dataset so the serializer can resolve stat lines / weapons /\n // abilities; there's no importer, so no round-trip input.\n for (const { format, goldenName } of EXPORT_ONLY_DATASET_FORMATS) {\n writeText(join(caseDir, goldenName), exportRoster(seed, format, ds));\n }\n\n // Rosterizer JSON export + a derived round-trip input. The exporter is\n // deterministic and round-trips through the adapter, so emitting it as\n // both `expected.rosterizer.json` and `input.rosterizer.json` pins the\n // cross-implementation goldens and the importer regression at the same\n // time. Same NewRecruit-seed gate as the text formats — multi-force\n // ListForge fixtures lose their provisional leader-attachment under\n // round-trip, so they only get the export golden, not the derived input.\n const rosterizerOut = exportRoster(seed, \"rosterizer\");\n writeJson(join(caseDir, \"expected.rosterizer.json\"), JSON.parse(rosterizerOut));\n if (isNewRecruitSeed) {\n writeJson(join(caseDir, \"input.rosterizer.json\"), JSON.parse(rosterizerOut));\n }\n\n console.log(\n `roster/${entry.name}: ${seed.units.length} units, ${seed.diagnostics.warnings.length} warnings`,\n );\n }\n}\n\n/**\n * Linked-API query cases. Each descriptor names a query method on Dataset, the\n * args to call it with, and how the result should be compared.\n *\n * `comparison: \"ordered\"` pins the result order — used for queries that iterate\n * a data-driven array (`unit.ability_ids`, `unit.weapon_ids`) where order is\n * encoded in the data and both implementations iterate it the same way.\n *\n * `comparison: \"set\"` pins only the set of ids — used for queries that walk an\n * index (faction → abilities, ability → phases) where iteration order depends\n * on dataset bundler internals and is incidental. Ids are sorted before\n * comparison.\n *\n * `comparison: \"scalar\"` pins a single id-or-null result (find_* and\n * faction_of(unit)).\n */\ntype LinkedApiQuery =\n | { name: string; query: \"find_unit\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"find_weapon\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"find_faction\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"find_ability\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"abilities_of\"; args: { unitId: string }; comparison: \"ordered\" }\n | { name: string; query: \"weapons_of\"; args: { unitId: string }; comparison: \"ordered\" }\n | { name: string; query: \"phases_of\"; args: { abilityId: string }; comparison: \"set\" }\n | { name: string; query: \"faction_of\"; args: { unitId: string }; comparison: \"scalar\" }\n | { name: string; query: \"abilities_of_faction\"; args: { factionId: string }; comparison: \"set\" }\n | { name: string; query: \"weapons_of_faction\"; args: { factionId: string }; comparison: \"set\" }\n | { name: string; query: \"logo_url_of_faction\"; args: { factionId: string }; comparison: \"scalar\" }\n | { name: string; query: \"base_size_of\"; args: { unitId: string }; comparison: \"scalar\" }\n | { name: string; query: \"model_bases_of\"; args: { unitId: string }; comparison: \"ordered\" }\n | { name: string; query: \"base_loadout\"; args: { unitId: string; modelCount: string }; comparison: \"set\" }\n | { name: string; query: \"units_with_keyword\"; args: { keyword: string }; comparison: \"set\" }\n | {\n name: string;\n query: \"allies_for\";\n args: { factionId: string; detachmentIds?: string[] };\n comparison: \"ordered\";\n }\n | { name: string; query: \"ally_units_for\"; args: { ruleId: string }; comparison: \"set\" }\n | { name: string; query: \"leaders_attachable_to\"; args: { bodyguardId: string }; comparison: \"set\" }\n | { name: string; query: \"bodyguards_attachable_from\"; args: { leaderId: string }; comparison: \"set\" }\n | { name: string; query: \"reactive_trigger_ability_ids\"; args: Record<string, never>; comparison: \"ordered\" }\n | { name: string; query: \"events_with_triggers\"; args: Record<string, never>; comparison: \"ordered\" }\n | { name: string; query: \"triggers_for_event\"; args: { event: string }; comparison: \"ordered\" }\n | { name: string; query: \"get_enhancement\"; args: { id: string }; comparison: \"scalar\" };\n\nconst LINKED_API_QUERIES: LinkedApiQuery[] = [\n // find_unit: diacritic-insensitive lookup, miss returns null.\n { name: \"find_unit by diacritic name\", query: \"find_unit\", args: { query: \"Kharn\" }, comparison: \"scalar\" },\n { name: \"find_unit miss returns null\", query: \"find_unit\", args: { query: \"not-a-real-unit-xyz\" }, comparison: \"scalar\" },\n // find_weapon: hyphen + space tolerance.\n { name: \"find_weapon by name\", query: \"find_weapon\", args: { query: \"bolt rifle\" }, comparison: \"scalar\" },\n // find_faction: punctuation/diacritic tolerance.\n { name: \"find_faction by display name\", query: \"find_faction\", args: { query: \"World Eaters\" }, comparison: \"scalar\" },\n // find_ability: ability name lookup.\n { name: \"find_ability by name\", query: \"find_ability\", args: { query: \"Berzerker Frenzy\" }, comparison: \"scalar\" },\n // get_enhancement: exact id, a since-renamed id resolved via the share-registry\n // alias map (old id → current id), and a miss. Pins renamed-id resolution so a\n // persisted roster/share link authored before an enhancement id was normalized\n // to the RAW GW form still resolves to the current record.\n { name: \"get_enhancement direct hit\", query: \"get_enhancement\", args: { id: \"a-chink-in-their-armour-host-of-ascension\" }, comparison: \"scalar\" },\n { name: \"get_enhancement resolves a renamed id via alias\", query: \"get_enhancement\", args: { id: \"a-chink-in-their-armour\" }, comparison: \"scalar\" },\n { name: \"get_enhancement miss returns null\", query: \"get_enhancement\", args: { id: \"not-a-real-enhancement-xyz\" }, comparison: \"scalar\" },\n // abilities_of(unit): ordered, iterates unit.ability_ids array.\n { name: \"abilities_of intercessor-squad\", query: \"abilities_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"ordered\" },\n { name: \"abilities_of kharn-the-betrayer\", query: \"abilities_of\", args: { unitId: \"kharn-the-betrayer\" }, comparison: \"ordered\" },\n // weapons_of(unit): ordered, iterates unit.weapon_ids array.\n { name: \"weapons_of intercessor-squad\", query: \"weapons_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"ordered\" },\n { name: \"weapons_of kharn-the-betrayer\", query: \"weapons_of\", args: { unitId: \"kharn-the-betrayer\" }, comparison: \"ordered\" },\n // phases_of(ability): compared as set (phase index iteration order is incidental).\n { name: \"phases_of berzerker-frenzy\", query: \"phases_of\", args: { abilityId: \"berzerker-frenzy\" }, comparison: \"set\" },\n // faction_of(unit): scalar id or null.\n { name: \"faction_of intercessor-squad\", query: \"faction_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"scalar\" },\n // abilities_of_faction: compared as set (collection-index order is incidental).\n { name: \"abilities_of_faction world-eaters\", query: \"abilities_of_faction\", args: { factionId: \"world-eaters\" }, comparison: \"set\" },\n // weapons_of_faction: compared as set.\n { name: \"weapons_of_faction world-eaters\", query: \"weapons_of_faction\", args: { factionId: \"world-eaters\" }, comparison: \"set\" },\n // logo_url_of_faction: scalar logo URL string, or null if unset.\n { name: \"logo_url_of_faction adepta-sororitas\", query: \"logo_url_of_faction\", args: { factionId: \"adepta-sororitas\" }, comparison: \"scalar\" },\n // base_size_of(unit): scalar encoded base — round, oval, and a draft flying-base.\n { name: \"base_size_of intercessor-squad\", query: \"base_size_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"scalar\" },\n { name: \"base_size_of vertus-praetors\", query: \"base_size_of\", args: { unitId: \"vertus-praetors\" }, comparison: \"scalar\" },\n { name: \"base_size_of windriders (draft flying base)\", query: \"base_size_of\", args: { unitId: \"windriders\" }, comparison: \"scalar\" },\n // model_bases_of(unit): ordered per-model bases; jakhals mixes 28.5mm bodies with a 40mm Dishonoured.\n { name: \"model_bases_of jakhals (mixed)\", query: \"model_bases_of\", args: { unitId: \"jakhals\" }, comparison: \"ordered\" },\n // units_with_keyword: case-insensitive over keywords ∪ faction_keywords; compared as set.\n { name: \"units_with_keyword Khorne\", query: \"units_with_keyword\", args: { keyword: \"Khorne\" }, comparison: \"set\" },\n { name: \"units_with_keyword damned (lowercase)\", query: \"units_with_keyword\", args: { keyword: \"damned\" }, comparison: \"set\" },\n // allies_for: two-gate offer; ordered (allied-rules data-file order, locale-independent).\n { name: \"allies_for chaos-knights (no detachment)\", query: \"allies_for\", args: { factionId: \"chaos-knights\" }, comparison: \"ordered\" },\n { name: \"allies_for chaos-knights with iconoclast-fiefdom\", query: \"allies_for\", args: { factionId: \"chaos-knights\", detachmentIds: [\"iconoclast-fiefdom\"] }, comparison: \"ordered\" },\n { name: \"allies_for world-eaters (no detachment → chaos-knights-allies)\", query: \"allies_for\", args: { factionId: \"world-eaters\" }, comparison: \"ordered\" },\n { name: \"allies_for world-eaters with khorne-daemonkin\", query: \"allies_for\", args: { factionId: \"world-eaters\", detachmentIds: [\"khorne-daemonkin\"] }, comparison: \"ordered\" },\n { name: \"allies_for imperial-knights (no detachment)\", query: \"allies_for\", args: { factionId: \"imperial-knights\" }, comparison: \"ordered\" },\n { name: \"allies_for imperial-knights with questor-forgepact\", query: \"allies_for\", args: { factionId: \"imperial-knights\", detachmentIds: [\"questor-forgepact\"] }, comparison: \"ordered\" },\n { name: \"allies_for genestealer-cults with final-day\", query: \"allies_for\", args: { factionId: \"genestealer-cults\", detachmentIds: [\"final-day\"] }, comparison: \"ordered\" },\n // Cross-namespace host gates: Aeldari armies carry the Asuryani faction keyword, Chaos Daemons the Legiones Daemonica one.\n { name: \"allies_for aeldari (no detachment → harlequins)\", query: \"allies_for\", args: { factionId: \"aeldari\" }, comparison: \"ordered\" },\n { name: \"allies_for aeldari with devoted-of-ynnead\", query: \"allies_for\", args: { factionId: \"aeldari\", detachmentIds: [\"devoted-of-ynnead\"] }, comparison: \"ordered\" },\n { name: \"allies_for chaos-daemons with shadow-legion\", query: \"allies_for\", args: { factionId: \"chaos-daemons\", detachmentIds: [\"shadow-legion\"] }, comparison: \"ordered\" },\n // ally_units_for: resolved pool; compared as set (accessor sorts by name, locale-dependent).\n { name: \"ally_units_for iconoclast-fiefdom-damned\", query: \"ally_units_for\", args: { ruleId: \"iconoclast-fiefdom-damned\" }, comparison: \"set\" },\n { name: \"ally_units_for world-eaters-khorne-daemons\", query: \"ally_units_for\", args: { ruleId: \"world-eaters-khorne-daemons\" }, comparison: \"set\" },\n { name: \"ally_units_for star-childrens-blessings (Vanguard Invader allowlist)\", query: \"ally_units_for\", args: { ruleId: \"star-childrens-blessings\" }, comparison: \"set\" },\n { name: \"ally_units_for imperial-knights-questor-forgepact (5 AdMech datasheets)\", query: \"ally_units_for\", args: { ruleId: \"imperial-knights-questor-forgepact\" }, comparison: \"set\" },\n { name: \"ally_units_for agents-of-the-imperium-allies (29 datasheets)\", query: \"ally_units_for\", args: { ruleId: \"agents-of-the-imperium-allies\" }, comparison: \"set\" },\n { name: \"ally_units_for chaos-knights-allies (20 datasheets)\", query: \"ally_units_for\", args: { ruleId: \"chaos-knights-allies\" }, comparison: \"set\" },\n // leader attachment (both directions); compared as set (accessors sort by name).\n // inquisitor-draxus mixes explicit eligible_bodyguard_ids with keyword eligibility\n // (Imperium ∧ Battleline ∧ Infantry), so the expected pool is her 6 Agents units\n // plus every Imperium Battleline Infantry datasheet. kharn-the-betrayer has no\n // keyword rule (id-list only) — the baseline that keyword logic must not perturb.\n { name: \"bodyguards_attachable_from inquisitor-draxus (id-list + Imperium Battleline Infantry keywords)\", query: \"bodyguards_attachable_from\", args: { leaderId: \"inquisitor-draxus\" }, comparison: \"set\" },\n { name: \"bodyguards_attachable_from kharn-the-betrayer (id-list only)\", query: \"bodyguards_attachable_from\", args: { leaderId: \"kharn-the-betrayer\" }, comparison: \"set\" },\n { name: \"leaders_attachable_to cadian-shock-troops (Battleline → includes inquisitor-draxus)\", query: \"leaders_attachable_to\", args: { bodyguardId: \"cadian-shock-troops\" }, comparison: \"set\" },\n { name: \"leaders_attachable_to kasrkin (not Battleline → excludes inquisitor-draxus)\", query: \"leaders_attachable_to\", args: { bodyguardId: \"kasrkin\" }, comparison: \"set\" },\n // base_loadout(unit, modelCount): the pinned legal default loadout, encoded as a\n // sorted \"weaponId:count\" multiset. chaos-terminators is a uniform squad (per-model\n // scaling); crusader-squad exercises leader+bulk per-figure allocation.\n { name: \"base_loadout chaos-terminators @5 (legal default, no swaps)\", query: \"base_loadout\", args: { unitId: \"chaos-terminators\", modelCount: \"5\" }, comparison: \"set\" },\n { name: \"base_loadout chaos-terminators @10 scales per model\", query: \"base_loadout\", args: { unitId: \"chaos-terminators\", modelCount: \"10\" }, comparison: \"set\" },\n { name: \"base_loadout crusader-squad @10 exercises leader+bulk allocation\", query: \"base_loadout\", args: { unitId: \"crusader-squad\", modelCount: \"10\" }, comparison: \"set\" },\n // reactive triggers: reactiveTriggers() sorts by ability id; triggerIndex() keys are\n // event-sorted and each bucket ability-id-sorted, so all three are order-pinned.\n { name: \"reactive_trigger_ability_ids (all triggered abilities)\", query: \"reactive_trigger_ability_ids\", args: {}, comparison: \"ordered\" },\n { name: \"events_with_triggers (index keys)\", query: \"events_with_triggers\", args: {}, comparison: \"ordered\" },\n { name: \"triggers_for_event start-of-phase\", query: \"triggers_for_event\", args: { event: \"start-of-phase\" }, comparison: \"ordered\" },\n { name: \"triggers_for_event on-unit-selected\", query: \"triggers_for_event\", args: { event: \"on-unit-selected\" }, comparison: \"ordered\" },\n];\n\nfunction genLinkedApi(): void {\n const ds = Dataset.embedded();\n const cases = LINKED_API_QUERIES.map((q) => {\n const expected = runLinkedQuery(ds, q);\n return { ...q, expected };\n });\n writeJson(join(CONFORMANCE, \"linked-api\", \"cases.json\"), cases);\n console.log(`linked-api/cases.json: ${cases.length} cases`);\n}\n\nfunction runLinkedQuery(ds: Dataset, q: LinkedApiQuery): string | null | string[] {\n switch (q.query) {\n case \"find_unit\":\n return ds.units.find(q.args.query)?.id ?? null;\n case \"find_weapon\":\n return ds.weapons.find(q.args.query)?.id ?? null;\n case \"find_faction\":\n return ds.factions.find(q.args.query)?.id ?? null;\n case \"find_ability\":\n return ds.abilities.find(q.args.query)?.id ?? null;\n case \"get_enhancement\":\n return ds.enhancements.get(q.args.id)?.id ?? null;\n case \"abilities_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`abilities_of: unknown unit ${q.args.unitId}`);\n return u.abilities.map((a) => a.id);\n }\n case \"weapons_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`weapons_of: unknown unit ${q.args.unitId}`);\n return u.weapons.map((w) => w.id);\n }\n case \"phases_of\": {\n const a = ds.abilities.getAny(q.args.abilityId);\n if (!a) throw new Error(`phases_of: unknown ability ${q.args.abilityId}`);\n return [...a.phases].sort();\n }\n case \"faction_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`faction_of: unknown unit ${q.args.unitId}`);\n return u.faction?.id ?? null;\n }\n case \"abilities_of_faction\":\n return ds.abilities.byFaction(q.args.factionId).map((a) => a.id).sort();\n case \"weapons_of_faction\": {\n // Mirrors Rust `weapons_of_faction`: aggregate weapons across the\n // faction's units and dedupe by id. The collection-level\n // `weapons.byFaction()` is a different operation (it looks up weapons\n // whose own `faction_id` is set, which is empty for most factions).\n const f = ds.factions.get(q.args.factionId);\n if (!f) throw new Error(`weapons_of_faction: unknown faction ${q.args.factionId}`);\n return f.weapons.map((w) => w.id).sort();\n }\n case \"logo_url_of_faction\": {\n const f = ds.factions.get(q.args.factionId);\n if (!f) throw new Error(`logo_url_of_faction: unknown faction ${q.args.factionId}`);\n return f.logoUrl ?? null;\n }\n case \"base_size_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`base_size_of: unknown unit ${q.args.unitId}`);\n return encodeBase(u.raw.base_size_mm);\n }\n case \"model_bases_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`model_bases_of: unknown unit ${q.args.unitId}`);\n const comp = ds.unitCompositions.find((c) => c.unit_id === q.args.unitId);\n return (comp?.models ?? []).map((m) => `${m.name}=${encodeBase(m.base_size_mm) ?? \"none\"}`);\n }\n case \"base_loadout\": {\n // Mirrors the runner's base_loadout op: the legal default loadout encoded as\n // a sorted \"id:count\" multiset (set-compared).\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`base_loadout: unknown unit ${q.args.unitId}`);\n const comp = ds.unitCompositions.find((c) => c.unit_id === q.args.unitId);\n const lo = baseLoadout(u.raw, Number(q.args.modelCount), ds.wargearOptionsOf(u.raw), comp?.models);\n return [...lo.counts].map(([id, n]) => `${id}:${n}`).sort();\n }\n case \"units_with_keyword\":\n return ds.unitsWithKeyword(q.args.keyword).map((u) => u.id).sort();\n case \"allies_for\":\n // Ordered: allied-rules data-file order (deterministic across impls).\n return ds.alliesFor(q.args.factionId, q.args.detachmentIds ?? []).map((r) => r.id);\n case \"ally_units_for\":\n return ds.allyUnitsFor(q.args.ruleId).map((u) => u.id).sort();\n case \"leaders_attachable_to\":\n return ds.leadersAttachableTo(q.args.bodyguardId).map((u) => u.id).sort();\n case \"bodyguards_attachable_from\":\n return ds.bodyguardsAttachableFrom(q.args.leaderId).map((u) => u.id).sort();\n case \"reactive_trigger_ability_ids\":\n return ds.reactiveTriggers().map((rt) => rt.abilityId);\n case \"events_with_triggers\":\n return [...ds.triggerIndex().keys()];\n case \"triggers_for_event\":\n return (ds.triggerIndex().get(q.args.event as GameEvent) ?? []).map((rt) => rt.abilityId);\n }\n}\n\n/**\n * Attribution corpus: reuses the existing cruncher inputs from the cases that\n * carry at least one groupable buff (ability or manual). The expected shape\n * is the AttributedStage array produced by attributeStages; both\n * implementations of the leave-one-out decomposition must reproduce it\n * within the per-stage float tolerance.\n */\nconst ATTRIBUTION_CASE_FILES = [\n \"05-anti-infantry-vs-cultist.json\",\n \"07-twin-linked-heavy-stationary-vs-knight.json\",\n];\n\ninterface CruncherCaseInput {\n name: string;\n attacker: { weaponId: string; profileIndex: number };\n modelsFiring: number;\n target: { unitId: string; profileIndex: number; modelCount?: number };\n context: EngineInput[\"context\"];\n buffs: EngineInput[\"buffs\"];\n}\n\nfunction loadAttributionInput(ds: Dataset, filename: string): {\n name: string;\n input: EngineInput;\n} {\n const path = join(CONFORMANCE, \"cruncher\", filename);\n const c = JSON.parse(readFileSync(path, \"utf8\")) as CruncherCaseInput;\n const weapon = ds.weapons.getAny(c.attacker.weaponId);\n const unit = ds.units.getAny(c.target.unitId);\n if (!weapon) throw new Error(`attribution: unknown weapon ${c.attacker.weaponId}`);\n if (!unit) throw new Error(`attribution: unknown unit ${c.target.unitId}`);\n return {\n name: c.name,\n input: {\n attacker: { weapon: weapon.raw, profileIndex: c.attacker.profileIndex },\n target: {\n unit: unit.raw,\n profileIndex: c.target.profileIndex,\n ...(c.target.modelCount !== undefined ? { modelCount: c.target.modelCount } : {}),\n },\n modelsFiring: c.modelsFiring,\n buffs: c.buffs,\n context: c.context,\n },\n };\n}\n\nfunction genAttribution(): void {\n const ds = Dataset.embedded();\n const cases = ATTRIBUTION_CASE_FILES.map((filename, idx) => {\n const { name, input } = loadAttributionInput(ds, filename);\n const stages = attributeStages(input, ds);\n return {\n // Persist the input by file reference so the corpus stays a single\n // source of truth — the cruncher case file already pins the EngineInput.\n name,\n cruncher_case: filename,\n expected: stages.map((s) => ({\n name: s.name,\n expected: s.expected,\n baseline: s.baseline,\n lifts: s.lifts.map((l) => ({ source: l.source, delta: l.delta })),\n residual: s.residual,\n intrinsics: s.intrinsics,\n })),\n // Stable ordering of cases in the corpus file.\n _order: idx,\n };\n });\n // Sort by _order and strip the helper before writing.\n cases.sort((a, b) => a._order - b._order);\n const serialised = cases.map(({ _order: _o, ...rest }) => rest);\n writeJson(join(CONFORMANCE, \"attribution\", \"cases.json\"), serialised);\n console.log(`attribution/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Scoring-card translation corpus: humanize each primary mission card's\n * `awards` into plain English. The TS translator is the oracle; the Rust port\n * must reproduce every string byte-for-byte (the differ compares structurally,\n * no tolerance). Only `card_type: \"primary\"` cards are pinned — the 14-card\n * secondary deck isn't revealed yet. Cases are sorted by id for stability, and\n * the `awards` array order within each card is load-bearing.\n */\nfunction genScoringTranslation(): void {\n const ds = Dataset.embedded();\n mkdirSync(join(CONFORMANCE, \"scoring-translation\"), { recursive: true });\n // Pin the translation of every mission card's awards — primary and secondary\n // alike (the secondary deck has the same `awards` shape and deserves the same\n // cross-impl pinning).\n const cases = ds.missionCards.all\n .filter((c) => c.card_type === \"primary\" || c.card_type === \"secondary\")\n .slice()\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map((card) => ({ cardId: card.id, expected: { awards: describeScoringCard(card) } }));\n writeJson(join(CONFORMANCE, \"scoring-translation\", \"cases.json\"), cases);\n console.log(`scoring-translation/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Scoring-engine corpus: pin the pure VP arithmetic of the scoring engine\n * (`tools/src/scoring/` — the oracle) so the Rust `wh40kdc::scoring` port\n * reproduces it. Three ops, each case `{ name, op, args, expected }`:\n *\n * - `score_event` — per card and approach, assert every award matching the\n * approach (by its full-`awards`-array index). Pins `scoreAward`, `scoreTurn`\n * (exclusive-group \"highest only\", `vp_per × count` clamped to `per_max`,\n * cumulative sums), `scoreCap` (tactical 5 vs fixed `vp_max`/uncapped), and\n * `scoreSecondaryEvent`; primary cards also carry a `roundCap` to pin\n * `scorePrimaryEvent`. `cap: null` means uncapped (Infinity has no JSON form).\n * - `score_state` — replay scenarios over a `PlayerGame`, pinning the per-round\n * cap (15), per-game primary cap (45), grand-total cap (100), score+discard,\n * and undo.\n * - `wtc_result` — the 20-point band mapping across its boundaries.\n *\n * Goldens are produced by driving the TS runner's own `dispatch`, so the corpus\n * and the runner agree by construction; the cross-impl contract is the Rust\n * runner reproducing them. Integers are compared exactly (no tolerance).\n */\nfunction genScoring(): void {\n const ds = Dataset.embedded();\n mkdirSync(join(CONFORMANCE, \"scoring\"), { recursive: true });\n\n // One initialized runner state, reused across cases (the ops don't mutate it).\n const specVersion = Number.parseInt(\n readFileSync(join(CONFORMANCE, \"SPEC_VERSION\"), \"utf8\").trim(),\n 10,\n );\n const state = createRunnerState();\n const init = dispatch(state, {\n op: \"init\",\n args: { spec_version: specVersion, locale: \"C\", tz: \"UTC\", seed: 0 },\n });\n if (!init.ok) throw new Error(`gen scoring: init failed: ${JSON.stringify(init)}`);\n const run = (op: string, args: unknown): unknown => {\n const r = dispatch(state, { op, args });\n if (!r.ok) throw new Error(`gen scoring: ${op} failed: ${JSON.stringify(r)} for ${JSON.stringify(args)}`);\n return r.value;\n };\n\n type Case = { name: string; op: string; args: unknown; expected: unknown };\n const cases: Case[] = [];\n\n // score_event: every mission card, both approaches. Assert the approach's\n // awards by their full-array index; count vp_per awards to their per_max\n // (else 2) so the cap logic actually bites.\n const cards = ds.missionCards.all\n .slice()\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n for (const card of cards) {\n for (const approach of [\"fixed\", \"tactical\"] as const) {\n const asserted = awardsOf(card)\n .map((aw, index) => ({ aw, index }))\n .filter(({ aw }) => aw.mode == null || aw.mode === approach)\n .map(({ aw, index }) =>\n aw.vp_per != null ? { index, count: aw.per_max ?? 2 } : { index },\n );\n const args: Record<string, unknown> = { cardId: card.id, approach, asserted };\n if (card.card_type === \"primary\") args.roundCap = 15;\n cases.push({\n name: `score_event/${card.id}/${approach}`,\n op: \"score_event\",\n args,\n expected: run(\"score_event\", args),\n });\n }\n }\n\n // score_state: hand-authored replay scenarios. Card ids are real deck/mission\n // cards; expected state is whatever the engine produces.\n const stateScenarios: { name: string; args: unknown }[] = [\n {\n name: \"primary-round-and-game-caps\",\n args: {\n approach: \"tactical\",\n ops: [\n { kind: \"set-primary\", round: 1, vp: 30, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 2, vp: 30, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 3, vp: 30, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 4, vp: 30, roundCap: 15, gameCap: 45 },\n ],\n },\n },\n {\n // The full primary path: a card's raw round total, clamped to the round\n // cap on store, then cleared back to 0 by a set-primary 0.\n name: \"score-primary-then-clear\",\n args: {\n approach: \"tactical\",\n ops: [\n {\n kind: \"score-primary\",\n cardId: \"battlefield-dominance\",\n round: 2,\n asserted: awardsOf(ds.missionCards.get(\"battlefield-dominance\")!).map((aw, index) =>\n aw.vp_per != null ? { index, count: aw.per_max ?? 3 } : { index },\n ),\n roundCap: 15,\n gameCap: 45,\n },\n { kind: \"set-primary\", round: 3, vp: 99, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 2, vp: 0, roundCap: 15, gameCap: 45 },\n ],\n },\n },\n {\n name: \"secondary-score-and-undo\",\n args: {\n approach: \"tactical\",\n ops: [\n { kind: \"draw\", cardId: \"no-prisoners\" },\n { kind: \"score-secondary\", cardId: \"no-prisoners\", round: 2, asserted: [{ index: 0, count: 3 }] },\n { kind: \"remove-score\", index: 0 },\n ],\n },\n },\n {\n // Uncapped set-primary (no caps) overshoots so the 100 grand-total cap bites.\n name: \"grand-total-cap-at-100\",\n args: {\n approach: \"tactical\",\n ops: [\n { kind: \"set-primary\", round: 1, vp: 30 },\n { kind: \"set-primary\", round: 2, vp: 30 },\n { kind: \"set-primary\", round: 3, vp: 30 },\n { kind: \"set-primary\", round: 4, vp: 30 },\n { kind: \"set-primary\", round: 5, vp: 30 },\n { kind: \"draw\", cardId: \"no-prisoners\" },\n { kind: \"score-secondary\", cardId: \"no-prisoners\", round: 5, asserted: [{ index: 0, count: 99 }] },\n ],\n },\n },\n ];\n for (const s of stateScenarios) {\n cases.push({ name: `score_state/${s.name}`, op: \"score_state\", args: s.args, expected: run(\"score_state\", s.args) });\n }\n\n // wtc_result: band boundaries and symmetry.\n const wtcPairs: [number, number][] = [\n [50, 50],\n [48, 45],\n [45, 50],\n [56, 50],\n [50, 61],\n [100, 50],\n [100, 49],\n [0, 100],\n [60, 40],\n [55, 50],\n ];\n for (const [a, b] of wtcPairs) {\n const args = { a, b };\n cases.push({ name: `wtc_result/${a}-${b}`, op: \"wtc_result\", args, expected: run(\"wtc_result\", args) });\n }\n\n writeJson(join(CONFORMANCE, \"scoring\", \"cases.json\"), cases);\n console.log(`scoring/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Terrain-resolver corpus: resolve template-anchored layouts to absolute\n * board-space vertices (y-down inches). The TS resolver is the oracle; the Rust\n * port must reproduce every vertex within 5e-4 (per-area invariant in\n * CONFORMANCE.md). Cases are self-contained — each carries its own `templates`\n * and `layout` — so the corpus does not depend on the bundled catalog and the\n * runner op can pass both in `args`. Coverage: per-template centroid anchoring\n * (identity), cardinal + oblique rotations, both mirror axes on an asymmetric\n * shape, embedded-feature composition, explicit parenting, and the inline\n * footprint escape hatch.\n */\nfunction genTerrainResolver(): void {\n mkdirSync(join(CONFORMANCE, \"terrain-resolver\"), { recursive: true });\n\n const areaLarge: ResolverTemplate = {\n id: \"area-large\",\n name: \"Large Area\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 11.5, height: 7 },\n };\n const areaMedium: ResolverTemplate = {\n id: \"area-medium\",\n name: \"Medium Area\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 6, height: 4 },\n };\n const areaTrapezoid: ResolverTemplate = {\n id: \"area-trapezoid\",\n name: \"Trapezoid Area\",\n kind: \"area\",\n footprint: {\n type: \"polygon\",\n points: [\n { x: 0, y: 0 },\n { x: 8, y: 0 },\n { x: 2, y: 11.5 },\n { x: 0, y: 11.5 },\n ],\n },\n };\n const wedge: ResolverTemplate = {\n id: \"wedge\",\n name: \"Right Wedge\",\n kind: \"area\",\n footprint: { type: \"right-triangle\", width: 8, height: 11.5 },\n };\n const wallLong: ResolverTemplate = {\n id: \"wall-long\",\n name: \"Long Wall\",\n kind: \"feature\",\n footprint: { type: \"rectangle\", width: 7, height: 0.25 },\n };\n const ruinComposed: ResolverTemplate = {\n id: \"ruin-composed\",\n name: \"Composed Ruin\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 11.5, height: 7 },\n features: [\n { id: \"back-wall\", template: \"wall-long\", position: { x: 0, y: -3 } },\n { id: \"side-wall\", template: \"wall-long\", position: { x: -5, y: 0 }, rotation_degrees: 90, mirror: \"horizontal\" },\n ],\n };\n\n const baseCatalog = [areaLarge, areaMedium, areaTrapezoid, wedge, wallLong];\n\n const layoutCases: { name: string; templates: ResolverTemplate[]; layout: ResolverLayout }[] = [\n {\n name: \"identity-large\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-large\", position: { x: 30, y: 22 } }] },\n },\n {\n name: \"identity-wedge\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"wedge\", position: { x: 12, y: 30 } }] },\n },\n {\n name: \"identity-trapezoid\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 40, y: 18 } }] },\n },\n {\n name: \"rotate-medium-90\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-medium\", position: { x: 30, y: 22 }, rotation_degrees: 90 }] },\n },\n {\n name: \"rotate-medium-180\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-medium\", position: { x: 30, y: 22 }, rotation_degrees: 180 }] },\n },\n {\n name: \"rotate-medium-270\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-medium\", position: { x: 30, y: 22 }, rotation_degrees: 270 }] },\n },\n {\n name: \"rotate-large-oblique-55\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-large\", position: { x: 30, y: 22 }, rotation_degrees: 55 }] },\n },\n {\n name: \"rotate-trapezoid-oblique-235\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 35.75, y: 27 }, rotation_degrees: 235 }] },\n },\n {\n name: \"mirror-trapezoid-horizontal\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 40, y: 18 }, mirror: \"horizontal\" }] },\n },\n {\n name: \"mirror-trapezoid-vertical-rot90\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 40, y: 18 }, rotation_degrees: 90, mirror: \"vertical\" }] },\n },\n {\n name: \"composition-ruin-rot90-mirror-h\",\n templates: [ruinComposed, wallLong],\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"a1\", template: \"ruin-composed\", position: { x: 30, y: 22 }, rotation_degrees: 90, mirror: \"horizontal\" }] },\n },\n {\n name: \"explicit-parent-feature\",\n templates: [areaLarge, wallLong],\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n { id: \"a1\", template: \"area-large\", position: { x: 30, y: 22 }, rotation_degrees: 90, mirror: \"horizontal\" },\n { id: \"back-wall\", template: \"wall-long\", parent_area_id: \"a1\", position: { x: 0, y: -3 } },\n ],\n },\n },\n {\n name: \"inline-footprint-polygon\",\n templates: [],\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n footprint: { type: \"polygon\", points: [{ x: 0, y: 0 }, { x: 4, y: 0 }, { x: 2, y: 5 }] },\n position: { x: 50, y: 40 },\n rotation_degrees: 30,\n },\n ],\n },\n },\n ];\n\n const cases = layoutCases.map((c) => ({\n name: c.name,\n templates: c.templates,\n layout: c.layout,\n expected: { pieces: resolveLayout(c.layout, c.templates) },\n }));\n writeJson(join(CONFORMANCE, \"terrain-resolver\", \"cases.json\"), cases);\n console.log(`terrain-resolver/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Terrain-keystones corpus: derive the printed distance of each authored\n * keystone (board edge → piece feature) from resolved geometry. The TS helper\n * is the oracle; the Rust port must reproduce every distance within 5e-4.\n * Cases are self-contained like the resolver corpus. Coverage: all four\n * edges, vertex and bounding-face refs, an oblique rotation, a mirrored\n * asymmetric shape, a parented feature (composition through the parent\n * frame), an inline footprint, and a custom board size.\n */\nfunction genTerrainKeystones(): void {\n mkdirSync(join(CONFORMANCE, \"terrain-keystones\"), { recursive: true });\n\n const areaLarge: ResolverTemplate = {\n id: \"area-large\",\n name: \"Large Area\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 11.5, height: 7 },\n };\n const areaTrapezoid: ResolverTemplate = {\n id: \"area-trapezoid\",\n name: \"Trapezoid Area\",\n kind: \"area\",\n footprint: {\n type: \"polygon\",\n points: [\n { x: 0, y: 0 },\n { x: 8, y: 0 },\n { x: 2, y: 11.5 },\n { x: 0, y: 11.5 },\n ],\n },\n };\n const wallLong: ResolverTemplate = {\n id: \"wall-long\",\n name: \"Long Wall\",\n kind: \"feature\",\n footprint: { type: \"rectangle\", width: 7, height: 0.25 },\n };\n const catalog = [areaLarge, areaTrapezoid, wallLong];\n\n const keystoneCases: {\n name: string;\n templates: ResolverTemplate[];\n layout: ResolverLayout;\n board?: { width: number; height: number };\n }[] = [\n {\n name: \"identity-four-edges-vertices\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-large\",\n position: { x: 30, y: 22 },\n keystones: [\n { edge: \"left\", ref: { kind: \"vertex\", index: 0 } },\n { edge: \"top\", ref: { kind: \"vertex\", index: 1 } },\n { edge: \"right\", ref: { kind: \"vertex\", index: 2 } },\n { edge: \"bottom\", ref: { kind: \"vertex\", index: 3 } },\n ],\n },\n ],\n },\n },\n {\n name: \"identity-bounding-faces\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-large\",\n position: { x: 20, y: 30 },\n keystones: [\n { edge: \"left\", ref: { kind: \"face\", side: \"min-x\" } },\n { edge: \"right\", ref: { kind: \"face\", side: \"max-x\" } },\n { edge: \"top\", ref: { kind: \"face\", side: \"min-y\" } },\n { edge: \"bottom\", ref: { kind: \"face\", side: \"max-y\" } },\n ],\n },\n ],\n },\n },\n {\n name: \"oblique-rotation-vertex\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-trapezoid\",\n position: { x: 35.75, y: 27 },\n rotation_degrees: 235,\n keystones: [\n { edge: \"left\", ref: { kind: \"vertex\", index: 2 } },\n { edge: \"bottom\", ref: { kind: \"face\", side: \"max-y\" } },\n ],\n },\n ],\n },\n },\n {\n name: \"mirrored-trapezoid-vertex\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-trapezoid\",\n position: { x: 40, y: 18 },\n mirror: \"horizontal\",\n keystones: [\n { edge: \"right\", ref: { kind: \"vertex\", index: 1 } },\n { edge: \"top\", ref: { kind: \"vertex\", index: 0 } },\n ],\n },\n ],\n },\n },\n {\n name: \"parented-feature-keystone\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"a1\",\n template: \"area-large\",\n position: { x: 30, y: 22 },\n rotation_degrees: 90,\n mirror: \"horizontal\",\n keystones: [{ edge: \"left\", ref: { kind: \"vertex\", index: 0 } }],\n },\n {\n id: \"back-wall\",\n template: \"wall-long\",\n parent_area_id: \"a1\",\n position: { x: 0, y: -3 },\n keystones: [\n { edge: \"top\", ref: { kind: \"vertex\", index: 1 } },\n { edge: \"right\", ref: { kind: \"face\", side: \"max-x\" } },\n ],\n },\n ],\n },\n },\n {\n name: \"inline-footprint-keystone\",\n templates: [],\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n footprint: { type: \"polygon\", points: [{ x: 0, y: 0 }, { x: 4, y: 0 }, { x: 2, y: 5 }] },\n position: { x: 50, y: 40 },\n rotation_degrees: 30,\n keystones: [\n { edge: \"right\", ref: { kind: \"vertex\", index: 0 } },\n { edge: \"bottom\", ref: { kind: \"vertex\", index: 2 } },\n ],\n },\n ],\n },\n },\n {\n name: \"custom-board-extents\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-large\",\n position: { x: 15, y: 15 },\n keystones: [\n { edge: \"right\", ref: { kind: \"face\", side: \"max-x\" } },\n { edge: \"bottom\", ref: { kind: \"face\", side: \"max-y\" } },\n ],\n },\n ],\n },\n board: { width: 30, height: 22.4 },\n },\n ];\n\n const cases = keystoneCases.map((c) => ({\n name: c.name,\n templates: c.templates,\n layout: c.layout,\n ...(c.board ? { board: c.board } : {}),\n expected: {\n measurements: keystoneMeasurements(c.layout, c.templates, c.board ?? BOARD_INCHES),\n },\n }));\n writeJson(join(CONFORMANCE, \"terrain-keystones\", \"cases.json\"), cases);\n console.log(`terrain-keystones/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Effect-translation corpus: pin the Ability-DSL effect describer\n * (`describeEffect`/`describeAbility` — the \"ability.print()\") across the TS\n * and Rust ports. Cases embed the raw `effect` (+ `scope`) so parity does not\n * depend on collection dup-id resolution; selection greedily covers every\n * effect node type at least once (up to 5 exemplars per type) over the\n * id-sorted ability list, so the corpus stays small but exhaustive by shape.\n */\nfunction genEffectTranslation(): void {\n const ds = Dataset.embedded();\n mkdirSync(join(CONFORMANCE, \"effect-translation\"), { recursive: true });\n\n const collectTypes = (e: unknown, out: Set<string>): void => {\n if (Array.isArray(e)) {\n for (const v of e) collectTypes(v, out);\n return;\n }\n if (typeof e !== \"object\" || e === null) return;\n const rec = e as Record<string, unknown>;\n if (typeof rec.type === \"string\") {\n out.add(rec.type);\n // Variant-aware keys for types whose modifier picks a distinct render\n // branch — the per-type cap alone would leave later-alphabet variants\n // (a psychic-scoped FNP, a rolled pool die) unpinned cross-impl.\n const m = (rec.modifier ?? {}) as Record<string, unknown>;\n if (rec.type === \"feel-no-pain\" && typeof m.scope === \"string\") {\n out.add(`feel-no-pain@${m.scope}`);\n }\n if (rec.type === \"pool-add-die\") {\n const kind = m.value === \"rolled\" || m.value === \"highest\" ? m.value : \"shown\";\n const per = m.count_per_pool != null ? \"@per-pool\" : \"\";\n out.add(`pool-add-die@${kind}${per}`);\n }\n }\n for (const key of [\"effect\", \"on_success\", \"on_fail\", \"steps\", \"options\", \"condition\"]) {\n if (key in rec) collectTypes(rec[key], out);\n }\n };\n\n // One copy per ability id: the collection retains per-faction copies of a\n // shared id, but identical copies would only fill the per-type exemplar\n // caps with redundant cases (pushing out genuinely distinct later-alphabet\n // shapes). First-registered copy wins — the stable sort preserves bundle\n // order within an id, matching the collection's own byId index.\n const seenIds = new Set<string>();\n const abilities = ds.abilities.all\n .slice()\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .filter((a) => (seenIds.has(a.id) ? false : (seenIds.add(a.id), true)));\n\n const seen = new Map<string, number>();\n const CAP = 5;\n // Also cover the `applies_to` render path: force-include a few abilities that\n // carry a curated filter even when their effect-node types are already\n // exhausted, so the trailing `Applies to:` line stays pinned cross-impl.\n const APPLIES_CAP = 3;\n let appliesToSeen = 0;\n const cases: unknown[] = [];\n for (const a of abilities) {\n const types = new Set<string>();\n collectTypes(a.raw.effect, types);\n let fresh = false;\n for (const t of types) {\n if ((seen.get(t) ?? 0) < CAP) fresh = true;\n }\n const coversAppliesTo = a.raw.applies_to != null && appliesToSeen < APPLIES_CAP;\n if (coversAppliesTo) fresh = true;\n if (!fresh) continue;\n for (const t of types) seen.set(t, (seen.get(t) ?? 0) + 1);\n if (a.raw.applies_to != null) appliesToSeen += 1;\n const entry: Record<string, unknown> = {\n caseId: `${a.id}#${cases.length}`,\n effect: a.raw.effect,\n scope: a.raw.scope ?? null,\n };\n if (a.raw.applies_to != null) entry.applies_to = a.raw.applies_to;\n if (a.raw.usage != null) entry.usage = a.raw.usage;\n if (a.raw.trigger != null) entry.trigger = a.raw.trigger;\n entry.expected = {\n text: describeAbility({\n effect: a.raw.effect as Effect,\n scope: a.raw.scope,\n usage: a.raw.usage as AbilityUsage | undefined,\n trigger: a.raw.trigger as AbilityTrigger | undefined,\n applies_to: a.raw.applies_to,\n }),\n };\n cases.push(entry);\n }\n // Pin the scouts movement-modifier — movement-modifier caps out before scouts-6\n // sorts in alphabetically, so force-include one case to keep the new\n // \"Before the first battle round, …\" phrasing pinned cross-impl.\n {\n const fc = {\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"scout\", distance: 6 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n };\n cases.push({\n caseId: `movement-modifier-scouts#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // Pin the curated ability-grant label overrides for the sibling ids — they\n // rarely surface in the capped sample above (ability-grant caps out on the\n // common `charge-after-advance`). Shapes mirror real enrichment data; expected\n // text still comes from the reference describer, so a second impl must\n // independently reproduce it. See ABILITY_GRANT_LABELS in translate/effect.ts.\n const FORCED_GRANT_CASES: { effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n effect: { type: \"ability-grant\", target: \"unit\", modifier: { grant_type: \"charge-after-disembark\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n effect: { type: \"ability-grant\", target: \"self\", modifier: { grant_type: \"charge-after-fallback\" } },\n scope: { range: \"self\", duration: \"turn\" },\n },\n ];\n for (const fc of FORCED_GRANT_CASES) {\n const id = (fc.effect.modifier as Record<string, unknown>).grant_type as string;\n cases.push({\n caseId: `grant-label-${id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // Batch A (describer-only gaps): pin the new condition lead-ins\n // (engagement-state / disposition-matches / fights-first), the `scaling`\n // trailing clause, and the inline dice-pool requirement label cross-impl.\n // `scaling` and `fights-first` have no enrichment usage, and several\n // engagement-state param branches never surface in the capped auto-sample, so\n // force-include exemplars; expected text still comes from the reference\n // describer, so a second impl must independently reproduce it.\n const FORCED_DESCRIBER_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"engagement-state-engaged\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: { state: \"within-engagement-range\" } }, effect: { type: \"fight-first\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-on-battlefield\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: { state: \"on-battlefield\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-embarked\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: { state: \"embarked\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-empty\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: {} }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-negated\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", negated: true, parameters: { state: \"embarked\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"disposition-matches-reserves\",\n effect: { type: \"conditional\", condition: { type: \"disposition-matches\", parameters: { disposition: \"strategic-reserves\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"disposition-matches-enemy\",\n effect: { type: \"conditional\", condition: { type: \"disposition-matches\", parameters: { disposition: \"enemy\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"fights-first-cond\",\n effect: { type: \"conditional\", condition: { type: \"fights-first\", parameters: {} }, effect: { type: \"stat-modifier\", target: \"unit\", modifier: { stat: \"A\", operation: \"add\", value: 1 } } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"scaling-attacks-per-models\",\n effect: { type: \"stat-modifier\", target: \"unit\", modifier: { stat: \"A\", operation: \"add\", value: 1 }, scaling: { per: 5, of: \"enemy-models-in-range\", within_inches: 6 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"scaling-strength-wounds-lost\",\n effect: { type: \"stat-modifier\", target: \"self\", modifier: { stat: \"S\", operation: \"add\", value: 1 }, scaling: { per: 1, of: \"wounds-lost\", round: \"up\", max_value: 3 } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"dice-pool-inline-label\",\n effect: {\n type: \"choice\",\n options: [\n { type: \"dice-pool-allocation\", pool: { count: 3, die: \"D6\" }, max_activations: 1, options: [{ name: \"Carnage\", requirement: { type: \"pair\", min_value: 4 }, effect: { type: \"mortal-wounds\", target: \"all-enemy\", modifier: { count: 3 } } }] },\n { type: \"fight-first\", target: \"unit\" },\n ],\n },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n // closest-eligible target with a range bound — pins the `within N\"` clause\n // (blood-hungry-annihilator's targeting); the auto-sample caps the\n // unit-within-range-of condition before a ranged closest-eligible surfaces.\n id: \"unit-within-range-closest-eligible\",\n effect: { type: \"conditional\", condition: { type: \"unit-within-range-of\", parameters: { range: 18, target_type: \"closest-eligible\" } }, effect: { type: \"re-roll\", target: \"self\", modifier: { roll: \"wound\", subset: \"all-failures\" } } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n // dice-pool requirement with an `any_of` alternative (double X OR triple Y) —\n // World Eaters Blessings of Khorne; pins the \"pair of 4+ or triple of 1+\" join.\n id: \"dice-pool-requirement-anyof\",\n effect: {\n type: \"dice-pool-allocation\",\n pool: { count: 8, die: \"D6\" },\n max_activations: 2,\n options: [\n { name: \"Martial Excellence\", requirement: { any_of: [{ type: \"pair\", min_value: 4 }, { type: \"triple\", min_value: 1 }] }, effect: { type: \"keyword-grant\", target: \"all-friendly\", modifier: { keyword: \"Sustained Hits 1\", weapon_type: \"melee\" } } },\n ],\n },\n scope: { range: \"any-on-battlefield\", duration: \"battle-round\" },\n },\n ];\n for (const fc of FORCED_DESCRIBER_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // rule-state: the auto-sample caps each node type at 5, so alphabetically-late\n // abilities (Angron's reborn-in-blood faction-rule forgo) and the no-enrichment\n // branches (faction-rule granted, keyword kind, desperate-escape, advance) fall\n // out. Force-include one exemplar per distinct describer branch — most\n // importantly the faction-rule + suppressed path, which reproduces the retired\n // forgo-faction-rule wording (scope + cost) verbatim. Expected text comes from\n // the reference describer, so a second impl must reproduce it.\n const FORCED_RULE_STATE_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"rule-state-forgo-faction-rule\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"suppressed\", rule_kind: \"faction-rule\", rule: \"blessings-of-khorne\", scope: \"battle-round\", cost: { dice: \"triple-6\", from: \"blessings-of-khorne\" } } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"rule-state-faction-rule-granted\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"granted\", rule_kind: \"faction-rule\", rule: \"oath-of-moment\" } },\n scope: { range: \"self\", duration: \"phase\" },\n },\n {\n id: \"rule-state-cover-granted\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"granted\", rule_kind: \"core-rule\", rule: \"benefit-of-cover\" } },\n scope: { range: \"self\", duration: \"phase\" },\n },\n {\n id: \"rule-state-advance-suppressed\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"advance\" } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"rule-state-overwatch-against-bearer\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"overwatch-against-bearer\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"rule-state-desperate-escape-granted\",\n effect: { type: \"rule-state\", target: \"all-enemy\", modifier: { direction: \"granted\", rule_kind: \"core-rule\", rule: \"desperate-escape\" } },\n scope: { range: \"engagement-range\", duration: \"phase\" },\n },\n {\n id: \"rule-state-desperate-escape-suppressed\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"desperate-escape\" } },\n scope: { range: \"self\", duration: \"turn\" },\n },\n {\n id: \"rule-state-ability-granted\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"granted\", rule_kind: \"ability\", rule: \"lone-operative\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"rule-state-keyword-suppressed\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"suppressed\", rule_kind: \"keyword\", rule: \"infantry\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n // ordered-retreat: the lever the 11e Fall-Back move (09.07) actually\n // toggles. Suppressed (force Desperate Escape) carried on an aura target so\n // the range-threaded subject is also pinned; granted (Orks \"ignore\n // Desperate Escape while battle-shocked\") on a plain unit target.\n id: \"rule-state-ordered-retreat-suppressed\",\n effect: { type: \"rule-state\", target: \"enemy-within-aura\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"ordered-retreat\" } },\n scope: { range: \"aura-9\", duration: \"permanent\" },\n },\n {\n id: \"rule-state-ordered-retreat-granted\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"granted\", rule_kind: \"core-rule\", rule: \"ordered-retreat\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n ];\n for (const fc of FORCED_RULE_STATE_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // Batch B (structured modifiers): parameterized weapon keywords (Anti-X / rated),\n // auto-result, transport (firing-deck / disembark-after-move), and the ability-level\n // `usage` limit. Shapes 3/5/6 have no enrichment usage yet; pin them synthetically.\n const FORCED_BATCH_B_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown>; usage?: Record<string, unknown> }[] = [\n {\n id: \"keyword-grant-anti-string\",\n effect: { type: \"keyword-grant\", target: \"unit\", modifier: { keyword: \"anti-titanic-3plus\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"keyword-grant-anti-structured\",\n effect: { type: \"keyword-grant\", target: \"unit\", modifier: { anti_keyword: \"infantry\", anti_threshold: 4 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"keyword-grant-rated-value\",\n effect: { type: \"keyword-grant\", target: \"unit\", modifier: { keyword: \"sustained-hits\", value: 2 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"auto-result-battle-shock-pass\",\n effect: { type: \"auto-result\", target: \"unit\", modifier: { test: \"battle-shock\", result: \"pass\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"auto-result-hit-six\",\n effect: { type: \"auto-result\", target: \"unit\", modifier: { roll: \"hit\", result: 6 } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"firing-deck\",\n effect: { type: \"firing-deck\", target: \"self\", modifier: { value: 2 } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"disembark-after-move\",\n effect: { type: \"disembark-after-move\", target: \"self\", modifier: {} },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"usage-once-per-turn\",\n effect: { type: \"cp-gain\", target: \"self\", modifier: { amount: 1 } },\n scope: { range: \"self\", duration: \"permanent\" },\n usage: { frequency: \"once-per-turn\" },\n },\n {\n id: \"usage-n-per-battle-per-unit\",\n effect: { type: \"stat-modifier\", target: \"unit\", modifier: { stat: \"A\", operation: \"add\", value: 1 } },\n scope: { range: \"unit\", duration: \"phase\" },\n usage: { frequency: \"n-per-battle\", count: 2, per: \"unit\" },\n },\n ];\n for (const fc of FORCED_BATCH_B_CASES) {\n const entry: Record<string, unknown> = {\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n };\n if (fc.usage) entry.usage = fc.usage;\n entry.expected = {\n text: describeAbility({\n effect: fc.effect as Effect,\n scope: fc.scope,\n usage: fc.usage as AbilityUsage | undefined,\n }),\n };\n cases.push(entry);\n }\n // Batch C (reactive trigger): pin the trigger lead-in across the event vocabulary\n // (no ability carries a trigger yet — forward-looking, like usage/auto-result).\n const FORCED_TRIGGER_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown>; trigger: Record<string, unknown> }[] = [\n {\n id: \"trigger-enemy-ended-move\",\n effect: { type: \"movement-modifier\", target: \"self\", modifier: { move_type: \"reactive\", distance: \"D6\" } },\n scope: { range: \"self\", duration: \"one-use\" },\n trigger: { event: \"enemy-unit-ended-move\", subject: \"enemy-unit\", proximity: { of: \"bearer\", range: 9 } },\n },\n {\n id: \"trigger-on-model-destroyed\",\n effect: { type: \"mortal-wounds\", target: \"all-enemy\", modifier: { count: 1 } },\n scope: { range: \"aura-6\", duration: \"one-use\", range_inches: 6 },\n trigger: { event: \"on-model-destroyed\" },\n },\n {\n id: \"trigger-before-save-with-condition\",\n effect: { type: \"re-roll\", target: \"unit\", modifier: { roll: \"save\", subset: \"all-failures\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n trigger: { event: \"before-save-roll\", subject: \"self\", condition: { type: \"is-battle-shocked\" } },\n },\n ];\n for (const fc of FORCED_TRIGGER_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n trigger: fc.trigger,\n expected: {\n text: describeAbility({\n effect: fc.effect as Effect,\n scope: fc.scope,\n trigger: fc.trigger as AbilityTrigger,\n }),\n },\n });\n }\n // Batch D (movement-modifier full closure + generic aura): pin one exemplar of\n // every new closed shape — move kinds, the optional-move_type passthrough\n // capability, redeploy/marker, the generic aura (range-bonus + tiered+effect),\n // and the re-homed deep-strike-range / engagement-no-end records. Several have\n // no enrichment usage (aura with nested effect, tiered range), so force them;\n // expected text still flows from the reference describer.\n const FORCED_BATCH_D_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"move-passthrough-models-terrain\",\n effect: { type: \"movement-modifier\", target: \"self\", modifier: { passthrough: [\"non-titanic-models\", \"terrain-le-4\"] } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"move-passthrough-applies-excludes\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { passthrough: [\"terrain-le-4\"], vertical_limit: 4, excludes_keyword: \"titanic\", applies_to_moves: [\"normal\", \"advance\", \"fall-back\"] } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-ignore-vertical\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { ignore_vertical: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-normal-applies\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"normal\", distance: 3, applies_to_moves: [\"normal\", \"advance\", \"fall-back\"] } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-normal-negative\",\n effect: { type: \"movement-modifier\", target: \"defender\", modifier: { move_type: \"normal\", distance: -2 } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"move-advance-bonus\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"advance\", distance: 6 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-pile-in\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"pile-in\", distance: 3, replaces_default: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-consolidation\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"consolidation\", distance: 6, replaces_default: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-surge\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"surge\", distance: \"D6\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"move-shoot-and-scoot\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"shoot-and-scoot\", distance: \"D6\" } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"move-redeploy-reserves-max\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"redeploy\", to_reserves: true, max_units: 3 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-redeploy-marker\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"redeploy\", marker: { affected: \"Cult Ambush markers\" }, distance: 6 } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"move-redeploy-placement\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"redeploy\", marker: { location: \"floor sections\", unit_filter: \"Genestealer Cult Infantry\" } } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-infiltrate\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"infiltrate\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"aura-range-bonus\",\n effect: { type: \"aura\", target: \"enemy-within-aura\", modifier: { of: \"contagion\", range_bonus: 3 } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"aura-tiered-effect\",\n effect: { type: \"aura\", target: \"enemy-within-aura\", modifier: { range: [3, 6, 9], effect: { type: \"stat-modifier\", target: \"enemy-within-aura\", modifier: { stat: \"T\", operation: \"subtract\", value: 1 } } } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"rehome-deep-strike-min-distance\",\n effect: { type: \"deep-strike\", target: \"unit\", modifier: { min_distance: 6, replaces_default: true } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"rehome-engagement-no-end\",\n effect: { type: \"engagement-passthrough\", target: \"self\", modifier: { no_end_in_engagement: true } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n ];\n for (const fc of FORCED_BATCH_D_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n writeJson(join(CONFORMANCE, \"effect-translation\", \"cases.json\"), cases);\n console.log(`effect-translation/cases.json: ${cases.length} cases (${seen.size} node types)`);\n}\n\n/** Unsigned LEB128 of a small non-negative integer (for hand-built tokens). */\nfunction leb128(value: number): number[] {\n const out: number[] = [];\n let v = value;\n while (v >= 0x80) {\n out.push((v & 0x7f) | 0x80);\n v = Math.floor(v / 0x80);\n }\n out.push(v);\n return out;\n}\n\n/** base64url (no padding) of a raw byte array — for negative decode goldens. */\nfunction bytesToBase64url(bytes: number[]): string {\n return Buffer.from(bytes)\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/**\n * The share-token corpus. Each positive case pins `encodeShareToken(list)` to an\n * exact `token` and asserts `decodeShareToken(token)` round-trips to `list`;\n * negative cases pin the decoder's `malformed` / `stale-registry` verdicts. The\n * input lists are derived from the embedded dataset deterministically (sorted,\n * first-N) so the goldens are stable and self-maintaining. Rust and Python must\n * reproduce every `token` byte-for-byte and every decode verdict.\n */\nfunction genShare(): void {\n mkdirSync(join(CONFORMANCE, \"share\"), { recursive: true });\n const ds = Dataset.embedded();\n const f = \"adeptus-astartes\";\n const dets = ds.detachments.all\n .filter((d) => d.faction_id === f)\n .map((d) => d.id)\n .sort();\n const units = ds.units\n .byFaction(f)\n .map((u) => u.id)\n .sort();\n const weapons = ds.weapons.all.map((w) => w.id).sort();\n const enhancement = ds.enhancements.all.map((e) => e.id).sort()[0];\n const disposition = ds.forceDispositions.all.map((d) => d.id).sort()[0];\n const allyFactionId = \"chaos-daemons\";\n const allyRuleId = ds.alliedRules.all.map((r) => r.id).sort()[0];\n\n const plainUnit = (id: string): ShareList[\"units\"][number] => ({\n datasheetId: id,\n modelCount: 1,\n isWarlord: false,\n enhancementId: null,\n allyFactionId: null,\n allyRuleId: null,\n attachedToOrdinal: null,\n grants: [],\n loadout: [],\n });\n\n const lists: { name: string; list: ShareList }[] = [\n {\n name: \"minimal\",\n list: {\n name: \"\",\n factionId: f,\n detachmentIds: [],\n battleSize: \"strike-force\",\n disposition: null,\n units: [],\n },\n },\n {\n name: \"warlord-enhancement-grants\",\n list: {\n name: \"Strîke Force 🔨\",\n factionId: f,\n detachmentIds: [dets[0]],\n battleSize: \"strike-force\",\n disposition,\n units: [\n {\n ...plainUnit(units[0]),\n modelCount: 5,\n isWarlord: true,\n enhancementId: enhancement,\n grants: [\"Character\"],\n loadout: [\n [weapons[0], 2],\n [weapons[1], 1],\n ],\n },\n { ...plainUnit(units[1]), modelCount: 10, loadout: [[weapons[2], 10]] },\n ],\n },\n },\n {\n name: \"allies-attachment\",\n list: {\n name: \"Soup\",\n factionId: f,\n detachmentIds: [dets[0], dets[1]],\n battleSize: \"incursion\",\n disposition,\n units: [\n { ...plainUnit(units[0]), isWarlord: true, attachedToOrdinal: 1 }, // leader → bodyguard\n { ...plainUnit(units[1]), modelCount: 5 },\n {\n ...plainUnit(units[2]),\n allyFactionId,\n allyRuleId,\n grants: [\"Battleline\"],\n loadout: [[weapons[3], 1]],\n },\n ],\n },\n },\n ];\n\n interface ShareCase {\n name: string;\n list?: ShareList;\n token?: string;\n decode_token?: string;\n expected_decode?: ReturnType<typeof decodeShareToken>;\n }\n\n const cases: ShareCase[] = lists.map(({ name, list }) => {\n const token = encodeShareToken(list);\n const decoded = decodeShareToken(token);\n if (!decoded.ok) throw new Error(`share case ${name} failed to round-trip: ${decoded.reason}`);\n // Sanity: the generator's own round-trip must reproduce the input exactly.\n if (JSON.stringify(decoded.list) !== JSON.stringify(list)) {\n throw new Error(`share case ${name} did not round-trip losslessly`);\n }\n return { name, list, token };\n });\n\n // Negative decode cases (deterministic hand-built tokens).\n cases.push({\n name: \"malformed-bad-format-byte\",\n decode_token: bytesToBase64url([0x00]),\n expected_decode: { ok: false, reason: \"malformed\" },\n });\n cases.push({\n name: \"stale-future-index\",\n // Valid header (format 1, registry version, empty name) then a faction\n // index no committed registry will ever hold → stale-registry.\n decode_token: bytesToBase64url([0x01, ...leb128(shareRegistryVersion), 0x00, ...leb128(2_000_000)]),\n expected_decode: { ok: false, reason: \"stale-registry\" },\n });\n\n writeJson(join(CONFORMANCE, \"share\", \"cases.json\"), cases);\n console.log(\n `share/cases.json: ${cases.length} cases (registry v${shareRegistryVersion}, ` +\n `${cases.filter((c) => c.token).length} round-trip + ${cases.filter((c) => c.decode_token).length} negative)`,\n );\n}\n\ngenNormalize();\ngenRosters();\ngenLinkedApi();\ngenAttribution();\ngenScoringTranslation();\ngenEffectTranslation();\ngenScoring();\ngenTerrainResolver();\ngenTerrainKeystones();\ngenShare();\n"]}
|
|
1
|
+
{"version":3,"file":"gen-conformance.js","sourceRoot":"","sources":["../src/gen-conformance.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Generate the cross-implementation conformance corpus under repo-root\n * `conformance/`. The TypeScript package is the reference implementation, so\n * the goldens it emits are what the Rust crate must reproduce byte-for-byte\n * (structurally). Run via `npm run gen:conformance`; CI regenerates and asserts\n * `git diff --exit-code conformance/` is clean.\n *\n * Outputs:\n * - `conformance/normalize.json` — `[{ input, expected }]` for normalizeName.\n * - `conformance/roster/<case>/expected.roster.json` — the resolved Roster.\n * - `conformance/roster/<case>/expected.<fmt>.{txt,json}` — every export\n * target's golden output. The TS exporter is the oracle; the Rust mirror\n * asserts byte-equal output for the same Roster.\n * - `conformance/roster/<case>/input.newrecruit-{wtc-compact,wtc-full,simple}.txt`\n * — text inputs derived from the seed by the exporter, so a re-import\n * regression in either implementation surfaces immediately.\n *\n * Seeding: each `<case>/` carries one canonical input — either the legacy\n * `input.json` (ListForge) or `input.newrecruit-json.json` (NewRecruit). Other\n * inputs are derived.\n */\nimport { readdirSync, readFileSync, writeFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { Dataset } from \"./data/dataset.js\";\nimport { baseLoadout } from \"./data/loadout.js\";\nimport { normalizeName } from \"./data/normalize.js\";\nimport { describeScoringCard, describeAbility, type Effect, type AbilityUsage, type AbilityTrigger } from \"./translate/index.js\";\nimport type { GameEvent } from \"./generated.js\";\nimport { awardsOf } from \"./scoring/index.js\";\nimport { createRunnerState, dispatch } from \"./runner.js\";\nimport { exportRoster, type ExportFormat } from \"./export/index.js\";\nimport {\n decodeShareToken,\n encodeShareToken,\n shareRegistryVersion,\n type ShareList,\n} from \"./share/index.js\";\nimport { importRoster, REGISTERED_ADAPTERS } from \"./import/import-roster.js\";\nimport { selectAdapter } from \"./import/adapter.js\";\nimport type { ParsedRoster, Roster } from \"./import/types.js\";\nimport { encodeBase } from \"./runner.js\";\nimport { attributeStages } from \"./cruncher/attribution.js\";\nimport type { EngineInput } from \"./cruncher/index.js\";\nimport {\n resolveLayout,\n type TerrainTemplate as ResolverTemplate,\n type TerrainLayout as ResolverLayout,\n} from \"./terrain/resolve.js\";\nimport { keystoneMeasurements, BOARD_INCHES } from \"./terrain/keystones.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst REPO_ROOT = join(__dirname, \"../..\");\nconst CONFORMANCE = join(REPO_ROOT, \"conformance\");\n\nconst NORMALIZE_INPUTS = [\n // NFD diacritic strip\n \"Khârn the Betrayer\",\n \"Brôkhyr\",\n \"Ûthar\",\n \"Magnús\",\n // apostrophe / quote variants\n \"T'au\",\n \"Be’lakor\",\n \"Kor’sarro Khan\",\n \"Aetaos'rau'keres\",\n \"‘quoted’\",\n // whitespace / hyphen collapse + trim\n \"Brôkhyr Iron-master\",\n \" the betrayer \",\n \"space--marines\",\n // casefold\n \"KHÂRN THE BETRAYER\",\n // already-normalized (idempotence)\n \"kharn the betrayer\",\n // distinctness anchors (must NOT collapse together)\n \"Khorne\",\n \"Khârn\",\n // Unicode whitespace beyond ASCII — every Unicode whitespace must collapse\n // identically across implementations or `find(\"Khorne Lord\")` and\n // `find(\"Khorne Lord\")` will silently disagree across ports.\n \"Khorne Lord\",\n \"Khorne Lord\",\n // Turkish dotted-I: NFD decomposes to `I` + combining dot above; the dot is\n // stripped, then locale-independent lowercase yields `i`. The case pins that\n // no implementation introduces locale-aware casefolding (which would map\n // `I` → `ı` under Turkish locale and break ASCII-text search).\n \"İmperial Fists\",\n // Zero-width joiner: passes through every step today. Pinned so behavior\n // does not silently change — if a future commit strips Cf-category chars,\n // this golden updates in the same PR.\n \"KhorneLord\",\n];\n\nfunction writeJson(path: string, value: unknown): void {\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\nfunction writeText(path: string, value: string): void {\n writeFileSync(path, value);\n}\n\nfunction genNormalize(): void {\n const table = NORMALIZE_INPUTS.map((input) => ({ input, expected: normalizeName(input) }));\n writeJson(join(CONFORMANCE, \"normalize.json\"), table);\n console.log(`normalize.json: ${table.length} cases`);\n}\n\n/** Locate the canonical input for a fixture dir: prefer `input.json` (legacy\n * ListForge), then `input.newrecruit-json.json` (NewRecruit), then the\n * text-only `input.gw.txt` / `input.listforge-text.txt` (app text exports —\n * import-only, like ListForge). */\nfunction seedRoster(caseDir: string, ds: Dataset): Roster {\n const decoded = decodeCanonicalSeed(caseDir);\n return importRoster(decoded, { dataset: ds });\n}\n\n/** Return the decoded payload for the canonical seed — the same value the\n * import pipeline would dispatch on. JSON seeds come back parsed; text seeds\n * come back as the raw string. */\nfunction decodeCanonicalSeed(caseDir: string): unknown {\n const jsonSeed = join(caseDir, \"input.json\");\n if (existsSync(jsonSeed)) {\n return JSON.parse(readFileSync(jsonSeed, \"utf8\"));\n }\n const nrSeed = join(caseDir, \"input.newrecruit-json.json\");\n if (existsSync(nrSeed)) {\n return JSON.parse(readFileSync(nrSeed, \"utf8\"));\n }\n const gwSeed = join(caseDir, \"input.gw.txt\");\n if (existsSync(gwSeed)) {\n return readFileSync(gwSeed, \"utf8\");\n }\n const lfTextSeed = join(caseDir, \"input.listforge-text.txt\");\n if (existsSync(lfTextSeed)) {\n return readFileSync(lfTextSeed, \"utf8\");\n }\n // A hand-authored WTC-full seed — used for cases exercising WTC-only header\n // features (e.g. `+ FORCE DISPOSITION:`). Import-only, like the other text\n // seeds: the non-WTC formats can't carry the disposition, so their derived\n // round-trip inputs would diverge structurally. Checked after the\n // NewRecruit-JSON seed above, so it never shadows a NewRecruit-seeded case's\n // DERIVED `input.newrecruit-wtc-full.txt`.\n const wtcFullSeed = join(caseDir, \"input.newrecruit-wtc-full.txt\");\n if (existsSync(wtcFullSeed)) {\n return readFileSync(wtcFullSeed, \"utf8\");\n }\n // A hand-authored canonical Roster (roster-json) — the lossless carrier used\n // for cases that no upstream format can yet express, e.g. multi-detachment\n // 11e lists. Like the legacy seeds it is import-only (no derived round-trip\n // inputs are generated), since the text/header exporters print every\n // detachment but their importers read only one.\n const rosterJsonSeed = join(caseDir, \"input.roster-json.json\");\n if (existsSync(rosterJsonSeed)) {\n return JSON.parse(readFileSync(rosterJsonSeed, \"utf8\"));\n }\n throw new Error(`no canonical input found in ${caseDir}`);\n}\n\n/** Run a decoded payload through the adapter pipeline up to (but not past)\n * resolution. The result is the format-agnostic ParsedRoster — the same\n * intermediate the resolver consumes. Pinning this layer surfaces parser\n * regressions even when resolution masks them. */\nfunction parsedFromCanonicalSeed(caseDir: string): ParsedRoster {\n const decoded = decodeCanonicalSeed(caseDir);\n const adapter = selectAdapter(decoded, [...REGISTERED_ADAPTERS]);\n return adapter.parse(decoded);\n}\n\nconst TEXT_FORMATS: { format: ExportFormat; inputName: string; goldenName: string }[] = [\n {\n format: \"newrecruit-wtc-compact\",\n inputName: \"input.newrecruit-wtc-compact.txt\",\n goldenName: \"expected.newrecruit-wtc-compact.txt\",\n },\n {\n format: \"newrecruit-wtc-full\",\n inputName: \"input.newrecruit-wtc-full.txt\",\n goldenName: \"expected.newrecruit-wtc-full.txt\",\n },\n {\n format: \"newrecruit-simple\",\n inputName: \"input.newrecruit-simple.txt\",\n goldenName: \"expected.newrecruit-simple.txt\",\n },\n];\n\n// Export-only text formats — no importer exists, so they get an `expected.*.txt`\n// byte-equality golden but never a derived `input.*.txt` round-trip seed.\nconst EXPORT_ONLY_TEXT_FORMATS: { format: ExportFormat; goldenName: string }[] = [\n { format: \"atc-2026-compact\", goldenName: \"expected.atc-2026-compact.txt\" },\n { format: \"atc-2026-full\", goldenName: \"expected.atc-2026-full.txt\" },\n];\n\n// Export-only *Dataset-backed* formats — no importer, and the serializer reads\n// the dataset (not just the Roster), so the golden is generated with `ds`\n// passed through `exportRoster`. Byte-parity holds across ports because every\n// port embeds the same dataset.\nconst EXPORT_ONLY_DATASET_FORMATS: { format: ExportFormat; goldenName: string }[] = [\n { format: \"yellowscribe\", goldenName: \"expected.yellowscribe.ros\" },\n];\n\nfunction genRosters(): void {\n const ds = Dataset.embedded();\n const rosterDir = join(CONFORMANCE, \"roster\");\n for (const entry of readdirSync(rosterDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const caseDir = join(rosterDir, entry.name);\n\n const seed = seedRoster(caseDir, ds);\n writeJson(join(caseDir, \"expected.roster.json\"), seed);\n\n // Parsed-stage golden — the intermediate ParsedRoster produced by the\n // adapter for the canonical seed, before resolution. Catches parser bugs\n // that resolution would otherwise mask (e.g. wrong unit count from a\n // duplicate cost line that resolves to the same unit twice).\n writeJson(join(caseDir, \"expected.parsed.json\"), parsedFromCanonicalSeed(caseDir));\n\n // JSON export golden — NewRecruit-shaped skeleton.\n const jsonOut = exportRoster(seed, \"newrecruit-json\");\n writeJson(join(caseDir, \"expected.newrecruit-json.json\"), JSON.parse(jsonOut));\n\n // Canonical Roster JSON export — should equal the resolved roster.\n writeJson(join(caseDir, \"expected.roster-json.json\"), JSON.parse(exportRoster(seed, \"roster-json\")));\n\n // Text exports: always write the export golden so every fixture exercises\n // the cross-implementation byte-equality check. Only write the\n // `input.*.txt` round-trip seed when the fixture was authored for the\n // NewRecruit pipeline — legacy ListForge fixtures carry decoration\n // (multi-force warnings, leader-attachment inference) that the simple/wtc\n // exporters can't fully preserve, so the round-trip would fail\n // structurally rather than uncover a parser bug.\n const isNewRecruitSeed = existsSync(join(caseDir, \"input.newrecruit-json.json\"));\n // The header text formats (wtc-compact/full, simple) print every detachment\n // but their parsers read only one, so a multi-detachment roster can't\n // round-trip through them — emit the export golden but not the derived\n // round-trip input (the same reasoning as the legacy-ListForge skip).\n const textRoundTrippable = isNewRecruitSeed && seed.detachments.length <= 1;\n for (const { format, inputName, goldenName } of TEXT_FORMATS) {\n const out = exportRoster(seed, format);\n writeText(join(caseDir, goldenName), out);\n if (textRoundTrippable) {\n writeText(join(caseDir, inputName), out);\n }\n }\n\n // Export-only text formats (ATC 2026) — golden only, never a round-trip input.\n for (const { format, goldenName } of EXPORT_ONLY_TEXT_FORMATS) {\n writeText(join(caseDir, goldenName), exportRoster(seed, format));\n }\n\n // Export-only Dataset-backed formats (Yellowscribe `.ros`) — golden only.\n // Pass the dataset so the serializer can resolve stat lines / weapons /\n // abilities; there's no importer, so no round-trip input.\n for (const { format, goldenName } of EXPORT_ONLY_DATASET_FORMATS) {\n writeText(join(caseDir, goldenName), exportRoster(seed, format, ds));\n }\n\n // Rosterizer JSON export + a derived round-trip input. The exporter is\n // deterministic and round-trips through the adapter, so emitting it as\n // both `expected.rosterizer.json` and `input.rosterizer.json` pins the\n // cross-implementation goldens and the importer regression at the same\n // time. Same NewRecruit-seed gate as the text formats — multi-force\n // ListForge fixtures lose their provisional leader-attachment under\n // round-trip, so they only get the export golden, not the derived input.\n const rosterizerOut = exportRoster(seed, \"rosterizer\");\n writeJson(join(caseDir, \"expected.rosterizer.json\"), JSON.parse(rosterizerOut));\n if (isNewRecruitSeed) {\n writeJson(join(caseDir, \"input.rosterizer.json\"), JSON.parse(rosterizerOut));\n }\n\n console.log(\n `roster/${entry.name}: ${seed.units.length} units, ${seed.diagnostics.warnings.length} warnings`,\n );\n }\n}\n\n/**\n * Linked-API query cases. Each descriptor names a query method on Dataset, the\n * args to call it with, and how the result should be compared.\n *\n * `comparison: \"ordered\"` pins the result order — used for queries that iterate\n * a data-driven array (`unit.ability_ids`, `unit.weapon_ids`) where order is\n * encoded in the data and both implementations iterate it the same way.\n *\n * `comparison: \"set\"` pins only the set of ids — used for queries that walk an\n * index (faction → abilities, ability → phases) where iteration order depends\n * on dataset bundler internals and is incidental. Ids are sorted before\n * comparison.\n *\n * `comparison: \"scalar\"` pins a single id-or-null result (find_* and\n * faction_of(unit)).\n */\ntype LinkedApiQuery =\n | { name: string; query: \"find_unit\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"find_weapon\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"find_faction\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"find_ability\"; args: { query: string }; comparison: \"scalar\" }\n | { name: string; query: \"abilities_of\"; args: { unitId: string }; comparison: \"ordered\" }\n | { name: string; query: \"weapons_of\"; args: { unitId: string }; comparison: \"ordered\" }\n | { name: string; query: \"phases_of\"; args: { abilityId: string }; comparison: \"set\" }\n | { name: string; query: \"faction_of\"; args: { unitId: string }; comparison: \"scalar\" }\n | { name: string; query: \"abilities_of_faction\"; args: { factionId: string }; comparison: \"set\" }\n | { name: string; query: \"weapons_of_faction\"; args: { factionId: string }; comparison: \"set\" }\n | { name: string; query: \"logo_url_of_faction\"; args: { factionId: string }; comparison: \"scalar\" }\n | { name: string; query: \"base_size_of\"; args: { unitId: string }; comparison: \"scalar\" }\n | { name: string; query: \"model_bases_of\"; args: { unitId: string }; comparison: \"ordered\" }\n | { name: string; query: \"base_loadout\"; args: { unitId: string; modelCount: string }; comparison: \"set\" }\n | { name: string; query: \"units_with_keyword\"; args: { keyword: string }; comparison: \"set\" }\n | {\n name: string;\n query: \"allies_for\";\n args: { factionId: string; detachmentIds?: string[] };\n comparison: \"ordered\";\n }\n | { name: string; query: \"ally_units_for\"; args: { ruleId: string }; comparison: \"set\" }\n | { name: string; query: \"leaders_attachable_to\"; args: { bodyguardId: string }; comparison: \"set\" }\n | { name: string; query: \"bodyguards_attachable_from\"; args: { leaderId: string }; comparison: \"set\" }\n | { name: string; query: \"reactive_trigger_ability_ids\"; args: Record<string, never>; comparison: \"ordered\" }\n | { name: string; query: \"events_with_triggers\"; args: Record<string, never>; comparison: \"ordered\" }\n | { name: string; query: \"triggers_for_event\"; args: { event: string }; comparison: \"ordered\" }\n | { name: string; query: \"get_enhancement\"; args: { id: string }; comparison: \"scalar\" };\n\nconst LINKED_API_QUERIES: LinkedApiQuery[] = [\n // find_unit: diacritic-insensitive lookup, miss returns null.\n { name: \"find_unit by diacritic name\", query: \"find_unit\", args: { query: \"Kharn\" }, comparison: \"scalar\" },\n { name: \"find_unit miss returns null\", query: \"find_unit\", args: { query: \"not-a-real-unit-xyz\" }, comparison: \"scalar\" },\n // find_weapon: hyphen + space tolerance.\n { name: \"find_weapon by name\", query: \"find_weapon\", args: { query: \"bolt rifle\" }, comparison: \"scalar\" },\n // find_faction: punctuation/diacritic tolerance.\n { name: \"find_faction by display name\", query: \"find_faction\", args: { query: \"World Eaters\" }, comparison: \"scalar\" },\n // find_ability: ability name lookup.\n { name: \"find_ability by name\", query: \"find_ability\", args: { query: \"Berzerker Frenzy\" }, comparison: \"scalar\" },\n // get_enhancement: exact id, a since-renamed id resolved via the share-registry\n // alias map (old id → current id), and a miss. Pins renamed-id resolution so a\n // persisted roster/share link authored before an enhancement id was normalized\n // to the RAW GW form still resolves to the current record.\n { name: \"get_enhancement direct hit\", query: \"get_enhancement\", args: { id: \"a-chink-in-their-armour-host-of-ascension\" }, comparison: \"scalar\" },\n { name: \"get_enhancement resolves a renamed id via alias\", query: \"get_enhancement\", args: { id: \"a-chink-in-their-armour\" }, comparison: \"scalar\" },\n { name: \"get_enhancement miss returns null\", query: \"get_enhancement\", args: { id: \"not-a-real-enhancement-xyz\" }, comparison: \"scalar\" },\n // abilities_of(unit): ordered, iterates unit.ability_ids array.\n { name: \"abilities_of intercessor-squad\", query: \"abilities_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"ordered\" },\n { name: \"abilities_of kharn-the-betrayer\", query: \"abilities_of\", args: { unitId: \"kharn-the-betrayer\" }, comparison: \"ordered\" },\n // weapons_of(unit): ordered, iterates unit.weapon_ids array.\n { name: \"weapons_of intercessor-squad\", query: \"weapons_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"ordered\" },\n { name: \"weapons_of kharn-the-betrayer\", query: \"weapons_of\", args: { unitId: \"kharn-the-betrayer\" }, comparison: \"ordered\" },\n // phases_of(ability): compared as set (phase index iteration order is incidental).\n { name: \"phases_of berzerker-frenzy\", query: \"phases_of\", args: { abilityId: \"berzerker-frenzy\" }, comparison: \"set\" },\n // faction_of(unit): scalar id or null.\n { name: \"faction_of intercessor-squad\", query: \"faction_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"scalar\" },\n // abilities_of_faction: compared as set (collection-index order is incidental).\n { name: \"abilities_of_faction world-eaters\", query: \"abilities_of_faction\", args: { factionId: \"world-eaters\" }, comparison: \"set\" },\n // weapons_of_faction: compared as set.\n { name: \"weapons_of_faction world-eaters\", query: \"weapons_of_faction\", args: { factionId: \"world-eaters\" }, comparison: \"set\" },\n // logo_url_of_faction: scalar logo URL string, or null if unset.\n { name: \"logo_url_of_faction adepta-sororitas\", query: \"logo_url_of_faction\", args: { factionId: \"adepta-sororitas\" }, comparison: \"scalar\" },\n // base_size_of(unit): scalar encoded base — round, oval, and a draft flying-base.\n { name: \"base_size_of intercessor-squad\", query: \"base_size_of\", args: { unitId: \"intercessor-squad\" }, comparison: \"scalar\" },\n { name: \"base_size_of vertus-praetors\", query: \"base_size_of\", args: { unitId: \"vertus-praetors\" }, comparison: \"scalar\" },\n { name: \"base_size_of windriders (draft flying base)\", query: \"base_size_of\", args: { unitId: \"windriders\" }, comparison: \"scalar\" },\n // model_bases_of(unit): ordered per-model bases; jakhals mixes 28.5mm bodies with a 40mm Dishonoured.\n { name: \"model_bases_of jakhals (mixed)\", query: \"model_bases_of\", args: { unitId: \"jakhals\" }, comparison: \"ordered\" },\n // units_with_keyword: case-insensitive over keywords ∪ faction_keywords; compared as set.\n { name: \"units_with_keyword Khorne\", query: \"units_with_keyword\", args: { keyword: \"Khorne\" }, comparison: \"set\" },\n { name: \"units_with_keyword damned (lowercase)\", query: \"units_with_keyword\", args: { keyword: \"damned\" }, comparison: \"set\" },\n // allies_for: two-gate offer; ordered (allied-rules data-file order, locale-independent).\n { name: \"allies_for chaos-knights (no detachment)\", query: \"allies_for\", args: { factionId: \"chaos-knights\" }, comparison: \"ordered\" },\n { name: \"allies_for chaos-knights with iconoclast-fiefdom\", query: \"allies_for\", args: { factionId: \"chaos-knights\", detachmentIds: [\"iconoclast-fiefdom\"] }, comparison: \"ordered\" },\n { name: \"allies_for world-eaters (no detachment → chaos-knights-allies)\", query: \"allies_for\", args: { factionId: \"world-eaters\" }, comparison: \"ordered\" },\n { name: \"allies_for world-eaters with khorne-daemonkin\", query: \"allies_for\", args: { factionId: \"world-eaters\", detachmentIds: [\"khorne-daemonkin\"] }, comparison: \"ordered\" },\n { name: \"allies_for imperial-knights (no detachment)\", query: \"allies_for\", args: { factionId: \"imperial-knights\" }, comparison: \"ordered\" },\n { name: \"allies_for imperial-knights with questor-forgepact\", query: \"allies_for\", args: { factionId: \"imperial-knights\", detachmentIds: [\"questor-forgepact\"] }, comparison: \"ordered\" },\n { name: \"allies_for genestealer-cults with final-day\", query: \"allies_for\", args: { factionId: \"genestealer-cults\", detachmentIds: [\"final-day\"] }, comparison: \"ordered\" },\n // Cross-namespace host gates: Aeldari armies carry the Asuryani faction keyword, Chaos Daemons the Legiones Daemonica one.\n { name: \"allies_for aeldari (no detachment → harlequins)\", query: \"allies_for\", args: { factionId: \"aeldari\" }, comparison: \"ordered\" },\n { name: \"allies_for aeldari with devoted-of-ynnead\", query: \"allies_for\", args: { factionId: \"aeldari\", detachmentIds: [\"devoted-of-ynnead\"] }, comparison: \"ordered\" },\n { name: \"allies_for chaos-daemons with shadow-legion\", query: \"allies_for\", args: { factionId: \"chaos-daemons\", detachmentIds: [\"shadow-legion\"] }, comparison: \"ordered\" },\n // ally_units_for: resolved pool; compared as set (accessor sorts by name, locale-dependent).\n { name: \"ally_units_for iconoclast-fiefdom-damned\", query: \"ally_units_for\", args: { ruleId: \"iconoclast-fiefdom-damned\" }, comparison: \"set\" },\n { name: \"ally_units_for world-eaters-khorne-daemons\", query: \"ally_units_for\", args: { ruleId: \"world-eaters-khorne-daemons\" }, comparison: \"set\" },\n { name: \"ally_units_for star-childrens-blessings (Vanguard Invader allowlist)\", query: \"ally_units_for\", args: { ruleId: \"star-childrens-blessings\" }, comparison: \"set\" },\n { name: \"ally_units_for imperial-knights-questor-forgepact (5 AdMech datasheets)\", query: \"ally_units_for\", args: { ruleId: \"imperial-knights-questor-forgepact\" }, comparison: \"set\" },\n { name: \"ally_units_for agents-of-the-imperium-allies (29 datasheets)\", query: \"ally_units_for\", args: { ruleId: \"agents-of-the-imperium-allies\" }, comparison: \"set\" },\n { name: \"ally_units_for chaos-knights-allies (20 datasheets)\", query: \"ally_units_for\", args: { ruleId: \"chaos-knights-allies\" }, comparison: \"set\" },\n // leader attachment (both directions); compared as set (accessors sort by name).\n // inquisitor-draxus mixes explicit eligible_bodyguard_ids with keyword eligibility\n // (Imperium ∧ Battleline ∧ Infantry), so the expected pool is her 6 Agents units\n // plus every Imperium Battleline Infantry datasheet. kharn-the-betrayer has no\n // keyword rule (id-list only) — the baseline that keyword logic must not perturb.\n { name: \"bodyguards_attachable_from inquisitor-draxus (id-list + Imperium Battleline Infantry keywords)\", query: \"bodyguards_attachable_from\", args: { leaderId: \"inquisitor-draxus\" }, comparison: \"set\" },\n { name: \"bodyguards_attachable_from kharn-the-betrayer (id-list only)\", query: \"bodyguards_attachable_from\", args: { leaderId: \"kharn-the-betrayer\" }, comparison: \"set\" },\n { name: \"leaders_attachable_to cadian-shock-troops (Battleline → includes inquisitor-draxus)\", query: \"leaders_attachable_to\", args: { bodyguardId: \"cadian-shock-troops\" }, comparison: \"set\" },\n { name: \"leaders_attachable_to kasrkin (not Battleline → excludes inquisitor-draxus)\", query: \"leaders_attachable_to\", args: { bodyguardId: \"kasrkin\" }, comparison: \"set\" },\n // base_loadout(unit, modelCount): the pinned legal default loadout, encoded as a\n // sorted \"weaponId:count\" multiset. chaos-terminators is a uniform squad (per-model\n // scaling); crusader-squad exercises leader+bulk per-figure allocation.\n { name: \"base_loadout chaos-terminators @5 (legal default, no swaps)\", query: \"base_loadout\", args: { unitId: \"chaos-terminators\", modelCount: \"5\" }, comparison: \"set\" },\n { name: \"base_loadout chaos-terminators @10 scales per model\", query: \"base_loadout\", args: { unitId: \"chaos-terminators\", modelCount: \"10\" }, comparison: \"set\" },\n { name: \"base_loadout crusader-squad @10 exercises leader+bulk allocation\", query: \"base_loadout\", args: { unitId: \"crusader-squad\", modelCount: \"10\" }, comparison: \"set\" },\n // reactive triggers: reactiveTriggers() sorts by ability id; triggerIndex() keys are\n // event-sorted and each bucket ability-id-sorted, so all three are order-pinned.\n { name: \"reactive_trigger_ability_ids (all triggered abilities)\", query: \"reactive_trigger_ability_ids\", args: {}, comparison: \"ordered\" },\n { name: \"events_with_triggers (index keys)\", query: \"events_with_triggers\", args: {}, comparison: \"ordered\" },\n { name: \"triggers_for_event start-of-phase\", query: \"triggers_for_event\", args: { event: \"start-of-phase\" }, comparison: \"ordered\" },\n { name: \"triggers_for_event on-unit-selected\", query: \"triggers_for_event\", args: { event: \"on-unit-selected\" }, comparison: \"ordered\" },\n];\n\nfunction genLinkedApi(): void {\n const ds = Dataset.embedded();\n const cases = LINKED_API_QUERIES.map((q) => {\n const expected = runLinkedQuery(ds, q);\n return { ...q, expected };\n });\n writeJson(join(CONFORMANCE, \"linked-api\", \"cases.json\"), cases);\n console.log(`linked-api/cases.json: ${cases.length} cases`);\n}\n\nfunction runLinkedQuery(ds: Dataset, q: LinkedApiQuery): string | null | string[] {\n switch (q.query) {\n case \"find_unit\":\n return ds.units.find(q.args.query)?.id ?? null;\n case \"find_weapon\":\n return ds.weapons.find(q.args.query)?.id ?? null;\n case \"find_faction\":\n return ds.factions.find(q.args.query)?.id ?? null;\n case \"find_ability\":\n return ds.abilities.find(q.args.query)?.id ?? null;\n case \"get_enhancement\":\n return ds.enhancements.get(q.args.id)?.id ?? null;\n case \"abilities_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`abilities_of: unknown unit ${q.args.unitId}`);\n return u.abilities.map((a) => a.id);\n }\n case \"weapons_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`weapons_of: unknown unit ${q.args.unitId}`);\n return u.weapons.map((w) => w.id);\n }\n case \"phases_of\": {\n const a = ds.abilities.getAny(q.args.abilityId);\n if (!a) throw new Error(`phases_of: unknown ability ${q.args.abilityId}`);\n return [...a.phases].sort();\n }\n case \"faction_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`faction_of: unknown unit ${q.args.unitId}`);\n return u.faction?.id ?? null;\n }\n case \"abilities_of_faction\":\n return ds.abilities.byFaction(q.args.factionId).map((a) => a.id).sort();\n case \"weapons_of_faction\": {\n // Mirrors Rust `weapons_of_faction`: aggregate weapons across the\n // faction's units and dedupe by id. The collection-level\n // `weapons.byFaction()` is a different operation (it looks up weapons\n // whose own `faction_id` is set, which is empty for most factions).\n const f = ds.factions.get(q.args.factionId);\n if (!f) throw new Error(`weapons_of_faction: unknown faction ${q.args.factionId}`);\n return f.weapons.map((w) => w.id).sort();\n }\n case \"logo_url_of_faction\": {\n const f = ds.factions.get(q.args.factionId);\n if (!f) throw new Error(`logo_url_of_faction: unknown faction ${q.args.factionId}`);\n return f.logoUrl ?? null;\n }\n case \"base_size_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`base_size_of: unknown unit ${q.args.unitId}`);\n return encodeBase(u.raw.base_size_mm);\n }\n case \"model_bases_of\": {\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`model_bases_of: unknown unit ${q.args.unitId}`);\n const comp = ds.unitCompositions.find((c) => c.unit_id === q.args.unitId);\n return (comp?.models ?? []).map((m) => `${m.name}=${encodeBase(m.base_size_mm) ?? \"none\"}`);\n }\n case \"base_loadout\": {\n // Mirrors the runner's base_loadout op: the legal default loadout encoded as\n // a sorted \"id:count\" multiset (set-compared).\n const u = ds.units.getAny(q.args.unitId);\n if (!u) throw new Error(`base_loadout: unknown unit ${q.args.unitId}`);\n const comp = ds.unitCompositions.find((c) => c.unit_id === q.args.unitId);\n const lo = baseLoadout(u.raw, Number(q.args.modelCount), ds.wargearOptionsOf(u.raw), comp?.models);\n return [...lo.counts].map(([id, n]) => `${id}:${n}`).sort();\n }\n case \"units_with_keyword\":\n return ds.unitsWithKeyword(q.args.keyword).map((u) => u.id).sort();\n case \"allies_for\":\n // Ordered: allied-rules data-file order (deterministic across impls).\n return ds.alliesFor(q.args.factionId, q.args.detachmentIds ?? []).map((r) => r.id);\n case \"ally_units_for\":\n return ds.allyUnitsFor(q.args.ruleId).map((u) => u.id).sort();\n case \"leaders_attachable_to\":\n return ds.leadersAttachableTo(q.args.bodyguardId).map((u) => u.id).sort();\n case \"bodyguards_attachable_from\":\n return ds.bodyguardsAttachableFrom(q.args.leaderId).map((u) => u.id).sort();\n case \"reactive_trigger_ability_ids\":\n return ds.reactiveTriggers().map((rt) => rt.abilityId);\n case \"events_with_triggers\":\n return [...ds.triggerIndex().keys()];\n case \"triggers_for_event\":\n return (ds.triggerIndex().get(q.args.event as GameEvent) ?? []).map((rt) => rt.abilityId);\n }\n}\n\n/**\n * Attribution corpus: reuses the existing cruncher inputs from the cases that\n * carry at least one groupable buff (ability or manual). The expected shape\n * is the AttributedStage array produced by attributeStages; both\n * implementations of the leave-one-out decomposition must reproduce it\n * within the per-stage float tolerance.\n */\nconst ATTRIBUTION_CASE_FILES = [\n \"05-anti-infantry-vs-cultist.json\",\n \"07-twin-linked-heavy-stationary-vs-knight.json\",\n];\n\ninterface CruncherCaseInput {\n name: string;\n attacker: { weaponId: string; profileIndex: number };\n modelsFiring: number;\n target: { unitId: string; profileIndex: number; modelCount?: number };\n context: EngineInput[\"context\"];\n buffs: EngineInput[\"buffs\"];\n}\n\nfunction loadAttributionInput(ds: Dataset, filename: string): {\n name: string;\n input: EngineInput;\n} {\n const path = join(CONFORMANCE, \"cruncher\", filename);\n const c = JSON.parse(readFileSync(path, \"utf8\")) as CruncherCaseInput;\n const weapon = ds.weapons.getAny(c.attacker.weaponId);\n const unit = ds.units.getAny(c.target.unitId);\n if (!weapon) throw new Error(`attribution: unknown weapon ${c.attacker.weaponId}`);\n if (!unit) throw new Error(`attribution: unknown unit ${c.target.unitId}`);\n return {\n name: c.name,\n input: {\n attacker: { weapon: weapon.raw, profileIndex: c.attacker.profileIndex },\n target: {\n unit: unit.raw,\n profileIndex: c.target.profileIndex,\n ...(c.target.modelCount !== undefined ? { modelCount: c.target.modelCount } : {}),\n },\n modelsFiring: c.modelsFiring,\n buffs: c.buffs,\n context: c.context,\n },\n };\n}\n\nfunction genAttribution(): void {\n const ds = Dataset.embedded();\n const cases = ATTRIBUTION_CASE_FILES.map((filename, idx) => {\n const { name, input } = loadAttributionInput(ds, filename);\n const stages = attributeStages(input, ds);\n return {\n // Persist the input by file reference so the corpus stays a single\n // source of truth — the cruncher case file already pins the EngineInput.\n name,\n cruncher_case: filename,\n expected: stages.map((s) => ({\n name: s.name,\n expected: s.expected,\n baseline: s.baseline,\n lifts: s.lifts.map((l) => ({ source: l.source, delta: l.delta })),\n residual: s.residual,\n intrinsics: s.intrinsics,\n })),\n // Stable ordering of cases in the corpus file.\n _order: idx,\n };\n });\n // Sort by _order and strip the helper before writing.\n cases.sort((a, b) => a._order - b._order);\n const serialised = cases.map(({ _order: _o, ...rest }) => rest);\n writeJson(join(CONFORMANCE, \"attribution\", \"cases.json\"), serialised);\n console.log(`attribution/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Scoring-card translation corpus: humanize each primary mission card's\n * `awards` into plain English. The TS translator is the oracle; the Rust port\n * must reproduce every string byte-for-byte (the differ compares structurally,\n * no tolerance). Only `card_type: \"primary\"` cards are pinned — the 14-card\n * secondary deck isn't revealed yet. Cases are sorted by id for stability, and\n * the `awards` array order within each card is load-bearing.\n */\nfunction genScoringTranslation(): void {\n const ds = Dataset.embedded();\n mkdirSync(join(CONFORMANCE, \"scoring-translation\"), { recursive: true });\n // Pin the translation of every mission card's awards — primary and secondary\n // alike (the secondary deck has the same `awards` shape and deserves the same\n // cross-impl pinning).\n const cases = ds.missionCards.all\n .filter((c) => c.card_type === \"primary\" || c.card_type === \"secondary\")\n .slice()\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map((card) => ({ cardId: card.id, expected: { awards: describeScoringCard(card) } }));\n writeJson(join(CONFORMANCE, \"scoring-translation\", \"cases.json\"), cases);\n console.log(`scoring-translation/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Scoring-engine corpus: pin the pure VP arithmetic of the scoring engine\n * (`tools/src/scoring/` — the oracle) so the Rust `wh40kdc::scoring` port\n * reproduces it. Three ops, each case `{ name, op, args, expected }`:\n *\n * - `score_event` — per card and approach, assert every award matching the\n * approach (by its full-`awards`-array index). Pins `scoreAward`, `scoreTurn`\n * (exclusive-group \"highest only\", `vp_per × count` clamped to `per_max`,\n * cumulative sums), `scoreCap` (tactical 5 vs fixed `vp_max`/uncapped), and\n * `scoreSecondaryEvent`; primary cards also carry a `roundCap` to pin\n * `scorePrimaryEvent`. `cap: null` means uncapped (Infinity has no JSON form).\n * - `score_state` — replay scenarios over a `PlayerGame`, pinning the per-round\n * cap (15), per-game primary cap (45), grand-total cap (100), score+discard,\n * and undo.\n * - `wtc_result` — the 20-point band mapping across its boundaries.\n *\n * Goldens are produced by driving the TS runner's own `dispatch`, so the corpus\n * and the runner agree by construction; the cross-impl contract is the Rust\n * runner reproducing them. Integers are compared exactly (no tolerance).\n */\nfunction genScoring(): void {\n const ds = Dataset.embedded();\n mkdirSync(join(CONFORMANCE, \"scoring\"), { recursive: true });\n\n // One initialized runner state, reused across cases (the ops don't mutate it).\n const specVersion = Number.parseInt(\n readFileSync(join(CONFORMANCE, \"SPEC_VERSION\"), \"utf8\").trim(),\n 10,\n );\n const state = createRunnerState();\n const init = dispatch(state, {\n op: \"init\",\n args: { spec_version: specVersion, locale: \"C\", tz: \"UTC\", seed: 0 },\n });\n if (!init.ok) throw new Error(`gen scoring: init failed: ${JSON.stringify(init)}`);\n const run = (op: string, args: unknown): unknown => {\n const r = dispatch(state, { op, args });\n if (!r.ok) throw new Error(`gen scoring: ${op} failed: ${JSON.stringify(r)} for ${JSON.stringify(args)}`);\n return r.value;\n };\n\n type Case = { name: string; op: string; args: unknown; expected: unknown };\n const cases: Case[] = [];\n\n // score_event: every mission card, both approaches. Assert the approach's\n // awards by their full-array index; count vp_per awards to their per_max\n // (else 2) so the cap logic actually bites.\n const cards = ds.missionCards.all\n .slice()\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));\n for (const card of cards) {\n for (const approach of [\"fixed\", \"tactical\"] as const) {\n const asserted = awardsOf(card)\n .map((aw, index) => ({ aw, index }))\n .filter(({ aw }) => aw.mode == null || aw.mode === approach)\n .map(({ aw, index }) =>\n aw.vp_per != null ? { index, count: aw.per_max ?? 2 } : { index },\n );\n const args: Record<string, unknown> = { cardId: card.id, approach, asserted };\n if (card.card_type === \"primary\") args.roundCap = 15;\n cases.push({\n name: `score_event/${card.id}/${approach}`,\n op: \"score_event\",\n args,\n expected: run(\"score_event\", args),\n });\n }\n }\n\n // score_state: hand-authored replay scenarios. Card ids are real deck/mission\n // cards; expected state is whatever the engine produces.\n const stateScenarios: { name: string; args: unknown }[] = [\n {\n name: \"primary-round-and-game-caps\",\n args: {\n approach: \"tactical\",\n ops: [\n { kind: \"set-primary\", round: 1, vp: 30, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 2, vp: 30, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 3, vp: 30, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 4, vp: 30, roundCap: 15, gameCap: 45 },\n ],\n },\n },\n {\n // The full primary path: a card's raw round total, clamped to the round\n // cap on store, then cleared back to 0 by a set-primary 0.\n name: \"score-primary-then-clear\",\n args: {\n approach: \"tactical\",\n ops: [\n {\n kind: \"score-primary\",\n cardId: \"battlefield-dominance\",\n round: 2,\n asserted: awardsOf(ds.missionCards.get(\"battlefield-dominance\")!).map((aw, index) =>\n aw.vp_per != null ? { index, count: aw.per_max ?? 3 } : { index },\n ),\n roundCap: 15,\n gameCap: 45,\n },\n { kind: \"set-primary\", round: 3, vp: 99, roundCap: 15, gameCap: 45 },\n { kind: \"set-primary\", round: 2, vp: 0, roundCap: 15, gameCap: 45 },\n ],\n },\n },\n {\n name: \"secondary-score-and-undo\",\n args: {\n approach: \"tactical\",\n ops: [\n { kind: \"draw\", cardId: \"no-prisoners\" },\n { kind: \"score-secondary\", cardId: \"no-prisoners\", round: 2, asserted: [{ index: 0, count: 3 }] },\n { kind: \"remove-score\", index: 0 },\n ],\n },\n },\n {\n // Uncapped set-primary (no caps) overshoots so the 100 grand-total cap bites.\n name: \"grand-total-cap-at-100\",\n args: {\n approach: \"tactical\",\n ops: [\n { kind: \"set-primary\", round: 1, vp: 30 },\n { kind: \"set-primary\", round: 2, vp: 30 },\n { kind: \"set-primary\", round: 3, vp: 30 },\n { kind: \"set-primary\", round: 4, vp: 30 },\n { kind: \"set-primary\", round: 5, vp: 30 },\n { kind: \"draw\", cardId: \"no-prisoners\" },\n { kind: \"score-secondary\", cardId: \"no-prisoners\", round: 5, asserted: [{ index: 0, count: 99 }] },\n ],\n },\n },\n ];\n for (const s of stateScenarios) {\n cases.push({ name: `score_state/${s.name}`, op: \"score_state\", args: s.args, expected: run(\"score_state\", s.args) });\n }\n\n // wtc_result: band boundaries and symmetry.\n const wtcPairs: [number, number][] = [\n [50, 50],\n [48, 45],\n [45, 50],\n [56, 50],\n [50, 61],\n [100, 50],\n [100, 49],\n [0, 100],\n [60, 40],\n [55, 50],\n ];\n for (const [a, b] of wtcPairs) {\n const args = { a, b };\n cases.push({ name: `wtc_result/${a}-${b}`, op: \"wtc_result\", args, expected: run(\"wtc_result\", args) });\n }\n\n writeJson(join(CONFORMANCE, \"scoring\", \"cases.json\"), cases);\n console.log(`scoring/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Terrain-resolver corpus: resolve template-anchored layouts to absolute\n * board-space vertices (y-down inches). The TS resolver is the oracle; the Rust\n * port must reproduce every vertex within 5e-4 (per-area invariant in\n * CONFORMANCE.md). Cases are self-contained — each carries its own `templates`\n * and `layout` — so the corpus does not depend on the bundled catalog and the\n * runner op can pass both in `args`. Coverage: per-template centroid anchoring\n * (identity), cardinal + oblique rotations, both mirror axes on an asymmetric\n * shape, embedded-feature composition, explicit parenting, and the inline\n * footprint escape hatch.\n */\nfunction genTerrainResolver(): void {\n mkdirSync(join(CONFORMANCE, \"terrain-resolver\"), { recursive: true });\n\n const areaLarge: ResolverTemplate = {\n id: \"area-large\",\n name: \"Large Area\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 11.5, height: 7 },\n };\n const areaMedium: ResolverTemplate = {\n id: \"area-medium\",\n name: \"Medium Area\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 6, height: 4 },\n };\n const areaTrapezoid: ResolverTemplate = {\n id: \"area-trapezoid\",\n name: \"Trapezoid Area\",\n kind: \"area\",\n footprint: {\n type: \"polygon\",\n points: [\n { x: 0, y: 0 },\n { x: 8, y: 0 },\n { x: 2, y: 11.5 },\n { x: 0, y: 11.5 },\n ],\n },\n };\n const wedge: ResolverTemplate = {\n id: \"wedge\",\n name: \"Right Wedge\",\n kind: \"area\",\n footprint: { type: \"right-triangle\", width: 8, height: 11.5 },\n };\n const wallLong: ResolverTemplate = {\n id: \"wall-long\",\n name: \"Long Wall\",\n kind: \"feature\",\n footprint: { type: \"rectangle\", width: 7, height: 0.25 },\n };\n const ruinComposed: ResolverTemplate = {\n id: \"ruin-composed\",\n name: \"Composed Ruin\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 11.5, height: 7 },\n features: [\n { id: \"back-wall\", template: \"wall-long\", position: { x: 0, y: -3 } },\n { id: \"side-wall\", template: \"wall-long\", position: { x: -5, y: 0 }, rotation_degrees: 90, mirror: \"horizontal\" },\n ],\n };\n\n const baseCatalog = [areaLarge, areaMedium, areaTrapezoid, wedge, wallLong];\n\n const layoutCases: { name: string; templates: ResolverTemplate[]; layout: ResolverLayout }[] = [\n {\n name: \"identity-large\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-large\", position: { x: 30, y: 22 } }] },\n },\n {\n name: \"identity-wedge\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"wedge\", position: { x: 12, y: 30 } }] },\n },\n {\n name: \"identity-trapezoid\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 40, y: 18 } }] },\n },\n {\n name: \"rotate-medium-90\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-medium\", position: { x: 30, y: 22 }, rotation_degrees: 90 }] },\n },\n {\n name: \"rotate-medium-180\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-medium\", position: { x: 30, y: 22 }, rotation_degrees: 180 }] },\n },\n {\n name: \"rotate-medium-270\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-medium\", position: { x: 30, y: 22 }, rotation_degrees: 270 }] },\n },\n {\n name: \"rotate-large-oblique-55\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-large\", position: { x: 30, y: 22 }, rotation_degrees: 55 }] },\n },\n {\n name: \"rotate-trapezoid-oblique-235\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 35.75, y: 27 }, rotation_degrees: 235 }] },\n },\n {\n name: \"mirror-trapezoid-horizontal\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 40, y: 18 }, mirror: \"horizontal\" }] },\n },\n {\n name: \"mirror-trapezoid-vertical-rot90\",\n templates: baseCatalog,\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"p\", template: \"area-trapezoid\", position: { x: 40, y: 18 }, rotation_degrees: 90, mirror: \"vertical\" }] },\n },\n {\n name: \"composition-ruin-rot90-mirror-h\",\n templates: [ruinComposed, wallLong],\n layout: { id: \"c\", name: \"c\", pieces: [{ id: \"a1\", template: \"ruin-composed\", position: { x: 30, y: 22 }, rotation_degrees: 90, mirror: \"horizontal\" }] },\n },\n {\n name: \"explicit-parent-feature\",\n templates: [areaLarge, wallLong],\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n { id: \"a1\", template: \"area-large\", position: { x: 30, y: 22 }, rotation_degrees: 90, mirror: \"horizontal\" },\n { id: \"back-wall\", template: \"wall-long\", parent_area_id: \"a1\", position: { x: 0, y: -3 } },\n ],\n },\n },\n {\n name: \"inline-footprint-polygon\",\n templates: [],\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n footprint: { type: \"polygon\", points: [{ x: 0, y: 0 }, { x: 4, y: 0 }, { x: 2, y: 5 }] },\n position: { x: 50, y: 40 },\n rotation_degrees: 30,\n },\n ],\n },\n },\n ];\n\n const cases = layoutCases.map((c) => ({\n name: c.name,\n templates: c.templates,\n layout: c.layout,\n expected: { pieces: resolveLayout(c.layout, c.templates) },\n }));\n writeJson(join(CONFORMANCE, \"terrain-resolver\", \"cases.json\"), cases);\n console.log(`terrain-resolver/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Terrain-keystones corpus: derive the printed distance of each authored\n * keystone (board edge → piece feature) from resolved geometry. The TS helper\n * is the oracle; the Rust port must reproduce every distance within 5e-4.\n * Cases are self-contained like the resolver corpus. Coverage: all four\n * edges, vertex and bounding-face refs, an oblique rotation, a mirrored\n * asymmetric shape, a parented feature (composition through the parent\n * frame), an inline footprint, and a custom board size.\n */\nfunction genTerrainKeystones(): void {\n mkdirSync(join(CONFORMANCE, \"terrain-keystones\"), { recursive: true });\n\n const areaLarge: ResolverTemplate = {\n id: \"area-large\",\n name: \"Large Area\",\n kind: \"area\",\n footprint: { type: \"rectangle\", width: 11.5, height: 7 },\n };\n const areaTrapezoid: ResolverTemplate = {\n id: \"area-trapezoid\",\n name: \"Trapezoid Area\",\n kind: \"area\",\n footprint: {\n type: \"polygon\",\n points: [\n { x: 0, y: 0 },\n { x: 8, y: 0 },\n { x: 2, y: 11.5 },\n { x: 0, y: 11.5 },\n ],\n },\n };\n const wallLong: ResolverTemplate = {\n id: \"wall-long\",\n name: \"Long Wall\",\n kind: \"feature\",\n footprint: { type: \"rectangle\", width: 7, height: 0.25 },\n };\n const catalog = [areaLarge, areaTrapezoid, wallLong];\n\n const keystoneCases: {\n name: string;\n templates: ResolverTemplate[];\n layout: ResolverLayout;\n board?: { width: number; height: number };\n }[] = [\n {\n name: \"identity-four-edges-vertices\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-large\",\n position: { x: 30, y: 22 },\n keystones: [\n { edge: \"left\", ref: { kind: \"vertex\", index: 0 } },\n { edge: \"top\", ref: { kind: \"vertex\", index: 1 } },\n { edge: \"right\", ref: { kind: \"vertex\", index: 2 } },\n { edge: \"bottom\", ref: { kind: \"vertex\", index: 3 } },\n ],\n },\n ],\n },\n },\n {\n name: \"identity-bounding-faces\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-large\",\n position: { x: 20, y: 30 },\n keystones: [\n { edge: \"left\", ref: { kind: \"face\", side: \"min-x\" } },\n { edge: \"right\", ref: { kind: \"face\", side: \"max-x\" } },\n { edge: \"top\", ref: { kind: \"face\", side: \"min-y\" } },\n { edge: \"bottom\", ref: { kind: \"face\", side: \"max-y\" } },\n ],\n },\n ],\n },\n },\n {\n name: \"oblique-rotation-vertex\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-trapezoid\",\n position: { x: 35.75, y: 27 },\n rotation_degrees: 235,\n keystones: [\n { edge: \"left\", ref: { kind: \"vertex\", index: 2 } },\n { edge: \"bottom\", ref: { kind: \"face\", side: \"max-y\" } },\n ],\n },\n ],\n },\n },\n {\n name: \"mirrored-trapezoid-vertex\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-trapezoid\",\n position: { x: 40, y: 18 },\n mirror: \"horizontal\",\n keystones: [\n { edge: \"right\", ref: { kind: \"vertex\", index: 1 } },\n { edge: \"top\", ref: { kind: \"vertex\", index: 0 } },\n ],\n },\n ],\n },\n },\n {\n name: \"parented-feature-keystone\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"a1\",\n template: \"area-large\",\n position: { x: 30, y: 22 },\n rotation_degrees: 90,\n mirror: \"horizontal\",\n keystones: [{ edge: \"left\", ref: { kind: \"vertex\", index: 0 } }],\n },\n {\n id: \"back-wall\",\n template: \"wall-long\",\n parent_area_id: \"a1\",\n position: { x: 0, y: -3 },\n keystones: [\n { edge: \"top\", ref: { kind: \"vertex\", index: 1 } },\n { edge: \"right\", ref: { kind: \"face\", side: \"max-x\" } },\n ],\n },\n ],\n },\n },\n {\n name: \"inline-footprint-keystone\",\n templates: [],\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n footprint: { type: \"polygon\", points: [{ x: 0, y: 0 }, { x: 4, y: 0 }, { x: 2, y: 5 }] },\n position: { x: 50, y: 40 },\n rotation_degrees: 30,\n keystones: [\n { edge: \"right\", ref: { kind: \"vertex\", index: 0 } },\n { edge: \"bottom\", ref: { kind: \"vertex\", index: 2 } },\n ],\n },\n ],\n },\n },\n {\n name: \"custom-board-extents\",\n templates: catalog,\n layout: {\n id: \"c\",\n name: \"c\",\n pieces: [\n {\n id: \"p\",\n template: \"area-large\",\n position: { x: 15, y: 15 },\n keystones: [\n { edge: \"right\", ref: { kind: \"face\", side: \"max-x\" } },\n { edge: \"bottom\", ref: { kind: \"face\", side: \"max-y\" } },\n ],\n },\n ],\n },\n board: { width: 30, height: 22.4 },\n },\n ];\n\n const cases = keystoneCases.map((c) => ({\n name: c.name,\n templates: c.templates,\n layout: c.layout,\n ...(c.board ? { board: c.board } : {}),\n expected: {\n measurements: keystoneMeasurements(c.layout, c.templates, c.board ?? BOARD_INCHES),\n },\n }));\n writeJson(join(CONFORMANCE, \"terrain-keystones\", \"cases.json\"), cases);\n console.log(`terrain-keystones/cases.json: ${cases.length} cases`);\n}\n\n/**\n * Effect-translation corpus: pin the Ability-DSL effect describer\n * (`describeEffect`/`describeAbility` — the \"ability.print()\") across the TS\n * and Rust ports. Cases embed the raw `effect` (+ `scope`) so parity does not\n * depend on collection dup-id resolution; selection greedily covers every\n * effect node type at least once (up to 5 exemplars per type) over the\n * id-sorted ability list, so the corpus stays small but exhaustive by shape.\n */\nfunction genEffectTranslation(): void {\n const ds = Dataset.embedded();\n mkdirSync(join(CONFORMANCE, \"effect-translation\"), { recursive: true });\n\n const collectTypes = (e: unknown, out: Set<string>): void => {\n if (Array.isArray(e)) {\n for (const v of e) collectTypes(v, out);\n return;\n }\n if (typeof e !== \"object\" || e === null) return;\n const rec = e as Record<string, unknown>;\n if (typeof rec.type === \"string\") {\n out.add(rec.type);\n // Variant-aware keys for types whose modifier picks a distinct render\n // branch — the per-type cap alone would leave later-alphabet variants\n // (a psychic-scoped FNP, a rolled pool die) unpinned cross-impl.\n const m = (rec.modifier ?? {}) as Record<string, unknown>;\n if (rec.type === \"feel-no-pain\" && typeof m.scope === \"string\") {\n out.add(`feel-no-pain@${m.scope}`);\n }\n if (rec.type === \"pool-add-die\") {\n const kind = m.value === \"rolled\" || m.value === \"highest\" ? m.value : \"shown\";\n const per = m.count_per_pool != null ? \"@per-pool\" : \"\";\n out.add(`pool-add-die@${kind}${per}`);\n }\n }\n for (const key of [\"effect\", \"on_success\", \"on_fail\", \"steps\", \"options\", \"condition\"]) {\n if (key in rec) collectTypes(rec[key], out);\n }\n };\n\n // One copy per ability id: the collection retains per-faction copies of a\n // shared id, but identical copies would only fill the per-type exemplar\n // caps with redundant cases (pushing out genuinely distinct later-alphabet\n // shapes). First-registered copy wins — the stable sort preserves bundle\n // order within an id, matching the collection's own byId index.\n const seenIds = new Set<string>();\n const abilities = ds.abilities.all\n .slice()\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .filter((a) => (seenIds.has(a.id) ? false : (seenIds.add(a.id), true)));\n\n const seen = new Map<string, number>();\n const CAP = 5;\n // Also cover the `applies_to` render path: force-include a few abilities that\n // carry a curated filter even when their effect-node types are already\n // exhausted, so the trailing `Applies to:` line stays pinned cross-impl.\n const APPLIES_CAP = 3;\n let appliesToSeen = 0;\n const cases: unknown[] = [];\n for (const a of abilities) {\n const types = new Set<string>();\n collectTypes(a.raw.effect, types);\n let fresh = false;\n for (const t of types) {\n if ((seen.get(t) ?? 0) < CAP) fresh = true;\n }\n const coversAppliesTo = a.raw.applies_to != null && appliesToSeen < APPLIES_CAP;\n if (coversAppliesTo) fresh = true;\n if (!fresh) continue;\n for (const t of types) seen.set(t, (seen.get(t) ?? 0) + 1);\n if (a.raw.applies_to != null) appliesToSeen += 1;\n const entry: Record<string, unknown> = {\n caseId: `${a.id}#${cases.length}`,\n effect: a.raw.effect,\n scope: a.raw.scope ?? null,\n };\n if (a.raw.applies_to != null) entry.applies_to = a.raw.applies_to;\n if (a.raw.usage != null) entry.usage = a.raw.usage;\n if (a.raw.trigger != null) entry.trigger = a.raw.trigger;\n entry.expected = {\n text: describeAbility({\n effect: a.raw.effect as Effect,\n scope: a.raw.scope,\n usage: a.raw.usage as AbilityUsage | undefined,\n trigger: a.raw.trigger as AbilityTrigger | undefined,\n applies_to: a.raw.applies_to,\n }),\n };\n cases.push(entry);\n }\n // Pin the scouts movement-modifier — movement-modifier caps out before scouts-6\n // sorts in alphabetically, so force-include one case to keep the new\n // \"Before the first battle round, …\" phrasing pinned cross-impl.\n {\n const fc = {\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"scout\", distance: 6 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n };\n cases.push({\n caseId: `movement-modifier-scouts#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // Pin the curated ability-grant label overrides for the sibling ids — they\n // rarely surface in the capped sample above (ability-grant caps out on the\n // common `charge-after-advance`). Shapes mirror real enrichment data; expected\n // text still comes from the reference describer, so a second impl must\n // independently reproduce it. See ABILITY_GRANT_LABELS in translate/effect.ts.\n const FORCED_GRANT_CASES: { effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n effect: { type: \"ability-grant\", target: \"unit\", modifier: { grant_type: \"charge-after-disembark\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n effect: { type: \"ability-grant\", target: \"self\", modifier: { grant_type: \"charge-after-fallback\" } },\n scope: { range: \"self\", duration: \"turn\" },\n },\n ];\n for (const fc of FORCED_GRANT_CASES) {\n const id = (fc.effect.modifier as Record<string, unknown>).grant_type as string;\n cases.push({\n caseId: `grant-label-${id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // Batch A (describer-only gaps): pin the new condition lead-ins\n // (engagement-state / disposition-matches / fights-first), the `scaling`\n // trailing clause, and the inline dice-pool requirement label cross-impl.\n // `scaling` and `fights-first` have no enrichment usage, and several\n // engagement-state param branches never surface in the capped auto-sample, so\n // force-include exemplars; expected text still comes from the reference\n // describer, so a second impl must independently reproduce it.\n const FORCED_DESCRIBER_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"engagement-state-engaged\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: { state: \"within-engagement-range\" } }, effect: { type: \"fight-first\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-on-battlefield\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: { state: \"on-battlefield\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-embarked\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: { state: \"embarked\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-empty\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", parameters: {} }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"engagement-state-negated\",\n effect: { type: \"conditional\", condition: { type: \"engagement-state\", negated: true, parameters: { state: \"embarked\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"disposition-matches-reserves\",\n effect: { type: \"conditional\", condition: { type: \"disposition-matches\", parameters: { disposition: \"strategic-reserves\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"disposition-matches-enemy\",\n effect: { type: \"conditional\", condition: { type: \"disposition-matches\", parameters: { disposition: \"enemy\" } }, effect: { type: \"deep-strike\", target: \"unit\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"fights-first-cond\",\n effect: { type: \"conditional\", condition: { type: \"fights-first\", parameters: {} }, effect: { type: \"stat-modifier\", target: \"unit\", modifier: { stat: \"A\", operation: \"add\", value: 1 } } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"scaling-attacks-per-models\",\n effect: { type: \"stat-modifier\", target: \"unit\", modifier: { stat: \"A\", operation: \"add\", value: 1 }, scaling: { per: 5, of: \"enemy-models-in-range\", within_inches: 6 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"scaling-strength-wounds-lost\",\n effect: { type: \"stat-modifier\", target: \"self\", modifier: { stat: \"S\", operation: \"add\", value: 1 }, scaling: { per: 1, of: \"wounds-lost\", round: \"up\", max_value: 3 } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"dice-pool-inline-label\",\n effect: {\n type: \"choice\",\n options: [\n { type: \"dice-pool-allocation\", pool: { count: 3, die: \"D6\" }, max_activations: 1, options: [{ name: \"Carnage\", requirement: { type: \"pair\", min_value: 4 }, effect: { type: \"mortal-wounds\", target: \"all-enemy\", modifier: { count: 3 } } }] },\n { type: \"fight-first\", target: \"unit\" },\n ],\n },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n // closest-eligible target with a range bound — pins the `within N\"` clause\n // (blood-hungry-annihilator's targeting); the auto-sample caps the\n // unit-within-range-of condition before a ranged closest-eligible surfaces.\n id: \"unit-within-range-closest-eligible\",\n effect: { type: \"conditional\", condition: { type: \"unit-within-range-of\", parameters: { range: 18, target_type: \"closest-eligible\" } }, effect: { type: \"re-roll\", target: \"self\", modifier: { roll: \"wound\", subset: \"all-failures\" } } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n // dice-pool requirement with an `any_of` alternative (double X OR triple Y) —\n // World Eaters Blessings of Khorne; pins the \"pair of 4+ or triple of 1+\" join.\n id: \"dice-pool-requirement-anyof\",\n effect: {\n type: \"dice-pool-allocation\",\n pool: { count: 8, die: \"D6\" },\n max_activations: 2,\n options: [\n { name: \"Martial Excellence\", requirement: { any_of: [{ type: \"pair\", min_value: 4 }, { type: \"triple\", min_value: 1 }] }, effect: { type: \"keyword-grant\", target: \"all-friendly\", modifier: { keyword: \"Sustained Hits 1\", weapon_type: \"melee\" } } },\n ],\n },\n scope: { range: \"any-on-battlefield\", duration: \"battle-round\" },\n },\n ];\n for (const fc of FORCED_DESCRIBER_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // rule-state: the auto-sample caps each node type at 5, so alphabetically-late\n // abilities (Angron's reborn-in-blood faction-rule forgo) and the no-enrichment\n // branches (faction-rule granted, keyword kind, desperate-escape, advance) fall\n // out. Force-include one exemplar per distinct describer branch — most\n // importantly the faction-rule + suppressed path, which reproduces the retired\n // forgo-faction-rule wording (scope + cost) verbatim. Expected text comes from\n // the reference describer, so a second impl must reproduce it.\n const FORCED_RULE_STATE_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"rule-state-forgo-faction-rule\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"suppressed\", rule_kind: \"faction-rule\", rule: \"blessings-of-khorne\", scope: \"battle-round\", cost: { dice: \"triple-6\", from: \"blessings-of-khorne\" } } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"rule-state-faction-rule-granted\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"granted\", rule_kind: \"faction-rule\", rule: \"oath-of-moment\" } },\n scope: { range: \"self\", duration: \"phase\" },\n },\n {\n id: \"rule-state-cover-granted\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"granted\", rule_kind: \"core-rule\", rule: \"benefit-of-cover\" } },\n scope: { range: \"self\", duration: \"phase\" },\n },\n {\n id: \"rule-state-advance-suppressed\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"advance\" } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"rule-state-overwatch-against-bearer\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"overwatch-against-bearer\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"rule-state-desperate-escape-granted\",\n effect: { type: \"rule-state\", target: \"all-enemy\", modifier: { direction: \"granted\", rule_kind: \"core-rule\", rule: \"desperate-escape\" } },\n scope: { range: \"engagement-range\", duration: \"phase\" },\n },\n {\n id: \"rule-state-desperate-escape-suppressed\",\n effect: { type: \"rule-state\", target: \"self\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"desperate-escape\" } },\n scope: { range: \"self\", duration: \"turn\" },\n },\n {\n id: \"rule-state-ability-granted\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"granted\", rule_kind: \"ability\", rule: \"lone-operative\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"rule-state-keyword-suppressed\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"suppressed\", rule_kind: \"keyword\", rule: \"infantry\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n // ordered-retreat: the lever the 11e Fall-Back move (09.07) actually\n // toggles. Suppressed (force Desperate Escape) carried on an aura target so\n // the range-threaded subject is also pinned; granted (Orks \"ignore\n // Desperate Escape while battle-shocked\") on a plain unit target.\n id: \"rule-state-ordered-retreat-suppressed\",\n effect: { type: \"rule-state\", target: \"enemy-within-aura\", modifier: { direction: \"suppressed\", rule_kind: \"core-rule\", rule: \"ordered-retreat\" } },\n scope: { range: \"aura-9\", duration: \"permanent\" },\n },\n {\n id: \"rule-state-ordered-retreat-granted\",\n effect: { type: \"rule-state\", target: \"unit\", modifier: { direction: \"granted\", rule_kind: \"core-rule\", rule: \"ordered-retreat\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n ];\n for (const fc of FORCED_RULE_STATE_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n // Batch B (structured modifiers): parameterized weapon keywords (Anti-X / rated),\n // auto-result, transport (firing-deck / disembark-after-move), and the ability-level\n // `usage` limit. Shapes 3/5/6 have no enrichment usage yet; pin them synthetically.\n const FORCED_BATCH_B_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown>; usage?: Record<string, unknown> }[] = [\n {\n id: \"keyword-grant-anti-string\",\n effect: { type: \"keyword-grant\", target: \"unit\", modifier: { keyword: \"anti-titanic-3plus\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"keyword-grant-anti-structured\",\n effect: { type: \"keyword-grant\", target: \"unit\", modifier: { anti_keyword: \"infantry\", anti_threshold: 4 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"keyword-grant-rated-value\",\n effect: { type: \"keyword-grant\", target: \"unit\", modifier: { keyword: \"sustained-hits\", value: 2 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"auto-result-battle-shock-pass\",\n effect: { type: \"auto-result\", target: \"unit\", modifier: { test: \"battle-shock\", result: \"pass\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"auto-result-hit-six\",\n effect: { type: \"auto-result\", target: \"unit\", modifier: { roll: \"hit\", result: 6 } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"firing-deck\",\n effect: { type: \"firing-deck\", target: \"self\", modifier: { value: 2 } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"disembark-after-move\",\n effect: { type: \"disembark-after-move\", target: \"self\", modifier: {} },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"usage-once-per-turn\",\n effect: { type: \"cp-gain\", target: \"self\", modifier: { amount: 1 } },\n scope: { range: \"self\", duration: \"permanent\" },\n usage: { frequency: \"once-per-turn\" },\n },\n {\n id: \"usage-n-per-battle-per-unit\",\n effect: { type: \"stat-modifier\", target: \"unit\", modifier: { stat: \"A\", operation: \"add\", value: 1 } },\n scope: { range: \"unit\", duration: \"phase\" },\n usage: { frequency: \"n-per-battle\", count: 2, per: \"unit\" },\n },\n ];\n for (const fc of FORCED_BATCH_B_CASES) {\n const entry: Record<string, unknown> = {\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n };\n if (fc.usage) entry.usage = fc.usage;\n entry.expected = {\n text: describeAbility({\n effect: fc.effect as Effect,\n scope: fc.scope,\n usage: fc.usage as AbilityUsage | undefined,\n }),\n };\n cases.push(entry);\n }\n // Batch C (reactive trigger): pin the trigger lead-in across the event vocabulary\n // (no ability carries a trigger yet — forward-looking, like usage/auto-result).\n const FORCED_TRIGGER_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown>; trigger: Record<string, unknown> }[] = [\n {\n id: \"trigger-enemy-ended-move\",\n effect: { type: \"movement-modifier\", target: \"self\", modifier: { move_type: \"reactive\", distance: \"D6\" } },\n scope: { range: \"self\", duration: \"one-use\" },\n trigger: { event: \"enemy-unit-ended-move\", subject: \"enemy-unit\", proximity: { of: \"bearer\", range: 9 } },\n },\n {\n id: \"trigger-on-model-destroyed\",\n effect: { type: \"mortal-wounds\", target: \"all-enemy\", modifier: { count: 1 } },\n scope: { range: \"aura-6\", duration: \"one-use\", range_inches: 6 },\n trigger: { event: \"on-model-destroyed\" },\n },\n {\n id: \"trigger-before-save-with-condition\",\n effect: { type: \"re-roll\", target: \"unit\", modifier: { roll: \"save\", subset: \"all-failures\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n trigger: { event: \"before-save-roll\", subject: \"self\", condition: { type: \"is-battle-shocked\" } },\n },\n ];\n for (const fc of FORCED_TRIGGER_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n trigger: fc.trigger,\n expected: {\n text: describeAbility({\n effect: fc.effect as Effect,\n scope: fc.scope,\n trigger: fc.trigger as AbilityTrigger,\n }),\n },\n });\n }\n // Batch D (movement-modifier full closure + generic aura): pin one exemplar of\n // every new closed shape — move kinds, the optional-move_type passthrough\n // capability, redeploy/marker, the generic aura (range-bonus + tiered+effect),\n // and the re-homed deep-strike-range / engagement-no-end records. Several have\n // no enrichment usage (aura with nested effect, tiered range), so force them;\n // expected text still flows from the reference describer.\n const FORCED_BATCH_D_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"move-passthrough-models-terrain\",\n effect: { type: \"movement-modifier\", target: \"self\", modifier: { passthrough: [\"non-titanic-models\", \"terrain-le-4\"] } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"move-passthrough-applies-excludes\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { passthrough: [\"terrain-le-4\"], vertical_limit: 4, excludes_keyword: \"titanic\", applies_to_moves: [\"normal\", \"advance\", \"fall-back\"] } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-ignore-vertical\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { ignore_vertical: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-normal-applies\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"normal\", distance: 3, applies_to_moves: [\"normal\", \"advance\", \"fall-back\"] } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-normal-negative\",\n effect: { type: \"movement-modifier\", target: \"defender\", modifier: { move_type: \"normal\", distance: -2 } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"move-advance-bonus\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"advance\", distance: 6 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-pile-in\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"pile-in\", distance: 3, replaces_default: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-consolidation\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"consolidation\", distance: 6, replaces_default: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-surge\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"surge\", distance: \"D6\" } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"move-shoot-and-scoot\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"shoot-and-scoot\", distance: \"D6\" } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"move-redeploy-reserves-max\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"redeploy\", to_reserves: true, max_units: 3 } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-redeploy-marker\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"redeploy\", marker: { affected: \"Cult Ambush markers\" }, distance: 6 } },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"move-redeploy-placement\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"redeploy\", marker: { location: \"floor sections\", unit_filter: \"Genestealer Cult Infantry\" } } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"move-infiltrate\",\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"infiltrate\" } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"aura-range-bonus\",\n effect: { type: \"aura\", target: \"enemy-within-aura\", modifier: { of: \"contagion\", range_bonus: 3 } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"aura-tiered-effect\",\n effect: { type: \"aura\", target: \"enemy-within-aura\", modifier: { range: [3, 6, 9], effect: { type: \"stat-modifier\", target: \"enemy-within-aura\", modifier: { stat: \"T\", operation: \"subtract\", value: 1 } } } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n {\n id: \"rehome-deep-strike-min-distance\",\n effect: { type: \"deep-strike\", target: \"unit\", modifier: { min_distance: 6, replaces_default: true } },\n scope: { range: \"unit\", duration: \"phase\" },\n },\n {\n id: \"rehome-engagement-no-end\",\n effect: { type: \"engagement-passthrough\", target: \"self\", modifier: { no_end_in_engagement: true } },\n scope: { range: \"self\", duration: \"permanent\" },\n },\n ];\n for (const fc of FORCED_BATCH_D_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n\n // Audit-corpus describer fixes (fallback-and-act default, re-roll \"any\",\n // player-turn opponent, opponent-unit-within-range within_inches, and the\n // compound unit-has-keyword lead-in). These exact shapes come from the human-\n // corrected aeldari audit oracle; every string is engine-authored, so a second\n // impl must independently reproduce it.\n const FORCED_AUDIT_CASES: { id: string; effect: Record<string, unknown>; scope: Record<string, unknown> }[] = [\n {\n id: \"fallback-and-act-shoot-only\",\n effect: { type: \"fallback-and-act\", target: \"unit\", modifier: {} },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"fallback-and-act-can-charge\",\n effect: { type: \"fallback-and-act\", target: \"unit\", modifier: { can_charge: true } },\n scope: { range: \"unit\", duration: \"permanent\" },\n },\n {\n id: \"superlative-strategist\",\n effect: {\n type: \"conditional\",\n condition: { type: \"model-is-leader\" },\n effect: {\n type: \"sequence\",\n steps: [\n { type: \"re-roll\", target: \"unit\", modifier: { roll: \"advance\", subset: \"all-failures\" } },\n {\n type: \"conditional\",\n condition: { type: \"timing-is\", parameters: { timing: \"agile-manoeuvre\" } },\n effect: { type: \"re-roll\", target: \"unit\", modifier: { roll: \"any\", subset: \"all-failures\" } },\n },\n ],\n },\n },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n {\n id: \"deceptive-feint\",\n effect: {\n type: \"conditional\",\n condition: {\n operator: \"and\",\n operands: [\n { type: \"phase-is\", parameters: { phase: \"movement\" } },\n { type: \"player-turn-is\", parameters: { turn: \"opponent\" } },\n { type: \"opponent-unit-within-range\", parameters: { within_inches: 8 } },\n { operator: \"not\", operands: [{ type: \"engagement-state\" }] },\n { type: \"unit-has-keyword\", parameters: { keyword: \"HARLEQUINS\" } },\n { type: \"unit-has-keyword\", parameters: { keyword: \"INFANTRY\" } },\n ],\n },\n effect: { type: \"movement-modifier\", target: \"unit\", modifier: { move_type: \"normal\", distance: \"D3+3\" } },\n },\n scope: { range: \"unit\", duration: \"turn\" },\n },\n ];\n for (const fc of FORCED_AUDIT_CASES) {\n cases.push({\n caseId: `${fc.id}#${cases.length}`,\n effect: fc.effect,\n scope: fc.scope,\n expected: { text: describeAbility({ effect: fc.effect as Effect, scope: fc.scope }) },\n });\n }\n writeJson(join(CONFORMANCE, \"effect-translation\", \"cases.json\"), cases);\n console.log(`effect-translation/cases.json: ${cases.length} cases (${seen.size} node types)`);\n}\n\n/** Unsigned LEB128 of a small non-negative integer (for hand-built tokens). */\nfunction leb128(value: number): number[] {\n const out: number[] = [];\n let v = value;\n while (v >= 0x80) {\n out.push((v & 0x7f) | 0x80);\n v = Math.floor(v / 0x80);\n }\n out.push(v);\n return out;\n}\n\n/** base64url (no padding) of a raw byte array — for negative decode goldens. */\nfunction bytesToBase64url(bytes: number[]): string {\n return Buffer.from(bytes)\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n/**\n * The share-token corpus. Each positive case pins `encodeShareToken(list)` to an\n * exact `token` and asserts `decodeShareToken(token)` round-trips to `list`;\n * negative cases pin the decoder's `malformed` / `stale-registry` verdicts. The\n * input lists are derived from the embedded dataset deterministically (sorted,\n * first-N) so the goldens are stable and self-maintaining. Rust and Python must\n * reproduce every `token` byte-for-byte and every decode verdict.\n */\nfunction genShare(): void {\n mkdirSync(join(CONFORMANCE, \"share\"), { recursive: true });\n const ds = Dataset.embedded();\n const f = \"adeptus-astartes\";\n const dets = ds.detachments.all\n .filter((d) => d.faction_id === f)\n .map((d) => d.id)\n .sort();\n const units = ds.units\n .byFaction(f)\n .map((u) => u.id)\n .sort();\n const weapons = ds.weapons.all.map((w) => w.id).sort();\n const enhancement = ds.enhancements.all.map((e) => e.id).sort()[0];\n const disposition = ds.forceDispositions.all.map((d) => d.id).sort()[0];\n const allyFactionId = \"chaos-daemons\";\n const allyRuleId = ds.alliedRules.all.map((r) => r.id).sort()[0];\n\n const plainUnit = (id: string): ShareList[\"units\"][number] => ({\n datasheetId: id,\n modelCount: 1,\n isWarlord: false,\n enhancementId: null,\n allyFactionId: null,\n allyRuleId: null,\n attachedToOrdinal: null,\n grants: [],\n loadout: [],\n });\n\n const lists: { name: string; list: ShareList }[] = [\n {\n name: \"minimal\",\n list: {\n name: \"\",\n factionId: f,\n detachmentIds: [],\n battleSize: \"strike-force\",\n disposition: null,\n units: [],\n },\n },\n {\n name: \"warlord-enhancement-grants\",\n list: {\n name: \"Strîke Force 🔨\",\n factionId: f,\n detachmentIds: [dets[0]],\n battleSize: \"strike-force\",\n disposition,\n units: [\n {\n ...plainUnit(units[0]),\n modelCount: 5,\n isWarlord: true,\n enhancementId: enhancement,\n grants: [\"Character\"],\n loadout: [\n [weapons[0], 2],\n [weapons[1], 1],\n ],\n },\n { ...plainUnit(units[1]), modelCount: 10, loadout: [[weapons[2], 10]] },\n ],\n },\n },\n {\n name: \"allies-attachment\",\n list: {\n name: \"Soup\",\n factionId: f,\n detachmentIds: [dets[0], dets[1]],\n battleSize: \"incursion\",\n disposition,\n units: [\n { ...plainUnit(units[0]), isWarlord: true, attachedToOrdinal: 1 }, // leader → bodyguard\n { ...plainUnit(units[1]), modelCount: 5 },\n {\n ...plainUnit(units[2]),\n allyFactionId,\n allyRuleId,\n grants: [\"Battleline\"],\n loadout: [[weapons[3], 1]],\n },\n ],\n },\n },\n ];\n\n interface ShareCase {\n name: string;\n list?: ShareList;\n token?: string;\n decode_token?: string;\n expected_decode?: ReturnType<typeof decodeShareToken>;\n }\n\n const cases: ShareCase[] = lists.map(({ name, list }) => {\n const token = encodeShareToken(list);\n const decoded = decodeShareToken(token);\n if (!decoded.ok) throw new Error(`share case ${name} failed to round-trip: ${decoded.reason}`);\n // Sanity: the generator's own round-trip must reproduce the input exactly.\n if (JSON.stringify(decoded.list) !== JSON.stringify(list)) {\n throw new Error(`share case ${name} did not round-trip losslessly`);\n }\n return { name, list, token };\n });\n\n // Negative decode cases (deterministic hand-built tokens).\n cases.push({\n name: \"malformed-bad-format-byte\",\n decode_token: bytesToBase64url([0x00]),\n expected_decode: { ok: false, reason: \"malformed\" },\n });\n cases.push({\n name: \"stale-future-index\",\n // Valid header (format 1, registry version, empty name) then a faction\n // index no committed registry will ever hold → stale-registry.\n decode_token: bytesToBase64url([0x01, ...leb128(shareRegistryVersion), 0x00, ...leb128(2_000_000)]),\n expected_decode: { ok: false, reason: \"stale-registry\" },\n });\n\n writeJson(join(CONFORMANCE, \"share\", \"cases.json\"), cases);\n console.log(\n `share/cases.json: ${cases.length} cases (registry v${shareRegistryVersion}, ` +\n `${cases.filter((c) => c.token).length} round-trip + ${cases.filter((c) => c.decode_token).length} negative)`,\n );\n}\n\ngenNormalize();\ngenRosters();\ngenLinkedApi();\ngenAttribution();\ngenScoringTranslation();\ngenEffectTranslation();\ngenScoring();\ngenTerrainResolver();\ngenTerrainKeystones();\ngenShare();\n"]}
|