@alpaca-software/40kdc-data 0.5.14 → 0.5.15

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.
Files changed (84) hide show
  1. package/dist/abilities-resolver/resolver.d.ts.map +1 -1
  2. package/dist/abilities-resolver/resolver.js +6 -2
  3. package/dist/abilities-resolver/resolver.js.map +1 -1
  4. package/dist/audit-coverage.d.ts.map +1 -1
  5. package/dist/audit-coverage.js +90 -1
  6. package/dist/audit-coverage.js.map +1 -1
  7. package/dist/audit-phrasing.d.ts +64 -0
  8. package/dist/audit-phrasing.d.ts.map +1 -0
  9. package/dist/audit-phrasing.js +208 -0
  10. package/dist/audit-phrasing.js.map +1 -0
  11. package/dist/build-share-registry.d.ts +2 -0
  12. package/dist/build-share-registry.d.ts.map +1 -0
  13. package/dist/build-share-registry.js +115 -0
  14. package/dist/build-share-registry.js.map +1 -0
  15. package/dist/cli.js +7 -0
  16. package/dist/cli.js.map +1 -1
  17. package/dist/codegen-data.js +23 -0
  18. package/dist/codegen-data.js.map +1 -1
  19. package/dist/commands/translate.d.ts.map +1 -1
  20. package/dist/commands/translate.js +2 -5
  21. package/dist/commands/translate.js.map +1 -1
  22. package/dist/commands/validate-all.d.ts.map +1 -1
  23. package/dist/commands/validate-all.js +8 -3
  24. package/dist/commands/validate-all.js.map +1 -1
  25. package/dist/data/bundle.generated.js +1 -1
  26. package/dist/data/bundle.generated.js.map +1 -1
  27. package/dist/data/dataset.d.ts +33 -1
  28. package/dist/data/dataset.d.ts.map +1 -1
  29. package/dist/data/dataset.js +107 -1
  30. package/dist/data/dataset.js.map +1 -1
  31. package/dist/data/index.d.ts +4 -0
  32. package/dist/data/index.d.ts.map +1 -1
  33. package/dist/data/index.js +4 -0
  34. package/dist/data/index.js.map +1 -1
  35. package/dist/data/types.d.ts +3 -1
  36. package/dist/data/types.d.ts.map +1 -1
  37. package/dist/data/types.js +1 -0
  38. package/dist/data/types.js.map +1 -1
  39. package/dist/gen-conformance.js +162 -0
  40. package/dist/gen-conformance.js.map +1 -1
  41. package/dist/generated.d.ts +125 -0
  42. package/dist/generated.d.ts.map +1 -1
  43. package/dist/generated.js.map +1 -1
  44. package/dist/integrity.d.ts +32 -0
  45. package/dist/integrity.d.ts.map +1 -0
  46. package/dist/integrity.js +120 -0
  47. package/dist/integrity.js.map +1 -0
  48. package/dist/report.d.ts +1 -1
  49. package/dist/report.d.ts.map +1 -1
  50. package/dist/report.js +2 -2
  51. package/dist/report.js.map +1 -1
  52. package/dist/runner.d.ts.map +1 -1
  53. package/dist/runner.js +42 -0
  54. package/dist/runner.js.map +1 -1
  55. package/dist/share/codec.d.ts +83 -0
  56. package/dist/share/codec.d.ts.map +1 -0
  57. package/dist/share/codec.js +230 -0
  58. package/dist/share/codec.js.map +1 -0
  59. package/dist/share/index.d.ts +30 -0
  60. package/dist/share/index.d.ts.map +1 -0
  61. package/dist/share/index.js +36 -0
  62. package/dist/share/index.js.map +1 -0
  63. package/dist/share/registry.d.ts +42 -0
  64. package/dist/share/registry.d.ts.map +1 -0
  65. package/dist/share/registry.generated.d.ts +4 -0
  66. package/dist/share/registry.generated.d.ts.map +1 -0
  67. package/dist/share/registry.generated.js +4 -0
  68. package/dist/share/registry.generated.js.map +1 -0
  69. package/dist/share/registry.js +68 -0
  70. package/dist/share/registry.js.map +1 -0
  71. package/dist/translate/condition.d.ts +1 -0
  72. package/dist/translate/condition.d.ts.map +1 -1
  73. package/dist/translate/condition.js +101 -7
  74. package/dist/translate/condition.js.map +1 -1
  75. package/dist/translate/effect.d.ts +28 -20
  76. package/dist/translate/effect.d.ts.map +1 -1
  77. package/dist/translate/effect.js +483 -114
  78. package/dist/translate/effect.js.map +1 -1
  79. package/dist/validate.d.ts.map +1 -1
  80. package/dist/validate.js +1 -0
  81. package/dist/validate.js.map +1 -1
  82. package/package.json +3 -1
  83. package/schemas/core/allied-rule.schema.json +115 -0
  84. package/schemas/core/detachment.schema.json +38 -1
@@ -1 +1 @@
1
- {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../src/generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../src/generated.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generated.js","sourceRoot":"","sources":["../src/generated.ts"],"names":[],"mappings":"AAAA,gHAAgH","sourcesContent":["/* Generated from crates/wh40kdc/schemas/bundled.schema.json by 'npm run codegen:types'. DO NOT EDIT BY HAND. */\n\n/**\n * Kebab-case identifier\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"entity-id\".\n */\nexport type EntityId = string;\n/**\n * Game edition, e.g. '10th' or '11'\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"edition\".\n */\nexport type Edition = string;\n/**\n * Dataslate version: a quarterly tag (e.g. '2025-q3') or a named kebab-case slug for non-quarterly slates (e.g. 'pre-launch-provisional')\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"dataslate-version\".\n */\nexport type DataslateVersion = string;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"keyword\".\n */\nexport type Keyword = string;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"keyword-list\".\n */\nexport type KeywordList = Keyword[];\n/**\n * A stat that can be a fixed number or a dice expression\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"stat-value\".\n */\nexport type StatValue = number | string;\n/**\n * GitHub handle or '40kdc-community'\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"contributor-ref\".\n */\nexport type ContributorRef = string;\n/**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"phase\".\n */\nexport type Phase = \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n/**\n * @minItems 1\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"phase-list\".\n */\nexport type PhaseList = [Phase, ...Phase[]];\n/**\n * Type of game element that is the source of an enrichment entry\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"source-type\".\n */\nexport type SourceType = \"ability\" | \"stratagem\" | \"enhancement\" | \"detachment-rule\" | \"faction-rule\";\n/**\n * Which player's turn this applies during\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"player-turn\".\n */\nexport type PlayerTurn = \"your-turn\" | \"opponent-turn\" | \"either\";\n/**\n * 11e battle size, which sets the army's points limit and detachment-point budget: 'incursion' = 1000 pts / 2 detachment points; 'strike-force' = 2000 pts / 3 detachment points.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"battle-size\".\n */\nexport type BattleSize = \"incursion\" | \"strike-force\";\n/**\n * One of the five confirmed 11e launch Force Dispositions. Shared by force-disposition entities and the mission-matchup matrix.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"force-disposition-id\".\n */\nexport type ForceDispositionId =\n | \"take-and-hold\"\n | \"disruption\"\n | \"purge-the-foe\"\n | \"priority-assets\"\n | \"reconnaissance\";\n/**\n * A terrain piece's 2D footprint in local inches (y-down): an axis-aligned rectangle with its min corner at the local origin, a right triangle with the right angle at the local origin and legs along +x/+y, or an explicit polygon (>= 3 points). The placement resolver re-centers the footprint on its polygon area centroid, so the local-origin convention does not affect where the piece lands — only its shape matters.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"footprint\".\n */\nexport type Footprint =\n | {\n type: \"rectangle\";\n width: number;\n height: number;\n }\n | {\n type: \"right-triangle\";\n width: number;\n height: number;\n }\n | {\n type: \"polygon\";\n /**\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n };\n/**\n * An 11e terrain-area keyword. Confirmed launch set; extend as further keywords publish on dataslate.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"terrain-area-keyword\".\n */\nexport type TerrainAreaKeyword = \"obscuring\" | \"hidden\" | \"plunging-fire\";\n/**\n * A zone footprint, expressed as an axis-aligned rectangle or an explicit polygon. Vertices/extent are relative to the owning element's position.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"zone-shape\".\n */\nexport type ZoneShape =\n | {\n type: \"rectangle\";\n width: number;\n height: number;\n }\n | {\n type: \"polygon\";\n /**\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n };\n/**\n * Which player a zone or territory belongs to.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"side\".\n */\nexport type Side = \"attacker\" | \"defender\";\n/**\n * Eligibility predicate for which units may perform the action.\n */\nexport type AbilityCondition = SimpleCondition | CompoundCondition;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"condition-node\".\n */\nexport type ConditionNode = SimpleCondition | CompoundCondition;\n/**\n * Predicate for when the action is considered complete.\n */\nexport type AbilityCondition1 = SimpleCondition | CompoundCondition;\n/**\n * Effect applied when the action completes (e.g. terrain-area-tag, objective-tag, or unit-tag to mark transient state).\n */\nexport type AbilityEffect =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"effect-node\".\n */\nexport type EffectNode =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\nexport type AbilityCondition2 = SimpleCondition | CompoundCondition;\n/**\n * Predicate that BLOCKS starting the action while it holds (Sensor Sweep: a unit cannot start this action if there is only one operation marker on the battlefield).\n */\nexport type AbilityCondition3 = SimpleCondition | CompoundCondition;\nexport type AbilityEffect1 =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"condition\".\n */\nexport type AbilityCondition4 = SimpleCondition | CompoundCondition;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"effect\".\n */\nexport type AbilityEffect2 =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\n\n/**\n * Auto-generated by tools/src/bundle-schemas.ts. Single self-contained schema for Rust codegen — do not edit by hand.\n */\nexport interface KdcBundledSchemas {\n [k: string]: unknown;\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"vec2\".\n */\nexport interface Vec2 {\n x: number;\n y: number;\n}\n/**\n * A model's base. 'round' carries 'diameter'; 'oval' carries 'width'+'length'. 'flying-base' (with 'size': small/large), 'hull', and 'unique' are categories the GW base-size guide gives without standard millimetre dimensions; entries carrying such a category, or any millimetre value not taken from an authoritative source, set 'draft': true to mark them for later hand-authoring.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"base-size\".\n */\nexport interface BaseSize {\n shape: \"round\" | \"oval\" | \"flying-base\" | \"hull\" | \"unique\";\n diameter?: number;\n width?: number;\n length?: number;\n /**\n * Flying-base size class, when 'shape' is 'flying-base'.\n */\n size?: \"small\" | \"large\";\n /**\n * True when the entry is provisional/guessed (e.g. a category without authoritative dimensions) and should be revisited.\n */\n draft?: boolean;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"game-version-ref\".\n */\nexport interface GameVersionReference {\n edition: Edition;\n dataslate: DataslateVersion;\n [k: string]: unknown;\n}\n/**\n * A deployment map: per-side deployment zones, objective positions, and (11e) per-side territory polygons. Pattern geometry carries forward unchanged from 10th edition; downstream tooling (e.g. bevy-deploy-helper) consumes this as the canonical encoding.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"deployment-pattern\".\n */\nexport interface DeploymentPattern {\n id: EntityId;\n name: string;\n /**\n * Mission pack or source the pattern originates from (e.g. 'leviathan').\n */\n source?: string;\n description?: string;\n /**\n * Per-side deployment zones.\n *\n * @minItems 1\n */\n zones: [\n {\n player: Side;\n name?: string;\n shape: ZoneShape;\n position: Vec2;\n /**\n * Hex render color for the zone overlay.\n */\n color?: string;\n },\n ...{\n player: Side;\n name?: string;\n shape: ZoneShape;\n position: Vec2;\n /**\n * Hex render color for the zone overlay.\n */\n color?: string;\n }[]\n ];\n /**\n * 11e per-side territory polygons, mirroring the deployment-zone shape (e.g. the band between a deployment zone and the midline). Empty until authored.\n */\n territories?: {\n player: Side;\n shape: ZoneShape;\n position: Vec2;\n }[];\n /**\n * Objective-marker positions on the board.\n */\n objectives?: Vec2[];\n /**\n * Ids of recommended terrain-layout entities (resolved once terrain-layout data is authored).\n */\n recommended_terrain_layout_ids?: EntityId[];\n game_version: GameVersionReference;\n}\n/**\n * A detachment option within a faction, providing a detachment rule, enhancements, and stratagems.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"detachment\".\n */\nexport interface Detachment {\n id: EntityId;\n name: string;\n faction_id: EntityId;\n detachment_rule_id?: EntityId | null;\n /**\n * 11e: the detachment-point cost (1–3) charged against the army's detachment-point budget. null when not yet assigned.\n */\n detachment_points?: number | null;\n /**\n * 11e: ids of the Force Disposition entities this detachment grants. Empty until assigned.\n */\n force_dispositions?: EntityId[];\n /**\n * 11e: detachment-type tags (e.g. 'dynasty', 'kabal'). A roster may include at most one detachment per shared tag — the 'you can only take one of X type of detachment' rule. Empty when the detachment carries no UNIQUE tag.\n */\n tags?: string[];\n enhancement_ids?: EntityId[];\n stratagem_ids?: EntityId[];\n restrictions?: {\n required_keywords?: KeywordList;\n excluded_keywords?: KeywordList;\n notes?: string;\n } | null;\n game_version: GameVersionReference;\n}\n/**\n * A purchasable upgrade for a character unit, provided by a detachment.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"enhancement\".\n */\nexport interface Enhancement {\n id: EntityId;\n name: string;\n detachment_id: EntityId;\n cost: number;\n /**\n * True when the cost is carried over provisionally (e.g. seeded from a prior edition during migration) and not yet confirmed against the current dataslate.\n */\n points_provisional?: boolean;\n /**\n * 11e: when true, this enhancement applies to up to `max_targets` non-character units while counting as a single Enhancement choice.\n */\n upgrade_tag?: boolean;\n /**\n * Number of units this enhancement may be applied to. Only meaningful when `upgrade_tag` is true; defaults to 1.\n */\n max_targets?: number;\n keyword_restrictions?: KeywordList;\n exclusion_keywords?: KeywordList | null;\n ability_id?: EntityId | null;\n is_unique?: boolean;\n game_version: GameVersionReference;\n}\n/**\n * A playable faction or sub-faction.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"faction\".\n */\nexport interface Faction {\n id: EntityId;\n name: string;\n parent_faction_id?: EntityId | null;\n game_version: GameVersionReference;\n keywords?: KeywordList;\n aliases?: string[];\n /**\n * Reference to the faction-wide ability (e.g., Oath of Moment)\n */\n faction_rule_id?: EntityId | null;\n}\n/**\n * A 11e strategic-intent tag granted by detachments. Players compare dispositions at game start to determine the shared mission; asymmetric primary objectives result.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"force-disposition\".\n */\nexport interface ForceDisposition {\n /**\n * One of the five confirmed launch Force Dispositions.\n */\n id: \"take-and-hold\" | \"disruption\" | \"purge-the-foe\" | \"priority-assets\" | \"reconnaissance\";\n name: string;\n /**\n * Community-authored description of the disposition's effect (original prose only — no reproduced rules text).\n */\n text?: string;\n game_version: GameVersionReference;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"game-version\".\n */\nexport interface GameVersion {\n edition: Edition;\n dataslate: DataslateVersion;\n effective_date: string;\n label?: string;\n supersedes?: DataslateVersion | null;\n}\n/**\n * A model's 2D collision footprint as an explicit polygon, used in place of a circular/oval base for vehicles and other hull-based models. Points are authored in local inches (y-down); a consumer re-centers the polygon on its area centroid before placement, so the local origin does not affect where the model lands — only its shape matters (mirrors the terrain-template footprint convention). A hull shape is faction-agnostic and reusable: one outline (e.g. a Rhino chassis) is authored once and referenced by `hull_shape_id` from every model that shares that hull, across factions. This entity stores geometry only — never an image, image URL, or any source-asset metadata.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"hull-shape\".\n */\nexport interface HullShape {\n id: EntityId;\n name: string;\n /**\n * Polygon vertices in local inches (y-down), in order around the outline. A hull is always a polygon (never a rectangle/right-triangle), so the points are given directly rather than via the shared `footprint` oneOf.\n *\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n /**\n * Cached axis-aligned bounding-box width in inches (max x − min x). Derived from `points`; recorded so consumers can size/scale without recomputing.\n */\n bounds_width_in: number;\n /**\n * Cached axis-aligned bounding-box height in inches (max y − min y). Derived from `points`.\n */\n bounds_height_in: number;\n game_version: GameVersionReference;\n}\n/**\n * Defines which character units can attach to which bodyguard units.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"leader-attachment\".\n */\nexport interface LeaderAttachment {\n leader_id: EntityId;\n /**\n * @minItems 1\n */\n eligible_bodyguard_ids: [EntityId, ...EntityId[]];\n game_version: GameVersionReference;\n}\n/**\n * One cell of the 11e Force Disposition matrix: given the player's own Force Disposition and their opponent's, the mission that player plays. Mirrors a single row on a physical Force Disposition card. The (disposition, opponent_disposition) pair is the conceptual key; compound uniqueness across entries is a data convention, not enforced by this schema.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"mission-matchup\".\n */\nexport interface MissionMatchup {\n id: EntityId;\n /**\n * The player's own Force Disposition.\n */\n disposition: \"take-and-hold\" | \"disruption\" | \"purge-the-foe\" | \"priority-assets\" | \"reconnaissance\";\n /**\n * The opponent's Force Disposition.\n */\n opponent_disposition: \"take-and-hold\" | \"disruption\" | \"purge-the-foe\" | \"priority-assets\" | \"reconnaissance\";\n /**\n * Kebab-case identifier\n */\n mission_id: string;\n game_version: GameVersionReference;\n}\n/**\n * An 11e primary mission (the objective a player scores). Which mission a player plays is selected by the Force Disposition matchup matrix (see mission-matchup), keyed on the player's own disposition and their opponent's. Victory points are capped per game and per battle round.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"mission\".\n */\nexport interface Mission {\n id: EntityId;\n name: string;\n /**\n * Mission pack or source the mission originates from.\n */\n source?: string;\n /**\n * Community-authored mission/objective summary (original prose only — no reproduced rules text).\n */\n description?: string;\n /**\n * Maximum primary VP scorable across the whole game. 11e default is 45.\n */\n vp_per_game_cap?: number;\n /**\n * Maximum primary VP scorable in a single battle round. 11e default is 15.\n */\n vp_per_round_cap?: number;\n /**\n * Ids of the deployment-pattern entities (maps) this mission can be played on. Empty until the per-mission maps are confirmed.\n */\n deployment_pattern_ids?: EntityId[];\n game_version: GameVersionReference;\n}\n/**\n * When a VP award is evaluated. A bare `phase` is the legacy shorthand for 'during this phase'; richer triggers add `timing` (the moment within a phase/turn/game), `player_turn`, and a `battle_round` window. A card's section headers map onto these: 'ANY BATTLE ROUND' omits `battle_round`; 'SECOND BATTLE ROUND ONWARDS' is { min: 2 }; 'END OF THE BATTLE' is timing: end-of-battle.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"scoring-trigger\".\n */\nexport interface ScoringTrigger {\n /**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n */\n phase?: \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n /**\n * The moment the award is checked. 'End of your turn' = end-of-turn; 'End of your Command phase' = end-of-phase with phase: command; 'End of the battle' = end-of-battle.\n */\n timing?: \"start-of-turn\" | \"end-of-turn\" | \"start-of-phase\" | \"end-of-phase\" | \"end-of-battle\";\n player_turn?: PlayerTurn;\n /**\n * Battle-round window in which the trigger is active. Absent means any battle round (1-5). 'Second battle round onwards' is { min: 2 }.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n}\n/**\n * A draw-time predicate over an army list (not runtime board state, so deliberately NOT the Ability DSL condition). Used to gate when_drawn operations such as redraws. Example: a card that is void unless the opponent fields a large unit (10e 'Cull the Horde' redrew when the opponent had no unit of 14+ models) is { subject: 'opponent', quantifier: 'none', unit_filter: { model_count_min: 14 } } with operation 'redraw'.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"army-composition-predicate\".\n */\nexport interface ArmyCompositionPredicate {\n /**\n * Whose army list the predicate inspects.\n */\n subject: \"self\" | \"opponent\";\n /**\n * Whether the army must contain ('any') or lack ('none') a unit matching unit_filter for the predicate to hold.\n */\n quantifier: \"any\" | \"none\";\n /**\n * Criteria a unit in the army must satisfy to match. All present criteria must hold (logical AND).\n */\n unit_filter: {\n model_count_min?: number;\n model_count_max?: number;\n wounds_min?: number;\n keywords?: KeywordList;\n };\n}\n/**\n * An 11e mission card. The deck-level rule (draw 2 per turn, keep unscored cards) is separate and not modelled here. This is the per-card shape: an optional on-draw deck operation, an optional player action, and zero or more VP-award blocks. Primary mission cards reuse this shape via card_type. Mechanic blocks reference the Ability DSL; prose is community-authored (no reproduced rules text).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"secondary-card\".\n */\nexport interface SecondaryCard {\n id: EntityId;\n name: string;\n /**\n * Whether this is a secondary card or a primary mission card (which reuses this shape).\n */\n card_type?: \"secondary\" | \"primary\";\n /**\n * Finer classification within the deck (e.g. a category or tactical/fixed split). Free-form — not enum-locked until 11e categories are confirmed.\n */\n subtype?: string;\n /**\n * Optional deck operation performed when this card is drawn (e.g. redraw, swap). Distinct from combat effects — deck operations have no combat target, so they are not modelled via the Ability DSL effect language. If `condition` is present, the operation fires only when the predicate holds.\n */\n when_drawn?: {\n /**\n * The deck manipulation this card triggers on draw.\n */\n operation: \"reshuffle\" | \"replace\" | \"redraw\" | \"draw-extra\" | \"swap\";\n /**\n * Other cards this operation references, by id.\n */\n card_ids?: EntityId[];\n condition?: ArmyCompositionPredicate1;\n /**\n * Battle-round window in which the draw operation is eligible (e.g. { max: 1 } means 'only when drawn in the first battle round'). Absent means the operation fires regardless of round.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n };\n /**\n * Optional player actions the card enables. Most cards have a single action; a few (e.g. Observe Enemy, with separate Baited-removal and Spotted actions) have two distinct actions on the same card.\n *\n * @minItems 1\n */\n actions?: [\n {\n /**\n * Optional kebab-case identifier used to reference this action from `action-completed` conditions in `awards[].when`.\n */\n action_id?: string;\n /**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n */\n starts?: \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n /**\n * Non-phase moment the action happens, for card rules that are not started in a phase (Locate and Deny's start-of-battle marker placement, Punishment's start-of-turn condemnation, Consecrate's end-of-turn objective selection). Mutually informative with `starts` — a card action uses one or the other.\n */\n timing?: \"start-of-battle\" | \"start-of-turn\" | \"end-of-turn\";\n /**\n * Battle-round window in which the action can be started. Absent means any battle round. 'From the second battle round onwards' (Triangulate, Extract Intelligence) is { min: 2 }.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n player_turn?: PlayerTurn;\n units?: AbilityCondition;\n /**\n * Maximum number of times the action may be performed (per turn unless `use_limit_scope` says otherwise).\n */\n use_limit?: number;\n /**\n * Whether `use_limit` is enforced per turn or once per game (e.g. Recover the Relics / Find and Deny 'Overwhelming Force' is once per game).\n */\n use_limit_scope?: \"per-turn\" | \"per-game\";\n completes?: AbilityCondition1;\n effect?: AbilityEffect;\n restrictions?: AbilityCondition3;\n },\n ...{\n /**\n * Optional kebab-case identifier used to reference this action from `action-completed` conditions in `awards[].when`.\n */\n action_id?: string;\n /**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n */\n starts?: \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n /**\n * Non-phase moment the action happens, for card rules that are not started in a phase (Locate and Deny's start-of-battle marker placement, Punishment's start-of-turn condemnation, Consecrate's end-of-turn objective selection). Mutually informative with `starts` — a card action uses one or the other.\n */\n timing?: \"start-of-battle\" | \"start-of-turn\" | \"end-of-turn\";\n /**\n * Battle-round window in which the action can be started. Absent means any battle round. 'From the second battle round onwards' (Triangulate, Extract Intelligence) is { min: 2 }.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n player_turn?: PlayerTurn;\n units?: AbilityCondition;\n /**\n * Maximum number of times the action may be performed (per turn unless `use_limit_scope` says otherwise).\n */\n use_limit?: number;\n /**\n * Whether `use_limit` is enforced per turn or once per game (e.g. Recover the Relics / Find and Deny 'Overwhelming Force' is once per game).\n */\n use_limit_scope?: \"per-turn\" | \"per-game\";\n completes?: AbilityCondition1;\n effect?: AbilityEffect;\n restrictions?: AbilityCondition3;\n }[]\n ];\n /**\n * VP-award blocks: each scores when `trigger` fires and the optional `when` condition holds. An award scores either a flat `vp` or a count-scaled `vp_per` (VP per instance of the thing named by `per`). Awards accrue independently and sum; a card's '+ ... CUMULATIVE' rows are modelled as separate awards flagged `cumulative` for faithful round-trip. Awards sharing the same `exclusive_group` value within a card resolve as the highest-scoring single award fires (the card's literal 'OR' rows between tier breakpoints, e.g. Record-Breaking Mission's 3-Fronts vs 4-Fronts).\n *\n * @minItems 1\n */\n awards?: [\n (\n | {\n [k: string]: unknown;\n }\n | {\n [k: string]: unknown;\n }\n ),\n ...(\n | {\n [k: string]: unknown;\n }\n | {\n [k: string]: unknown;\n }\n )[]\n ];\n /**\n * Community-authored card description (original prose only — no reproduced rules text).\n */\n text?: string;\n game_version: GameVersionReference;\n}\n/**\n * Draw-time army-composition predicate gating the operation (e.g. redraw when the opponent lacks a qualifying unit).\n */\nexport interface ArmyCompositionPredicate1 {\n /**\n * Whose army list the predicate inspects.\n */\n subject: \"self\" | \"opponent\";\n /**\n * Whether the army must contain ('any') or lack ('none') a unit matching unit_filter for the predicate to hold.\n */\n quantifier: \"any\" | \"none\";\n /**\n * Criteria a unit in the army must satisfy to match. All present criteria must hold (logical AND).\n */\n unit_filter: {\n model_count_min?: number;\n model_count_max?: number;\n wounds_min?: number;\n keywords?: KeywordList;\n };\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"simple-condition\".\n */\nexport interface SimpleCondition {\n type:\n | \"phase-is\"\n | \"timing-is\"\n | \"player-turn-is\"\n | \"unit-below-starting-strength\"\n | \"unit-below-half-strength\"\n | \"unit-has-keyword\"\n | \"unit-within-range-of\"\n | \"model-is-leader\"\n | \"target-has-keyword\"\n | \"charged-this-turn\"\n | \"advanced-this-turn\"\n | \"remained-stationary\"\n | \"is-battle-shocked\"\n | \"has-lost-wounds\"\n | \"was-hit-by-attack\"\n | \"opponent-unit-within-range\"\n | \"within-range-of-objective\"\n | \"attack-is-type\"\n | \"has-fought-this-phase\"\n | \"destroyed-by-attack-type\"\n | \"controls-objective\"\n | \"is-attached\"\n | \"terrain-area-control\"\n | \"engagement-state\"\n | \"territory-control\"\n | \"fights-first\"\n | \"disposition-matches\"\n | \"units-destroyed\"\n | \"units-destroyed-comparison\"\n | \"objective-majority\"\n | \"action-completed\"\n | \"objective-has-tag\"\n | \"unit-has-tag\"\n | \"terrain-has-tag\"\n | \"new-objective-controlled\"\n | \"engagement-fronts\"\n | \"destroyed-while-on-objective\"\n | \"destroyed-in-tagged-terrain\"\n | \"operation-markers\";\n parameters?: {\n [k: string]: unknown;\n };\n negated?: boolean;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"compound-condition\".\n */\nexport interface CompoundCondition {\n operator: \"and\" | \"or\" | \"not\";\n /**\n * @minItems 1\n */\n operands: [ConditionNode, ...ConditionNode[]];\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"single-effect\".\n */\nexport interface SingleEffect {\n type:\n | \"stat-modifier\"\n | \"roll-modifier\"\n | \"re-roll\"\n | \"mortal-wounds\"\n | \"feel-no-pain\"\n | \"invulnerable-save\"\n | \"ward\"\n | \"keyword-grant\"\n | \"movement-modifier\"\n | \"deep-strike\"\n | \"fallback-and-act\"\n | \"fight-first\"\n | \"fight-last\"\n | \"shoot-on-death\"\n | \"fight-on-death\"\n | \"objective-control-modifier\"\n | \"leadership-modifier\"\n | \"damage-reduction\"\n | \"attack-restriction\"\n | \"ability-grant\"\n | \"cp-gain\"\n | \"cp-refund\"\n | \"model-destruction\"\n | \"resurrection\"\n | \"resource-gain\"\n | \"resource-spend\"\n | \"charge-roll-modifier\"\n | \"terrain-area-tag\"\n | \"objective-tag\"\n | \"unit-tag\"\n | \"bs-modifier\"\n | \"engagement-passthrough\";\n target:\n | \"self\"\n | \"bearer\"\n | \"unit\"\n | \"attached-unit\"\n | \"attacker\"\n | \"defender\"\n | \"friendly-within-aura\"\n | \"enemy-within-aura\"\n | \"all-friendly\"\n | \"all-enemy\";\n modifier?: {\n [k: string]: unknown;\n };\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"choice-effect\".\n */\nexport interface ChoiceEffect {\n type: \"choice\";\n /**\n * @minItems 2\n */\n options: [EffectNode, EffectNode, ...EffectNode[]];\n choice_label?: string;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"sequence-effect\".\n */\nexport interface SequenceEffect {\n type: \"sequence\";\n /**\n * @minItems 1\n */\n steps: [EffectNode, ...EffectNode[]];\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"dice-gated-effect\".\n */\nexport interface DiceGatedEffect {\n type: \"dice-gated\";\n /**\n * Dice expression, e.g. 'D6', '2D6'\n */\n dice: string;\n /**\n * Fixed threshold or model characteristic to compare against\n */\n threshold: number | (\"leadership\" | \"toughness\" | \"save\");\n comparison?: \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\";\n on_success?: EffectNode | null;\n on_fail?: EffectNode | null;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"conditional-effect\".\n */\nexport interface ConditionalEffect {\n type: \"conditional\";\n condition: AbilityCondition2;\n effect: EffectNode;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"dice-pool-allocation-effect\".\n */\nexport interface DicePoolAllocationEffect {\n type: \"dice-pool-allocation\";\n pool: {\n count: number;\n die: string;\n [k: string]: unknown;\n };\n max_activations: number;\n /**\n * @minItems 1\n */\n options: [\n {\n name: string;\n requirement: {\n type: \"pair\" | \"triple\" | \"single\" | \"run\";\n min_value: number;\n [k: string]: unknown;\n };\n effect: EffectNode;\n [k: string]: unknown;\n },\n ...{\n name: string;\n requirement: {\n type: \"pair\" | \"triple\" | \"single\" | \"run\";\n min_value: number;\n [k: string]: unknown;\n };\n effect: EffectNode;\n [k: string]: unknown;\n }[]\n ];\n [k: string]: unknown;\n}\n/**\n * A CP-costed ability usable during specific game phases.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"stratagem\".\n */\nexport interface Stratagem {\n id: EntityId;\n name: string;\n /**\n * Whether this is a universal core stratagem or tied to a specific detachment\n */\n category: \"core\" | \"detachment\";\n /**\n * GW-printed stratagem category from the card. Optional: 11e faction packs omit it for newly introduced detachments, and the category has no in-game effect; absent when the source does not state one.\n */\n type?: \"battle-tactic\" | \"strategic-ploy\" | \"epic-deed\" | \"wargear\";\n /**\n * Null for core stratagems\n */\n detachment_id?: EntityId | null;\n cp_cost: number;\n phases: PhaseList;\n player_turn: PlayerTurn;\n timing: \"once-per-phase\" | \"once-per-turn\" | \"once-per-battle\" | \"unlimited\";\n target_restrictions?: {\n required_keywords?: KeywordList;\n excluded_keywords?: KeywordList;\n notes?: string;\n } | null;\n ability_id?: EntityId | null;\n game_version: GameVersionReference;\n}\n/**\n * A named target archetype for damage comparison. References a real dataset unit (faction_id + unit_id) rather than copying its stat line, so the profile stays in sync with dataset updates. Stats, keywords, and defensive abilities are resolved from the referenced unit at use time.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"target-profile\".\n */\nexport interface TargetProfile {\n id: EntityId;\n name: string;\n description?: string;\n /**\n * Kebab-case identifier\n */\n faction_id: string;\n /**\n * Kebab-case identifier\n */\n unit_id: string;\n /**\n * Optional non-default squad size for the comparison. When null/absent, the referenced unit's model_count.min is used.\n */\n model_count_override?: number | null;\n game_version: GameVersionReference;\n}\n/**\n * One terrain piece placed on the board. Geometry comes from a catalog `template` or an inline `footprint` (if both are present, `footprint` is authoritative and `template` is provenance).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"piece\".\n */\nexport interface Piece {\n /**\n * Kebab-case identifier\n */\n id?: string;\n name?: string;\n /**\n * An `area` is a gameplay terrain zone (the 11e 'terrain area'); a `feature` is physical scenery (walls, containers, pipes) placed on an area.\n */\n piece_type?: \"area\" | \"feature\";\n /**\n * Kebab-case identifier\n */\n template?: string;\n /**\n * Inline geometry, standing in for or overriding a template footprint. Authoritative when present.\n */\n footprint?:\n | {\n type: \"rectangle\";\n width: number;\n height: number;\n }\n | {\n type: \"right-triangle\";\n width: number;\n height: number;\n }\n | {\n type: \"polygon\";\n /**\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n };\n position: Vec21;\n /**\n * Clockwise rotation about the centroid in the y-down board frame. Absent or 0 means the template's natural orientation.\n */\n rotation_degrees?: number;\n /**\n * Reflection applied in the centroid-local frame before rotation: `horizontal` negates local x (left-right flip), `vertical` negates local y.\n */\n mirror?: \"none\" | \"horizontal\" | \"vertical\";\n /**\n * Kebab-case identifier\n */\n parent_area_id?: string;\n /**\n * Ruin floor this piece occupies (0 = ground level).\n */\n floor?: number;\n /**\n * Height of the piece in inches; overrides the template default. Gates Plunging Fire (a piece 3\" or taller confers +1 BS on ground-level targets).\n */\n height_inches?: number;\n /**\n * Terrain-area keywords this piece's area carries; overrides the template default.\n */\n terrain_area_keywords?: TerrainAreaKeyword[];\n /**\n * Pieces sharing a `link_group` value are linked terrain — treated as a single terrain feature (and, where an objective sits among them, a single objective).\n */\n link_group?: string;\n /**\n * Designates this terrain area — or, when `link_group`'d, the union of linked areas (one objective for the set) — as carrying an objective of the given 11e role: `home` (inside a deployment zone), `center` (board middle), or `expansion` (no-man's-land). Implies `is_objective`.\n */\n objective_role?: \"home\" | \"expansion\" | \"center\";\n /**\n * Whether this piece carries an objective marker.\n */\n is_objective?: boolean;\n /**\n * Objective-marker metadata. Only meaningful when `is_objective` is true.\n */\n objective?: {\n position?: Vec22;\n /**\n * Range from the marker within which models contribute to control.\n */\n control_range_inches?: number;\n };\n /**\n * Measurement keystones: the author-selected dimension lines a reference card prints so a player can place this piece with a tape measure (board edge → a feature of the placed piece). Only the selection is stored — the distance is always DERIVED from the resolved geometry by the shared keystone resolver (pinned by the conformance corpus), so a keystone can never disagree with the layout. Vertex indices follow the resolver's pinned vertex order; re-authoring a template's footprint invalidates them, so review keystones when geometry changes.\n */\n keystones?: {\n /**\n * The board edge the measurement runs from, in the y-down board frame (left/right pin x against board width; top/bottom pin y against board height).\n */\n edge: \"left\" | \"right\" | \"top\" | \"bottom\";\n /**\n * Which feature of the placed piece the measurement reaches: a footprint vertex (by resolver vertex order) or an axis-aligned bounding face of the placed footprint.\n */\n ref:\n | {\n kind: \"vertex\";\n index: number;\n }\n | {\n kind: \"face\";\n side: \"min-x\" | \"max-x\" | \"min-y\" | \"max-y\";\n };\n }[];\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n */\nexport interface Vec21 {\n x: number;\n y: number;\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n */\nexport interface Vec22 {\n x: number;\n y: number;\n}\n/**\n * A recommended arrangement of terrain pieces on the board, independent of the deployment map (a deployment-pattern references the layouts it recommends via recommended_terrain_layout_ids). Each piece draws its geometry from a catalog `template` (a terrain-template entity) or an inline `footprint`; geometry is the source of truth. Placement is template-centroid-anchored: `position` is the piece's centroid, which is invariant under rotation and mirror, so orientation and location are decoupled. Resolved board-space vertices are derived by the shared terrain resolver (pinned by the conformance corpus), never stored here. No layout data is authored yet beyond migrated examples.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"terrain-layout\".\n */\nexport interface TerrainLayout {\n id: EntityId;\n name: string;\n /**\n * Mission pack or source the layout originates from.\n */\n source?: string;\n description?: string;\n /**\n * Kebab-case identifier\n */\n mission_matchup_id?: string;\n /**\n * The card's trailing variant number within its mission matchup (1–3 at launch, since three layouts share each pairing). No hard maximum, to avoid a breaking change if more variants ship.\n */\n variant?: number;\n /**\n * Kebab-case identifier\n */\n deployment_pattern_id?: string;\n /**\n * Terrain pieces composing the layout. May be empty while a layout is registered by name ahead of its confirmed geometry.\n */\n pieces?: Piece[];\n game_version: GameVersionReference;\n}\n/**\n * A feature placed on an area template, positioned in the area's centroid-local frame (y-down inches). When the area is placed, rotated, or mirrored, its composed features are carried along.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"composed-feature\".\n */\nexport interface ComposedFeature {\n /**\n * Kebab-case identifier\n */\n id?: string;\n /**\n * Kebab-case identifier\n */\n template: string;\n position: Vec23;\n /**\n * Clockwise rotation of the feature about its own centroid, within the area-local frame.\n */\n rotation_degrees?: number;\n mirror?: \"none\" | \"horizontal\" | \"vertical\";\n /**\n * Ruin floor this feature occupies (0 = ground level).\n */\n floor?: number;\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n */\nexport interface Vec23 {\n x: number;\n y: number;\n}\n/**\n * A reusable terrain piece in the standard catalog: a gameplay area (the 11e terrain-area templates) or a scenery feature (walls, containers, pipes, floor segments). Footprints are authored in natural local inches; the terrain resolver derives each footprint's polygon area centroid and re-centers on it, so a layout piece that instances a template places its centroid via the layout's `position`. An `area` template may carry an embedded `features` list — scenery placed in the area's centroid-local frame — making the template a reusable composition (e.g. a ruin with its walls). Placing such a template places all of its features, transformed by the area's own placement.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"terrain-template\".\n */\nexport interface TerrainTemplate {\n id: EntityId;\n name: string;\n /**\n * `area` = a gameplay terrain zone; `feature` = physical scenery placed on an area.\n */\n kind: \"area\" | \"feature\";\n /**\n * Catalog or mission pack the template originates from.\n */\n source?: string;\n footprint: Footprint;\n /**\n * Default height in inches for pieces instancing this template. Gates Plunging Fire (>= 3\").\n */\n default_height_inches?: number;\n /**\n * Whether the template blocks line of sight / movement by default.\n */\n default_blocking?: boolean;\n /**\n * Whether models may be placed on the ground footprint. `false` marks an elevated-only piece (a platform reachable only on its `upper_floor`, e.g. a gantry/catwalk) or a solid obstacle with no valid placement (e.g. a generator). Meaningful for `kind: \"feature\"`.\n */\n ground_accessible?: boolean;\n /**\n * An elevated platform carried by this feature (e.g. a ruin's second storey). Its footprint is authored in the SAME local frame as `footprint` and re-centered on the GROUND footprint's polygon area centroid, so the two floors stay registered when the piece is placed, rotated, or mirrored. Non-resolved metadata: the terrain resolver does not emit it; authoring/visualization tools render it as an overlay. Meaningful for `kind: \"feature\"`.\n */\n upper_floor?: {\n footprint: Footprint;\n /**\n * Ruin floor this platform occupies (1 = first floor above ground).\n */\n floor?: number;\n };\n /**\n * Terrain-area keywords areas of this template carry by default. Meaningful for `kind: \"area\"`.\n */\n default_terrain_area_keywords?: TerrainAreaKeyword[];\n /**\n * Composed scenery features, in the area's centroid-local frame. Only meaningful for `kind: \"area\"`.\n */\n features?: ComposedFeature[];\n game_version: GameVersionReference;\n}\n/**\n * Describes the internal model-type breakdown of a unit.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"unit-composition\".\n */\nexport interface UnitComposition {\n unit_id: EntityId;\n /**\n * @minItems 1\n */\n models: [\n {\n name: string;\n profile_name?: string | null;\n min: number;\n max: number;\n default_weapon_ids?: EntityId[];\n is_leader_model?: boolean;\n base_size_mm?: BaseSize1;\n /**\n * Optional reference to a hull-shape entity giving this model's 2D collision polygon, used instead of the circular/oval base footprint. By convention a model carrying this should set `base_size_mm.shape` to \"hull\".\n */\n hull_shape_id?: EntityId | null;\n },\n ...{\n name: string;\n profile_name?: string | null;\n min: number;\n max: number;\n default_weapon_ids?: EntityId[];\n is_leader_model?: boolean;\n base_size_mm?: BaseSize1;\n /**\n * Optional reference to a hull-shape entity giving this model's 2D collision polygon, used instead of the circular/oval base footprint. By convention a model carrying this should set `base_size_mm.shape` to \"hull\".\n */\n hull_shape_id?: EntityId | null;\n }[]\n ];\n game_version: GameVersionReference;\n}\n/**\n * This model's base. Absent when no base could be resolved for the model.\n */\nexport interface BaseSize1 {\n shape: \"round\" | \"oval\" | \"flying-base\" | \"hull\" | \"unique\";\n diameter?: number;\n width?: number;\n length?: number;\n /**\n * Flying-base size class, when 'shape' is 'flying-base'.\n */\n size?: \"small\" | \"large\";\n /**\n * True when the entry is provisional/guessed (e.g. a category without authoritative dimensions) and should be revisited.\n */\n draft?: boolean;\n}\n/**\n * A unit datasheet entry with stat profiles and point costs.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"unit\".\n */\nexport interface Unit {\n id: EntityId;\n name: string;\n faction_id: EntityId;\n /**\n * Battlefield role from the datasheet header. Unit types (Infantry, Vehicle, etc.) belong in keywords.\n */\n role?: \"character\" | \"battleline\" | \"dedicated-transport\" | \"fortification\" | \"allied\" | \"epic-hero\";\n /**\n * Character attachment role (11e). 'support' implies the unit is only legal when attached to a host unit (cannot be taken solo); 'leader' is valid as a standalone list entry. null/absent for non-attaching units.\n */\n attachment_role?: (\"leader\" | \"support\") | null;\n /**\n * @minItems 1\n */\n profiles: [\n {\n /**\n * Profile name (e.g., 'Wounded' for degrading)\n */\n name?: string;\n M: StatValue;\n T: number;\n W: number;\n Sv: number;\n invuln_sv?: number | null;\n Ld: number;\n OC: number;\n [k: string]: unknown;\n },\n ...{\n /**\n * Profile name (e.g., 'Wounded' for degrading)\n */\n name?: string;\n M: StatValue;\n T: number;\n W: number;\n Sv: number;\n invuln_sv?: number | null;\n Ld: number;\n OC: number;\n [k: string]: unknown;\n }[]\n ];\n points?: {\n models: number;\n cost: number;\n [k: string]: unknown;\n }[];\n /**\n * True when point costs are carried over provisionally (e.g. seeded from a prior edition during migration) and not yet confirmed against the current dataslate.\n */\n points_provisional?: boolean;\n keywords?: KeywordList;\n faction_keywords?: KeywordList;\n /**\n * The unit's representative base (the most-numerous model's base). Mixed-model units carry the full per-model breakdown in unit-composition; this top-level value is a convenience for consumers that need a single base.\n */\n base_size_mm?: BaseSize | null;\n model_count?: {\n min: number;\n max: number;\n [k: string]: unknown;\n };\n weapon_ids?: EntityId[];\n ability_ids?: EntityId[];\n transport_capacity?: {\n capacity: number;\n keyword_restrictions?: KeywordList | null;\n exclusion_keywords?: KeywordList | null;\n } | null;\n game_version: GameVersionReference;\n is_legend?: boolean;\n}\n/**\n * A wargear option available to models within a unit: a weapon/wargear swap, a pure add-on, or a choice between alternatives. Models start with the unit's base loadout; an option modifies that loadout for the number of models its `model_constraint` permits.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"wargear-option\".\n */\nexport interface WargearOption {\n id: EntityId;\n unit_id: EntityId;\n model_constraint?: {\n model_name?: string;\n per_n_models?: number;\n max_count?: number;\n /**\n * When true, every model in the unit may take the option ('Any number of models can each ...'). Mutually exclusive in spirit with `per_n_models`.\n */\n any_number?: boolean;\n } | null;\n /**\n * Weapon or wargear IDs removed from the model. Omit for a pure add-on (the option only equips new wargear).\n *\n * @minItems 1\n */\n replaces?: [EntityId, ...EntityId[]];\n /**\n * Weapon or wargear IDs added to the model — all of them. Exactly one of `replacement` / `replacement_choice` is present.\n *\n * @minItems 1\n */\n replacement?: [EntityId, ...EntityId[]];\n /**\n * A choice of replacements ('one of the following'): pick exactly one inner group; each group's IDs are all added together. Exactly one of `replacement` / `replacement_choice` is present.\n *\n * @minItems 2\n */\n replacement_choice?: [[EntityId, ...EntityId[]], [EntityId, ...EntityId[]], ...[EntityId, ...EntityId[]][]];\n is_free?: boolean;\n additional_cost?: number | null;\n game_version: GameVersionReference;\n}\n/**\n * A non-weapon item a model may carry — an icon, attachment, or other piece of equipment with no weapon profile. Weapons live in weapon.schema.json; this entity exists so wargear-option swaps and add-ons can reference equipment that is not a weapon.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"wargear\".\n */\nexport interface Wargear {\n id: EntityId;\n name: string;\n category?: string | null;\n game_version: GameVersionReference;\n}\n/**\n * Catalog entry for a weapon keyword (Lethal Hits, Sustained Hits N, Anti-X N+, etc.). Each weapon profile references entries here via {keyword_id, parameters?} instead of carrying free-text strings. The optional `effect` describes the keyword's game mechanic in the Ability DSL; null when the behaviour is faction-specific flavour not yet modelled.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"weapon-keyword\".\n */\nexport interface WeaponKeyword {\n id: EntityId;\n name: string;\n /**\n * Parameter keys that must be supplied at each reference site, in the order they would appear in a printed datasheet (e.g. Anti-INFANTRY 4+ → ['target_keyword', 'threshold']).\n *\n * @maxItems 3\n */\n required_parameters:\n | []\n | [\"value\" | \"target_keyword\" | \"threshold\"]\n | [\"value\" | \"target_keyword\" | \"threshold\", \"value\" | \"target_keyword\" | \"threshold\"]\n | [\n \"value\" | \"target_keyword\" | \"threshold\",\n \"value\" | \"target_keyword\" | \"threshold\",\n \"value\" | \"target_keyword\" | \"threshold\"\n ];\n /**\n * Mechanical effect of this keyword. Null when the behaviour is faction-specific flavour not yet expressible in the DSL — engines treat such references as no-op buffs and may surface them as 'cannot auto-apply'.\n */\n effect: AbilityEffect1 | null;\n game_version: GameVersionReference;\n}\n/**\n * A weapon entry with one or more stat profiles (e.g., standard and overcharge modes).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"weapon\".\n */\nexport interface Weapon {\n id: EntityId;\n name: string;\n type: \"ranged\" | \"melee\";\n /**\n * @minItems 1\n */\n profiles: [\n {\n name: string;\n range?: number | \"Melee\";\n stats: {\n A: StatValue;\n BS?: number | null;\n WS?: number | null;\n S: StatValue;\n AP: number;\n D: StatValue;\n [k: string]: unknown;\n };\n /**\n * References into the weapon-keyword catalog. Each entry names the catalog id and supplies parameter values (e.g. `Sustained Hits 1` → `{keyword_id: 'sustained-hits', parameters: {value: 1}}`).\n */\n keywords?: {\n keyword_id: EntityId;\n /**\n * Reference-site parameters conforming to the catalog entry's required_parameters. Only the three documented keys are accepted; any other key is invalid.\n */\n parameters?: {\n value?: StatValue;\n target_keyword?: string;\n threshold?: number;\n };\n }[];\n },\n ...{\n name: string;\n range?: number | \"Melee\";\n stats: {\n A: StatValue;\n BS?: number | null;\n WS?: number | null;\n S: StatValue;\n AP: number;\n D: StatValue;\n [k: string]: unknown;\n };\n /**\n * References into the weapon-keyword catalog. Each entry names the catalog id and supplies parameter values (e.g. `Sustained Hits 1` → `{keyword_id: 'sustained-hits', parameters: {value: 1}}`).\n */\n keywords?: {\n keyword_id: EntityId;\n /**\n * Reference-site parameters conforming to the catalog entry's required_parameters. Only the three documented keys are accepted; any other key is invalid.\n */\n parameters?: {\n value?: StatValue;\n target_keyword?: string;\n threshold?: number;\n };\n }[];\n }[]\n ];\n game_version: GameVersionReference;\n}\n/**\n * Community-authored structured representation of what a game ability does. NOT GW text.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"ability\".\n */\nexport interface AbilityDSLEntry {\n ability_id: EntityId;\n name: string;\n authored_by: ContributorRef;\n game_version: GameVersionReference;\n version?: DataslateVersion;\n supersedes?: DataslateVersion | null;\n unit_ids?: EntityId[];\n /**\n * For faction-type abilities, the faction this rule belongs to\n */\n faction_id?: EntityId | null;\n /**\n * For detachment/enhancement/stratagem-type abilities, the associated detachment\n */\n detachment_id?: EntityId | null;\n ability_type?: \"core\" | \"faction\" | \"detachment\" | \"unit\" | \"enhancement\" | \"stratagem\";\n /**\n * How this ability interacts with the game flow — not a runtime predicate\n */\n behavior?: \"passive\" | \"activated\" | \"reactive\" | \"aura\";\n effect: AbilityEffect1;\n scope: AbilityScope;\n /**\n * Static, human-curated keyword filter naming which datasheet units this ability benefits, for roster-side highlighting. A unit matches when it carries every keyword in `required_keywords` (across its `keywords` + `faction_keywords`) and none in `excluded_keywords`. This is a denormalized projection distinct from the runtime `effect` condition tree (which mixes static class, runtime-granted markers, and timing gates and must not be scraped for scope). Absent/null means no resolvable unit scope — consumers render no highlight rather than guess.\n */\n applies_to?: {\n required_keywords?: KeywordList;\n excluded_keywords?: KeywordList;\n } | null;\n interactions?: {\n ability_ref: EntityId;\n type: \"conflicts-with\" | \"combos-with\" | \"superseded-by\" | \"requires\" | \"replaces\";\n notes?: string;\n [k: string]: unknown;\n }[];\n disputed?: boolean;\n dispute_notes?: string;\n community_notes?: string;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"scope\".\n */\nexport interface AbilityScope {\n range:\n | \"self\"\n | \"unit\"\n | \"attached\"\n | \"aura-6\"\n | \"aura-9\"\n | \"aura-12\"\n | \"aura-custom\"\n | \"engagement-range\"\n | \"any-visible\"\n | \"any-on-battlefield\"\n | \"terrain-within-range\";\n duration: \"phase\" | \"turn\" | \"battle-round\" | \"battle\" | \"until-next-command-phase\" | \"one-use\" | \"permanent\";\n range_inches?: number;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"interaction-flag\".\n */\nexport interface InteractionFlag {\n ability_a: EntityId;\n ability_b: EntityId;\n interaction_type: \"conflicts\" | \"combos\" | \"sequencing-dependent\" | \"stacks\" | \"does-not-stack\" | \"replaces\";\n resolution?: string;\n faq_reference?: string;\n disputed?: boolean;\n game_version: GameVersionReference;\n authored_by?: ContributorRef;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"phase-mapping\".\n */\nexport interface PhaseMapping {\n source_id: EntityId;\n source_type: SourceType;\n phases: PhaseList;\n game_version: GameVersionReference;\n authored_by?: ContributorRef;\n [k: string]: unknown;\n}\n/**\n * A faction's resource system (Miracle Dice, Pain tokens, Blessings dice pool, etc.).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"resource-pool\".\n */\nexport interface ResourcePool {\n id: EntityId;\n name: string;\n faction_id: EntityId;\n pool_type: \"token\" | \"dice-pool\" | \"counter\";\n generation?: {\n condition: AbilityCondition2;\n amount: StatValue;\n [k: string]: unknown;\n }[];\n max_size?: number | null;\n game_version: GameVersionReference;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"timing-flag\".\n */\nexport interface TimingFlag {\n source_id: EntityId;\n source_type: SourceType;\n timing:\n | \"start-of-phase\"\n | \"end-of-phase\"\n | \"before-hit-roll\"\n | \"after-hit-roll\"\n | \"before-wound-roll\"\n | \"after-wound-roll\"\n | \"before-save-roll\"\n | \"after-save-roll\"\n | \"before-damage-roll\"\n | \"after-damage-roll\"\n | \"before-charge-roll\"\n | \"after-charge-roll\"\n | \"before-advance-roll\"\n | \"after-advance-roll\"\n | \"before-battle-shock\"\n | \"after-battle-shock\"\n | \"on-unit-selected\"\n | \"on-unit-destroyed\"\n | \"on-model-destroyed\"\n | \"on-damage-allocated\";\n game_version: GameVersionReference;\n authored_by?: ContributorRef;\n [k: string]: unknown;\n}\n"]}
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../src/generated.ts"],"names":[],"mappings":"AAAA,gHAAgH","sourcesContent":["/* Generated from crates/wh40kdc/schemas/bundled.schema.json by 'npm run codegen:types'. DO NOT EDIT BY HAND. */\n\n/**\n * Kebab-case identifier\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"entity-id\".\n */\nexport type EntityId = string;\n/**\n * Game edition, e.g. '10th' or '11'\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"edition\".\n */\nexport type Edition = string;\n/**\n * Dataslate version: a quarterly tag (e.g. '2025-q3') or a named kebab-case slug for non-quarterly slates (e.g. 'pre-launch-provisional')\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"dataslate-version\".\n */\nexport type DataslateVersion = string;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"keyword\".\n */\nexport type Keyword = string;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"keyword-list\".\n */\nexport type KeywordList = Keyword[];\n/**\n * A stat that can be a fixed number or a dice expression\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"stat-value\".\n */\nexport type StatValue = number | string;\n/**\n * GitHub handle or '40kdc-community'\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"contributor-ref\".\n */\nexport type ContributorRef = string;\n/**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"phase\".\n */\nexport type Phase = \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n/**\n * @minItems 1\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"phase-list\".\n */\nexport type PhaseList = [Phase, ...Phase[]];\n/**\n * Type of game element that is the source of an enrichment entry\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"source-type\".\n */\nexport type SourceType = \"ability\" | \"stratagem\" | \"enhancement\" | \"detachment-rule\" | \"faction-rule\";\n/**\n * Which player's turn this applies during\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"player-turn\".\n */\nexport type PlayerTurn = \"your-turn\" | \"opponent-turn\" | \"either\";\n/**\n * 11e battle size, which sets the army's points limit and detachment-point budget: 'incursion' = 1000 pts / 2 detachment points; 'strike-force' = 2000 pts / 3 detachment points.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"battle-size\".\n */\nexport type BattleSize = \"incursion\" | \"strike-force\";\n/**\n * One of the five confirmed 11e launch Force Dispositions. Shared by force-disposition entities and the mission-matchup matrix.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"force-disposition-id\".\n */\nexport type ForceDispositionId =\n | \"take-and-hold\"\n | \"disruption\"\n | \"purge-the-foe\"\n | \"priority-assets\"\n | \"reconnaissance\";\n/**\n * A terrain piece's 2D footprint in local inches (y-down): an axis-aligned rectangle with its min corner at the local origin, a right triangle with the right angle at the local origin and legs along +x/+y, or an explicit polygon (>= 3 points). The placement resolver re-centers the footprint on its polygon area centroid, so the local-origin convention does not affect where the piece lands — only its shape matters.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"footprint\".\n */\nexport type Footprint =\n | {\n type: \"rectangle\";\n width: number;\n height: number;\n }\n | {\n type: \"right-triangle\";\n width: number;\n height: number;\n }\n | {\n type: \"polygon\";\n /**\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n };\n/**\n * An 11e terrain-area keyword. Confirmed launch set; extend as further keywords publish on dataslate.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"terrain-area-keyword\".\n */\nexport type TerrainAreaKeyword = \"obscuring\" | \"hidden\" | \"plunging-fire\";\n/**\n * Army gate: every model in the army must carry at least one of these keywords for the rule to apply (e.g. ['Chaos Knights', 'Heretic Astartes'] for Daemonic Pact). Empty = no army-level gate (the rule is then gated only by `detachment_id`, whose detachment is itself faction-locked).\n */\nexport type KeywordList1 = Keyword[];\n/**\n * A unit qualifies for this pool when it carries any of these keywords (e.g. ['Legiones Daemonica'], ['Damned'], ['Vanguard Invader']). Empty = the whole `source_faction_id` is the pool.\n */\nexport type KeywordList2 = Keyword[];\n/**\n * Additional filter: a unit must carry ALL of these to be included via this rule (e.g. the matching god ['Khorne'] for a per-god Daemon pool).\n */\nexport type KeywordList3 = Keyword[];\n/**\n * A unit carrying ANY of these cannot be included via this rule (e.g. Brood Brothers bans 'Aircraft', 'Epic Hero', 'Ogryn', ...).\n */\nexport type KeywordList4 = Keyword[];\n/**\n * Per-keyword Battleline ratio constraint: for each keyword listed, the number of non-BATTLELINE units with that keyword included via this rule cannot exceed the number of BATTLELINE units with that keyword included via this rule (e.g. Daemonic Pact's per-god ['Khorne','Tzeentch','Nurgle','Slaanesh']).\n */\nexport type KeywordList5 = Keyword[];\n/**\n * A zone footprint, expressed as an axis-aligned rectangle or an explicit polygon. Vertices/extent are relative to the owning element's position.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"zone-shape\".\n */\nexport type ZoneShape =\n | {\n type: \"rectangle\";\n width: number;\n height: number;\n }\n | {\n type: \"polygon\";\n /**\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n };\n/**\n * Which player a zone or territory belongs to.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"side\".\n */\nexport type Side = \"attacker\" | \"defender\";\n/**\n * Eligibility predicate for which units may perform the action.\n */\nexport type AbilityCondition = SimpleCondition | CompoundCondition;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"condition-node\".\n */\nexport type ConditionNode = SimpleCondition | CompoundCondition;\n/**\n * Predicate for when the action is considered complete.\n */\nexport type AbilityCondition1 = SimpleCondition | CompoundCondition;\n/**\n * Effect applied when the action completes (e.g. terrain-area-tag, objective-tag, or unit-tag to mark transient state).\n */\nexport type AbilityEffect =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"effect-node\".\n */\nexport type EffectNode =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\nexport type AbilityCondition2 = SimpleCondition | CompoundCondition;\n/**\n * Predicate that BLOCKS starting the action while it holds (Sensor Sweep: a unit cannot start this action if there is only one operation marker on the battlefield).\n */\nexport type AbilityCondition3 = SimpleCondition | CompoundCondition;\nexport type AbilityEffect1 =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"condition\".\n */\nexport type AbilityCondition4 = SimpleCondition | CompoundCondition;\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"effect\".\n */\nexport type AbilityEffect2 =\n | SingleEffect\n | ChoiceEffect\n | SequenceEffect\n | DiceGatedEffect\n | ConditionalEffect\n | DicePoolAllocationEffect;\n\n/**\n * Auto-generated by tools/src/bundle-schemas.ts. Single self-contained schema for Rust codegen — do not edit by hand.\n */\nexport interface KdcBundledSchemas {\n [k: string]: unknown;\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"vec2\".\n */\nexport interface Vec2 {\n x: number;\n y: number;\n}\n/**\n * A model's base. 'round' carries 'diameter'; 'oval' carries 'width'+'length'. 'flying-base' (with 'size': small/large), 'hull', and 'unique' are categories the GW base-size guide gives without standard millimetre dimensions; entries carrying such a category, or any millimetre value not taken from an authoritative source, set 'draft': true to mark them for later hand-authoring.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"base-size\".\n */\nexport interface BaseSize {\n shape: \"round\" | \"oval\" | \"flying-base\" | \"hull\" | \"unique\";\n diameter?: number;\n width?: number;\n length?: number;\n /**\n * Flying-base size class, when 'shape' is 'flying-base'.\n */\n size?: \"small\" | \"large\";\n /**\n * True when the entry is provisional/guessed (e.g. a category without authoritative dimensions) and should be revisited.\n */\n draft?: boolean;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"game-version-ref\".\n */\nexport interface GameVersionReference {\n edition: Edition;\n dataslate: DataslateVersion;\n [k: string]: unknown;\n}\n/**\n * The combined points cap for units included via an allied rule at one battle size.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"allied-points-limit\".\n */\nexport interface AlliedPointsLimit {\n /**\n * Battle size this cap applies at. Includes 'onslaught' (3000 pts), which ally rules reference even though the core roster battle-size enum lists only incursion/strike-force.\n */\n battle_size: \"incursion\" | \"strike-force\" | \"onslaught\";\n /**\n * Maximum combined points of units included via the rule at this battle size.\n */\n max_points: number;\n}\n/**\n * A community-authored model of an allied-detachment / 'soup' rule: the named exception by which units lacking the army's chosen Faction keyword may still be included (e.g. Daemonic Pact, Brood Brothers, Iconoclast Fiefdom's Damned access). One rule = one allied source pool; a faction that allies in several pools (the Chaos cult pattern: a Chaos Knights pool plus a matching-god Daemons pool) carries one rule per pool. The rule is gated by two optional, AND-combined conditions: an army-wide keyword condition (`army_keywords_any`) and/or a selected detachment (`detachment_id`).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"allied-rule\".\n */\nexport interface AlliedRule {\n id: EntityId;\n name: string;\n /**\n * Short panel/category heading a list builder groups this pool under (e.g. 'Daemons', 'Imperial Agents', 'Titanic Allies'). Defaults to `name` when omitted.\n */\n label?: string;\n army_keywords_any?: KeywordList1;\n /**\n * Detachment gate: this exact detachment must be selected for the rule to apply (e.g. 'iconoclast-fiefdom'). null = no detachment-level gate. Independent of the detachment's combat rule (`detachment_rule_id`).\n */\n detachment_id?: EntityId | null;\n /**\n * Faction the ally pool is drawn from, when scoping by faction is needed to disambiguate units whose id is shared across factions. Optional hint; `source_keywords` is the primary filter.\n */\n source_faction_id?: EntityId | null;\n source_keywords?: KeywordList2;\n required_keywords?: KeywordList3;\n excluded_keywords?: KeywordList4;\n /**\n * Optional battlefield-role filter (matched against a unit's `role`). Empty = no role restriction.\n */\n roles?: string[];\n /**\n * Absolute points cap on the combined cost of units included via this rule, per battle size. Empty = no points cap. A rule lists at most one entry per battle size.\n */\n points_limits?: AlliedPointsLimit[];\n /**\n * Optional cap on the number of units included via this rule, independent of points. null = no unit-count cap.\n */\n max_units?: number | null;\n /**\n * True when units included via this rule cannot be the army's Warlord (e.g. Daemonic Pact, Star Children's Blessings).\n */\n cannot_be_warlord?: boolean;\n /**\n * True when units included via this rule cannot be given Enhancements (e.g. Daemonic Pact).\n */\n cannot_take_enhancements?: boolean;\n /**\n * Host-Warlord requirement: a model carrying this keyword must be the army's Warlord (e.g. Brood Brothers requires a 'Genestealer Cults' Warlord). null = no such requirement.\n */\n warlord_required_keyword?: Keyword | null;\n /**\n * Abilities that included units lose under this rule (e.g. Astra Militarum units lose 'voice-of-command' under Brood Brothers). A display/effect hint, not a construction constraint.\n */\n removes_ability_ids?: EntityId[];\n battleline_ratio_keywords?: KeywordList5;\n game_version: GameVersionReference;\n notes?: string;\n}\n/**\n * A deployment map: per-side deployment zones, objective positions, and (11e) per-side territory polygons. Pattern geometry carries forward unchanged from 10th edition; downstream tooling (e.g. bevy-deploy-helper) consumes this as the canonical encoding.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"deployment-pattern\".\n */\nexport interface DeploymentPattern {\n id: EntityId;\n name: string;\n /**\n * Mission pack or source the pattern originates from (e.g. 'leviathan').\n */\n source?: string;\n description?: string;\n /**\n * Per-side deployment zones.\n *\n * @minItems 1\n */\n zones: [\n {\n player: Side;\n name?: string;\n shape: ZoneShape;\n position: Vec2;\n /**\n * Hex render color for the zone overlay.\n */\n color?: string;\n },\n ...{\n player: Side;\n name?: string;\n shape: ZoneShape;\n position: Vec2;\n /**\n * Hex render color for the zone overlay.\n */\n color?: string;\n }[]\n ];\n /**\n * 11e per-side territory polygons, mirroring the deployment-zone shape (e.g. the band between a deployment zone and the midline). Empty until authored.\n */\n territories?: {\n player: Side;\n shape: ZoneShape;\n position: Vec2;\n }[];\n /**\n * Objective-marker positions on the board.\n */\n objectives?: Vec2[];\n /**\n * Ids of recommended terrain-layout entities (resolved once terrain-layout data is authored).\n */\n recommended_terrain_layout_ids?: EntityId[];\n game_version: GameVersionReference;\n}\n/**\n * A construction keyword a detachment grants to units matching a keyword filter. Blanket by default (every matching unit gains it); when `max_selected` is set, the keyword is instead granted to up to that many matching units of the player's choice (e.g. Houndpack Lance: 'select three WAR DOG units; they gain CHARACTER').\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"granted-keyword\".\n */\nexport interface GrantedKeyword {\n keyword: Keyword;\n to_keywords: KeywordList;\n /**\n * When present, the grant is not blanket: the player selects up to this many matching units to receive `keyword` (e.g. 3 WAR DOG units gain CHARACTER under Houndpack Lance). Absent = every matching unit gains it.\n */\n max_selected?: number;\n}\n/**\n * A minimum number of units carrying a keyword that the detachment requires.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"unit-minimum\".\n */\nexport interface UnitMinimum {\n keyword: Keyword;\n min: number;\n}\n/**\n * A detachment option within a faction, providing a detachment rule, enhancements, and stratagems.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"detachment\".\n */\nexport interface Detachment {\n id: EntityId;\n name: string;\n faction_id: EntityId;\n detachment_rule_id?: EntityId | null;\n /**\n * 11e: the detachment-point cost (1–3) charged against the army's detachment-point budget. null when not yet assigned.\n */\n detachment_points?: number | null;\n /**\n * 11e: ids of the Force Disposition entities this detachment grants. Empty until assigned.\n */\n force_dispositions?: EntityId[];\n /**\n * 11e: detachment-type tags (e.g. 'dynasty', 'kabal'). A roster may include at most one detachment per shared tag — the 'you can only take one of X type of detachment' rule. Empty when the detachment carries no UNIQUE tag.\n */\n tags?: string[];\n enhancement_ids?: EntityId[];\n stratagem_ids?: EntityId[];\n restrictions?: {\n required_keywords?: KeywordList;\n excluded_keywords?: KeywordList;\n notes?: string;\n } | null;\n /**\n * Construction keywords this detachment grants to matching units while it is selected (e.g. Houndpack Lance grants 'Battleline' to 'War Dog' units). A unit carrying any keyword in a grant's `to_keywords` gains that grant's `keyword` for army-construction purposes (datasheet-count caps, battlefield role). Empty/absent when the detachment grants no construction keywords. Distinct from combat keywords, which live in the ability DSL.\n */\n granted_keywords?: GrantedKeyword[];\n /**\n * Minimum unit counts the detachment requires while selected (e.g. Houndpack Lance: 'your army must include three or more WAR DOG units'). Each entry requires at least `min` units carrying `keyword`. Empty/absent when the detachment imposes no minimum.\n */\n unit_minimums?: UnitMinimum[];\n game_version: GameVersionReference;\n}\n/**\n * A purchasable upgrade for a character unit, provided by a detachment.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"enhancement\".\n */\nexport interface Enhancement {\n id: EntityId;\n name: string;\n detachment_id: EntityId;\n cost: number;\n /**\n * True when the cost is carried over provisionally (e.g. seeded from a prior edition during migration) and not yet confirmed against the current dataslate.\n */\n points_provisional?: boolean;\n /**\n * 11e: when true, this enhancement applies to up to `max_targets` non-character units while counting as a single Enhancement choice.\n */\n upgrade_tag?: boolean;\n /**\n * Number of units this enhancement may be applied to. Only meaningful when `upgrade_tag` is true; defaults to 1.\n */\n max_targets?: number;\n keyword_restrictions?: KeywordList;\n exclusion_keywords?: KeywordList | null;\n ability_id?: EntityId | null;\n is_unique?: boolean;\n game_version: GameVersionReference;\n}\n/**\n * A playable faction or sub-faction.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"faction\".\n */\nexport interface Faction {\n id: EntityId;\n name: string;\n parent_faction_id?: EntityId | null;\n game_version: GameVersionReference;\n keywords?: KeywordList;\n aliases?: string[];\n /**\n * Reference to the faction-wide ability (e.g., Oath of Moment)\n */\n faction_rule_id?: EntityId | null;\n}\n/**\n * A 11e strategic-intent tag granted by detachments. Players compare dispositions at game start to determine the shared mission; asymmetric primary objectives result.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"force-disposition\".\n */\nexport interface ForceDisposition {\n /**\n * One of the five confirmed launch Force Dispositions.\n */\n id: \"take-and-hold\" | \"disruption\" | \"purge-the-foe\" | \"priority-assets\" | \"reconnaissance\";\n name: string;\n /**\n * Community-authored description of the disposition's effect (original prose only — no reproduced rules text).\n */\n text?: string;\n game_version: GameVersionReference;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"game-version\".\n */\nexport interface GameVersion {\n edition: Edition;\n dataslate: DataslateVersion;\n effective_date: string;\n label?: string;\n supersedes?: DataslateVersion | null;\n}\n/**\n * A model's 2D collision footprint as an explicit polygon, used in place of a circular/oval base for vehicles and other hull-based models. Points are authored in local inches (y-down); a consumer re-centers the polygon on its area centroid before placement, so the local origin does not affect where the model lands — only its shape matters (mirrors the terrain-template footprint convention). A hull shape is faction-agnostic and reusable: one outline (e.g. a Rhino chassis) is authored once and referenced by `hull_shape_id` from every model that shares that hull, across factions. This entity stores geometry only — never an image, image URL, or any source-asset metadata.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"hull-shape\".\n */\nexport interface HullShape {\n id: EntityId;\n name: string;\n /**\n * Polygon vertices in local inches (y-down), in order around the outline. A hull is always a polygon (never a rectangle/right-triangle), so the points are given directly rather than via the shared `footprint` oneOf.\n *\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n /**\n * Cached axis-aligned bounding-box width in inches (max x − min x). Derived from `points`; recorded so consumers can size/scale without recomputing.\n */\n bounds_width_in: number;\n /**\n * Cached axis-aligned bounding-box height in inches (max y − min y). Derived from `points`.\n */\n bounds_height_in: number;\n game_version: GameVersionReference;\n}\n/**\n * Defines which character units can attach to which bodyguard units.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"leader-attachment\".\n */\nexport interface LeaderAttachment {\n leader_id: EntityId;\n /**\n * @minItems 1\n */\n eligible_bodyguard_ids: [EntityId, ...EntityId[]];\n game_version: GameVersionReference;\n}\n/**\n * One cell of the 11e Force Disposition matrix: given the player's own Force Disposition and their opponent's, the mission that player plays. Mirrors a single row on a physical Force Disposition card. The (disposition, opponent_disposition) pair is the conceptual key; compound uniqueness across entries is a data convention, not enforced by this schema.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"mission-matchup\".\n */\nexport interface MissionMatchup {\n id: EntityId;\n /**\n * The player's own Force Disposition.\n */\n disposition: \"take-and-hold\" | \"disruption\" | \"purge-the-foe\" | \"priority-assets\" | \"reconnaissance\";\n /**\n * The opponent's Force Disposition.\n */\n opponent_disposition: \"take-and-hold\" | \"disruption\" | \"purge-the-foe\" | \"priority-assets\" | \"reconnaissance\";\n /**\n * Kebab-case identifier\n */\n mission_id: string;\n game_version: GameVersionReference;\n}\n/**\n * An 11e primary mission (the objective a player scores). Which mission a player plays is selected by the Force Disposition matchup matrix (see mission-matchup), keyed on the player's own disposition and their opponent's. Victory points are capped per game and per battle round.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"mission\".\n */\nexport interface Mission {\n id: EntityId;\n name: string;\n /**\n * Mission pack or source the mission originates from.\n */\n source?: string;\n /**\n * Community-authored mission/objective summary (original prose only — no reproduced rules text).\n */\n description?: string;\n /**\n * Maximum primary VP scorable across the whole game. 11e default is 45.\n */\n vp_per_game_cap?: number;\n /**\n * Maximum primary VP scorable in a single battle round. 11e default is 15.\n */\n vp_per_round_cap?: number;\n /**\n * Ids of the deployment-pattern entities (maps) this mission can be played on. Empty until the per-mission maps are confirmed.\n */\n deployment_pattern_ids?: EntityId[];\n game_version: GameVersionReference;\n}\n/**\n * When a VP award is evaluated. A bare `phase` is the legacy shorthand for 'during this phase'; richer triggers add `timing` (the moment within a phase/turn/game), `player_turn`, and a `battle_round` window. A card's section headers map onto these: 'ANY BATTLE ROUND' omits `battle_round`; 'SECOND BATTLE ROUND ONWARDS' is { min: 2 }; 'END OF THE BATTLE' is timing: end-of-battle.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"scoring-trigger\".\n */\nexport interface ScoringTrigger {\n /**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n */\n phase?: \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n /**\n * The moment the award is checked. 'End of your turn' = end-of-turn; 'End of your Command phase' = end-of-phase with phase: command; 'End of the battle' = end-of-battle.\n */\n timing?: \"start-of-turn\" | \"end-of-turn\" | \"start-of-phase\" | \"end-of-phase\" | \"end-of-battle\";\n player_turn?: PlayerTurn;\n /**\n * Battle-round window in which the trigger is active. Absent means any battle round (1-5). 'Second battle round onwards' is { min: 2 }.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n}\n/**\n * A draw-time predicate over an army list (not runtime board state, so deliberately NOT the Ability DSL condition). Used to gate when_drawn operations such as redraws. Example: a card that is void unless the opponent fields a large unit (10e 'Cull the Horde' redrew when the opponent had no unit of 14+ models) is { subject: 'opponent', quantifier: 'none', unit_filter: { model_count_min: 14 } } with operation 'redraw'.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"army-composition-predicate\".\n */\nexport interface ArmyCompositionPredicate {\n /**\n * Whose army list the predicate inspects.\n */\n subject: \"self\" | \"opponent\";\n /**\n * Whether the army must contain ('any') or lack ('none') a unit matching unit_filter for the predicate to hold.\n */\n quantifier: \"any\" | \"none\";\n /**\n * Criteria a unit in the army must satisfy to match. All present criteria must hold (logical AND).\n */\n unit_filter: {\n model_count_min?: number;\n model_count_max?: number;\n wounds_min?: number;\n keywords?: KeywordList;\n };\n}\n/**\n * An 11e mission card. The deck-level rule (draw 2 per turn, keep unscored cards) is separate and not modelled here. This is the per-card shape: an optional on-draw deck operation, an optional player action, and zero or more VP-award blocks. Primary mission cards reuse this shape via card_type. Mechanic blocks reference the Ability DSL; prose is community-authored (no reproduced rules text).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"secondary-card\".\n */\nexport interface SecondaryCard {\n id: EntityId;\n name: string;\n /**\n * Whether this is a secondary card or a primary mission card (which reuses this shape).\n */\n card_type?: \"secondary\" | \"primary\";\n /**\n * Finer classification within the deck (e.g. a category or tactical/fixed split). Free-form — not enum-locked until 11e categories are confirmed.\n */\n subtype?: string;\n /**\n * Optional deck operation performed when this card is drawn (e.g. redraw, swap). Distinct from combat effects — deck operations have no combat target, so they are not modelled via the Ability DSL effect language. If `condition` is present, the operation fires only when the predicate holds.\n */\n when_drawn?: {\n /**\n * The deck manipulation this card triggers on draw.\n */\n operation: \"reshuffle\" | \"replace\" | \"redraw\" | \"draw-extra\" | \"swap\";\n /**\n * Other cards this operation references, by id.\n */\n card_ids?: EntityId[];\n condition?: ArmyCompositionPredicate1;\n /**\n * Battle-round window in which the draw operation is eligible (e.g. { max: 1 } means 'only when drawn in the first battle round'). Absent means the operation fires regardless of round.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n };\n /**\n * Optional player actions the card enables. Most cards have a single action; a few (e.g. Observe Enemy, with separate Baited-removal and Spotted actions) have two distinct actions on the same card.\n *\n * @minItems 1\n */\n actions?: [\n {\n /**\n * Optional kebab-case identifier used to reference this action from `action-completed` conditions in `awards[].when`.\n */\n action_id?: string;\n /**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n */\n starts?: \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n /**\n * Non-phase moment the action happens, for card rules that are not started in a phase (Locate and Deny's start-of-battle marker placement, Punishment's start-of-turn condemnation, Consecrate's end-of-turn objective selection). Mutually informative with `starts` — a card action uses one or the other.\n */\n timing?: \"start-of-battle\" | \"start-of-turn\" | \"end-of-turn\";\n /**\n * Battle-round window in which the action can be started. Absent means any battle round. 'From the second battle round onwards' (Triangulate, Extract Intelligence) is { min: 2 }.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n player_turn?: PlayerTurn;\n units?: AbilityCondition;\n /**\n * Maximum number of times the action may be performed (per turn unless `use_limit_scope` says otherwise).\n */\n use_limit?: number;\n /**\n * Whether `use_limit` is enforced per turn or once per game (e.g. Recover the Relics / Find and Deny 'Overwhelming Force' is once per game).\n */\n use_limit_scope?: \"per-turn\" | \"per-game\";\n completes?: AbilityCondition1;\n effect?: AbilityEffect;\n restrictions?: AbilityCondition3;\n },\n ...{\n /**\n * Optional kebab-case identifier used to reference this action from `action-completed` conditions in `awards[].when`.\n */\n action_id?: string;\n /**\n * The five official game phases. Unchanged between 10th and 11th edition — 11e reorders Pile In timing within the Fight phase but adds no top-level phase.\n */\n starts?: \"command\" | \"movement\" | \"shooting\" | \"charge\" | \"fight\";\n /**\n * Non-phase moment the action happens, for card rules that are not started in a phase (Locate and Deny's start-of-battle marker placement, Punishment's start-of-turn condemnation, Consecrate's end-of-turn objective selection). Mutually informative with `starts` — a card action uses one or the other.\n */\n timing?: \"start-of-battle\" | \"start-of-turn\" | \"end-of-turn\";\n /**\n * Battle-round window in which the action can be started. Absent means any battle round. 'From the second battle round onwards' (Triangulate, Extract Intelligence) is { min: 2 }.\n */\n battle_round?: {\n min?: number;\n max?: number;\n };\n player_turn?: PlayerTurn;\n units?: AbilityCondition;\n /**\n * Maximum number of times the action may be performed (per turn unless `use_limit_scope` says otherwise).\n */\n use_limit?: number;\n /**\n * Whether `use_limit` is enforced per turn or once per game (e.g. Recover the Relics / Find and Deny 'Overwhelming Force' is once per game).\n */\n use_limit_scope?: \"per-turn\" | \"per-game\";\n completes?: AbilityCondition1;\n effect?: AbilityEffect;\n restrictions?: AbilityCondition3;\n }[]\n ];\n /**\n * VP-award blocks: each scores when `trigger` fires and the optional `when` condition holds. An award scores either a flat `vp` or a count-scaled `vp_per` (VP per instance of the thing named by `per`). Awards accrue independently and sum; a card's '+ ... CUMULATIVE' rows are modelled as separate awards flagged `cumulative` for faithful round-trip. Awards sharing the same `exclusive_group` value within a card resolve as the highest-scoring single award fires (the card's literal 'OR' rows between tier breakpoints, e.g. Record-Breaking Mission's 3-Fronts vs 4-Fronts).\n *\n * @minItems 1\n */\n awards?: [\n (\n | {\n [k: string]: unknown;\n }\n | {\n [k: string]: unknown;\n }\n ),\n ...(\n | {\n [k: string]: unknown;\n }\n | {\n [k: string]: unknown;\n }\n )[]\n ];\n /**\n * Community-authored card description (original prose only — no reproduced rules text).\n */\n text?: string;\n game_version: GameVersionReference;\n}\n/**\n * Draw-time army-composition predicate gating the operation (e.g. redraw when the opponent lacks a qualifying unit).\n */\nexport interface ArmyCompositionPredicate1 {\n /**\n * Whose army list the predicate inspects.\n */\n subject: \"self\" | \"opponent\";\n /**\n * Whether the army must contain ('any') or lack ('none') a unit matching unit_filter for the predicate to hold.\n */\n quantifier: \"any\" | \"none\";\n /**\n * Criteria a unit in the army must satisfy to match. All present criteria must hold (logical AND).\n */\n unit_filter: {\n model_count_min?: number;\n model_count_max?: number;\n wounds_min?: number;\n keywords?: KeywordList;\n };\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"simple-condition\".\n */\nexport interface SimpleCondition {\n type:\n | \"phase-is\"\n | \"timing-is\"\n | \"player-turn-is\"\n | \"unit-below-starting-strength\"\n | \"unit-below-half-strength\"\n | \"unit-has-keyword\"\n | \"unit-within-range-of\"\n | \"model-is-leader\"\n | \"target-has-keyword\"\n | \"charged-this-turn\"\n | \"advanced-this-turn\"\n | \"remained-stationary\"\n | \"is-battle-shocked\"\n | \"has-lost-wounds\"\n | \"was-hit-by-attack\"\n | \"opponent-unit-within-range\"\n | \"within-range-of-objective\"\n | \"attack-is-type\"\n | \"has-fought-this-phase\"\n | \"destroyed-by-attack-type\"\n | \"controls-objective\"\n | \"is-attached\"\n | \"terrain-area-control\"\n | \"engagement-state\"\n | \"territory-control\"\n | \"fights-first\"\n | \"disposition-matches\"\n | \"units-destroyed\"\n | \"units-destroyed-comparison\"\n | \"objective-majority\"\n | \"action-completed\"\n | \"objective-has-tag\"\n | \"unit-has-tag\"\n | \"terrain-has-tag\"\n | \"new-objective-controlled\"\n | \"engagement-fronts\"\n | \"destroyed-while-on-objective\"\n | \"destroyed-in-tagged-terrain\"\n | \"operation-markers\";\n parameters?: {\n [k: string]: unknown;\n };\n negated?: boolean;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"compound-condition\".\n */\nexport interface CompoundCondition {\n operator: \"and\" | \"or\" | \"not\";\n /**\n * @minItems 1\n */\n operands: [ConditionNode, ...ConditionNode[]];\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"single-effect\".\n */\nexport interface SingleEffect {\n type:\n | \"stat-modifier\"\n | \"roll-modifier\"\n | \"re-roll\"\n | \"mortal-wounds\"\n | \"feel-no-pain\"\n | \"invulnerable-save\"\n | \"ward\"\n | \"keyword-grant\"\n | \"movement-modifier\"\n | \"deep-strike\"\n | \"fallback-and-act\"\n | \"fight-first\"\n | \"fight-last\"\n | \"shoot-on-death\"\n | \"fight-on-death\"\n | \"objective-control-modifier\"\n | \"leadership-modifier\"\n | \"damage-reduction\"\n | \"attack-restriction\"\n | \"ability-grant\"\n | \"cp-gain\"\n | \"cp-refund\"\n | \"model-destruction\"\n | \"resurrection\"\n | \"resource-gain\"\n | \"resource-spend\"\n | \"charge-roll-modifier\"\n | \"terrain-area-tag\"\n | \"objective-tag\"\n | \"unit-tag\"\n | \"bs-modifier\"\n | \"engagement-passthrough\";\n target:\n | \"self\"\n | \"bearer\"\n | \"unit\"\n | \"attached-unit\"\n | \"attacker\"\n | \"defender\"\n | \"friendly-within-aura\"\n | \"enemy-within-aura\"\n | \"all-friendly\"\n | \"all-enemy\";\n modifier?: {\n [k: string]: unknown;\n };\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"choice-effect\".\n */\nexport interface ChoiceEffect {\n type: \"choice\";\n /**\n * @minItems 2\n */\n options: [EffectNode, EffectNode, ...EffectNode[]];\n choice_label?: string;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"sequence-effect\".\n */\nexport interface SequenceEffect {\n type: \"sequence\";\n /**\n * @minItems 1\n */\n steps: [EffectNode, ...EffectNode[]];\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"dice-gated-effect\".\n */\nexport interface DiceGatedEffect {\n type: \"dice-gated\";\n /**\n * Dice expression, e.g. 'D6', '2D6'\n */\n dice: string;\n /**\n * Fixed threshold or model characteristic to compare against\n */\n threshold: number | (\"leadership\" | \"toughness\" | \"save\");\n comparison?: \"gte\" | \"lte\" | \"gt\" | \"lt\" | \"eq\";\n on_success?: EffectNode | null;\n on_fail?: EffectNode | null;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"conditional-effect\".\n */\nexport interface ConditionalEffect {\n type: \"conditional\";\n condition: AbilityCondition2;\n effect: EffectNode;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"dice-pool-allocation-effect\".\n */\nexport interface DicePoolAllocationEffect {\n type: \"dice-pool-allocation\";\n pool: {\n count: number;\n die: string;\n [k: string]: unknown;\n };\n max_activations: number;\n /**\n * @minItems 1\n */\n options: [\n {\n name: string;\n requirement: {\n type: \"pair\" | \"triple\" | \"single\" | \"run\";\n min_value: number;\n [k: string]: unknown;\n };\n effect: EffectNode;\n [k: string]: unknown;\n },\n ...{\n name: string;\n requirement: {\n type: \"pair\" | \"triple\" | \"single\" | \"run\";\n min_value: number;\n [k: string]: unknown;\n };\n effect: EffectNode;\n [k: string]: unknown;\n }[]\n ];\n [k: string]: unknown;\n}\n/**\n * A CP-costed ability usable during specific game phases.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"stratagem\".\n */\nexport interface Stratagem {\n id: EntityId;\n name: string;\n /**\n * Whether this is a universal core stratagem or tied to a specific detachment\n */\n category: \"core\" | \"detachment\";\n /**\n * GW-printed stratagem category from the card. Optional: 11e faction packs omit it for newly introduced detachments, and the category has no in-game effect; absent when the source does not state one.\n */\n type?: \"battle-tactic\" | \"strategic-ploy\" | \"epic-deed\" | \"wargear\";\n /**\n * Null for core stratagems\n */\n detachment_id?: EntityId | null;\n cp_cost: number;\n phases: PhaseList;\n player_turn: PlayerTurn;\n timing: \"once-per-phase\" | \"once-per-turn\" | \"once-per-battle\" | \"unlimited\";\n target_restrictions?: {\n required_keywords?: KeywordList;\n excluded_keywords?: KeywordList;\n notes?: string;\n } | null;\n ability_id?: EntityId | null;\n game_version: GameVersionReference;\n}\n/**\n * A named target archetype for damage comparison. References a real dataset unit (faction_id + unit_id) rather than copying its stat line, so the profile stays in sync with dataset updates. Stats, keywords, and defensive abilities are resolved from the referenced unit at use time.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"target-profile\".\n */\nexport interface TargetProfile {\n id: EntityId;\n name: string;\n description?: string;\n /**\n * Kebab-case identifier\n */\n faction_id: string;\n /**\n * Kebab-case identifier\n */\n unit_id: string;\n /**\n * Optional non-default squad size for the comparison. When null/absent, the referenced unit's model_count.min is used.\n */\n model_count_override?: number | null;\n game_version: GameVersionReference;\n}\n/**\n * One terrain piece placed on the board. Geometry comes from a catalog `template` or an inline `footprint` (if both are present, `footprint` is authoritative and `template` is provenance).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"piece\".\n */\nexport interface Piece {\n /**\n * Kebab-case identifier\n */\n id?: string;\n name?: string;\n /**\n * An `area` is a gameplay terrain zone (the 11e 'terrain area'); a `feature` is physical scenery (walls, containers, pipes) placed on an area.\n */\n piece_type?: \"area\" | \"feature\";\n /**\n * Kebab-case identifier\n */\n template?: string;\n /**\n * Inline geometry, standing in for or overriding a template footprint. Authoritative when present.\n */\n footprint?:\n | {\n type: \"rectangle\";\n width: number;\n height: number;\n }\n | {\n type: \"right-triangle\";\n width: number;\n height: number;\n }\n | {\n type: \"polygon\";\n /**\n * @minItems 3\n */\n points: [Vec2, Vec2, Vec2, ...Vec2[]];\n };\n position: Vec21;\n /**\n * Clockwise rotation about the centroid in the y-down board frame. Absent or 0 means the template's natural orientation.\n */\n rotation_degrees?: number;\n /**\n * Reflection applied in the centroid-local frame before rotation: `horizontal` negates local x (left-right flip), `vertical` negates local y.\n */\n mirror?: \"none\" | \"horizontal\" | \"vertical\";\n /**\n * Kebab-case identifier\n */\n parent_area_id?: string;\n /**\n * Ruin floor this piece occupies (0 = ground level).\n */\n floor?: number;\n /**\n * Height of the piece in inches; overrides the template default. Gates Plunging Fire (a piece 3\" or taller confers +1 BS on ground-level targets).\n */\n height_inches?: number;\n /**\n * Terrain-area keywords this piece's area carries; overrides the template default.\n */\n terrain_area_keywords?: TerrainAreaKeyword[];\n /**\n * Pieces sharing a `link_group` value are linked terrain — treated as a single terrain feature (and, where an objective sits among them, a single objective).\n */\n link_group?: string;\n /**\n * Designates this terrain area — or, when `link_group`'d, the union of linked areas (one objective for the set) — as carrying an objective of the given 11e role: `home` (inside a deployment zone), `center` (board middle), or `expansion` (no-man's-land). Implies `is_objective`.\n */\n objective_role?: \"home\" | \"expansion\" | \"center\";\n /**\n * Whether this piece carries an objective marker.\n */\n is_objective?: boolean;\n /**\n * Objective-marker metadata. Only meaningful when `is_objective` is true.\n */\n objective?: {\n position?: Vec22;\n /**\n * Range from the marker within which models contribute to control.\n */\n control_range_inches?: number;\n };\n /**\n * Measurement keystones: the author-selected dimension lines a reference card prints so a player can place this piece with a tape measure (board edge → a feature of the placed piece). Only the selection is stored — the distance is always DERIVED from the resolved geometry by the shared keystone resolver (pinned by the conformance corpus), so a keystone can never disagree with the layout. Vertex indices follow the resolver's pinned vertex order; re-authoring a template's footprint invalidates them, so review keystones when geometry changes.\n */\n keystones?: {\n /**\n * The board edge the measurement runs from, in the y-down board frame (left/right pin x against board width; top/bottom pin y against board height).\n */\n edge: \"left\" | \"right\" | \"top\" | \"bottom\";\n /**\n * Which feature of the placed piece the measurement reaches: a footprint vertex (by resolver vertex order) or an axis-aligned bounding face of the placed footprint.\n */\n ref:\n | {\n kind: \"vertex\";\n index: number;\n }\n | {\n kind: \"face\";\n side: \"min-x\" | \"max-x\" | \"min-y\" | \"max-y\";\n };\n }[];\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n */\nexport interface Vec21 {\n x: number;\n y: number;\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n */\nexport interface Vec22 {\n x: number;\n y: number;\n}\n/**\n * A recommended arrangement of terrain pieces on the board, independent of the deployment map (a deployment-pattern references the layouts it recommends via recommended_terrain_layout_ids). Each piece draws its geometry from a catalog `template` (a terrain-template entity) or an inline `footprint`; geometry is the source of truth. Placement is template-centroid-anchored: `position` is the piece's centroid, which is invariant under rotation and mirror, so orientation and location are decoupled. Resolved board-space vertices are derived by the shared terrain resolver (pinned by the conformance corpus), never stored here. No layout data is authored yet beyond migrated examples.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"terrain-layout\".\n */\nexport interface TerrainLayout {\n id: EntityId;\n name: string;\n /**\n * Mission pack or source the layout originates from.\n */\n source?: string;\n description?: string;\n /**\n * Kebab-case identifier\n */\n mission_matchup_id?: string;\n /**\n * The card's trailing variant number within its mission matchup (1–3 at launch, since three layouts share each pairing). No hard maximum, to avoid a breaking change if more variants ship.\n */\n variant?: number;\n /**\n * Kebab-case identifier\n */\n deployment_pattern_id?: string;\n /**\n * Terrain pieces composing the layout. May be empty while a layout is registered by name ahead of its confirmed geometry.\n */\n pieces?: Piece[];\n game_version: GameVersionReference;\n}\n/**\n * A feature placed on an area template, positioned in the area's centroid-local frame (y-down inches). When the area is placed, rotated, or mirrored, its composed features are carried along.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"composed-feature\".\n */\nexport interface ComposedFeature {\n /**\n * Kebab-case identifier\n */\n id?: string;\n /**\n * Kebab-case identifier\n */\n template: string;\n position: Vec23;\n /**\n * Clockwise rotation of the feature about its own centroid, within the area-local frame.\n */\n rotation_degrees?: number;\n mirror?: \"none\" | \"horizontal\" | \"vertical\";\n /**\n * Ruin floor this feature occupies (0 = ground level).\n */\n floor?: number;\n}\n/**\n * A 2D point in board inches. Origin at a board corner; JSON uses y-down (downstream renderers may flip to y-up).\n */\nexport interface Vec23 {\n x: number;\n y: number;\n}\n/**\n * A reusable terrain piece in the standard catalog: a gameplay area (the 11e terrain-area templates) or a scenery feature (walls, containers, pipes, floor segments). Footprints are authored in natural local inches; the terrain resolver derives each footprint's polygon area centroid and re-centers on it, so a layout piece that instances a template places its centroid via the layout's `position`. An `area` template may carry an embedded `features` list — scenery placed in the area's centroid-local frame — making the template a reusable composition (e.g. a ruin with its walls). Placing such a template places all of its features, transformed by the area's own placement.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"terrain-template\".\n */\nexport interface TerrainTemplate {\n id: EntityId;\n name: string;\n /**\n * `area` = a gameplay terrain zone; `feature` = physical scenery placed on an area.\n */\n kind: \"area\" | \"feature\";\n /**\n * Catalog or mission pack the template originates from.\n */\n source?: string;\n footprint: Footprint;\n /**\n * Default height in inches for pieces instancing this template. Gates Plunging Fire (>= 3\").\n */\n default_height_inches?: number;\n /**\n * Whether the template blocks line of sight / movement by default.\n */\n default_blocking?: boolean;\n /**\n * Whether models may be placed on the ground footprint. `false` marks an elevated-only piece (a platform reachable only on its `upper_floor`, e.g. a gantry/catwalk) or a solid obstacle with no valid placement (e.g. a generator). Meaningful for `kind: \"feature\"`.\n */\n ground_accessible?: boolean;\n /**\n * An elevated platform carried by this feature (e.g. a ruin's second storey). Its footprint is authored in the SAME local frame as `footprint` and re-centered on the GROUND footprint's polygon area centroid, so the two floors stay registered when the piece is placed, rotated, or mirrored. Non-resolved metadata: the terrain resolver does not emit it; authoring/visualization tools render it as an overlay. Meaningful for `kind: \"feature\"`.\n */\n upper_floor?: {\n footprint: Footprint;\n /**\n * Ruin floor this platform occupies (1 = first floor above ground).\n */\n floor?: number;\n };\n /**\n * Terrain-area keywords areas of this template carry by default. Meaningful for `kind: \"area\"`.\n */\n default_terrain_area_keywords?: TerrainAreaKeyword[];\n /**\n * Composed scenery features, in the area's centroid-local frame. Only meaningful for `kind: \"area\"`.\n */\n features?: ComposedFeature[];\n game_version: GameVersionReference;\n}\n/**\n * Describes the internal model-type breakdown of a unit.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"unit-composition\".\n */\nexport interface UnitComposition {\n unit_id: EntityId;\n /**\n * @minItems 1\n */\n models: [\n {\n name: string;\n profile_name?: string | null;\n min: number;\n max: number;\n default_weapon_ids?: EntityId[];\n is_leader_model?: boolean;\n base_size_mm?: BaseSize1;\n /**\n * Optional reference to a hull-shape entity giving this model's 2D collision polygon, used instead of the circular/oval base footprint. By convention a model carrying this should set `base_size_mm.shape` to \"hull\".\n */\n hull_shape_id?: EntityId | null;\n },\n ...{\n name: string;\n profile_name?: string | null;\n min: number;\n max: number;\n default_weapon_ids?: EntityId[];\n is_leader_model?: boolean;\n base_size_mm?: BaseSize1;\n /**\n * Optional reference to a hull-shape entity giving this model's 2D collision polygon, used instead of the circular/oval base footprint. By convention a model carrying this should set `base_size_mm.shape` to \"hull\".\n */\n hull_shape_id?: EntityId | null;\n }[]\n ];\n game_version: GameVersionReference;\n}\n/**\n * This model's base. Absent when no base could be resolved for the model.\n */\nexport interface BaseSize1 {\n shape: \"round\" | \"oval\" | \"flying-base\" | \"hull\" | \"unique\";\n diameter?: number;\n width?: number;\n length?: number;\n /**\n * Flying-base size class, when 'shape' is 'flying-base'.\n */\n size?: \"small\" | \"large\";\n /**\n * True when the entry is provisional/guessed (e.g. a category without authoritative dimensions) and should be revisited.\n */\n draft?: boolean;\n}\n/**\n * A unit datasheet entry with stat profiles and point costs.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"unit\".\n */\nexport interface Unit {\n id: EntityId;\n name: string;\n faction_id: EntityId;\n /**\n * Battlefield role from the datasheet header. Unit types (Infantry, Vehicle, etc.) belong in keywords.\n */\n role?: \"character\" | \"battleline\" | \"dedicated-transport\" | \"fortification\" | \"allied\" | \"epic-hero\";\n /**\n * Character attachment role (11e). 'support' implies the unit is only legal when attached to a host unit (cannot be taken solo); 'leader' is valid as a standalone list entry. null/absent for non-attaching units.\n */\n attachment_role?: (\"leader\" | \"support\") | null;\n /**\n * @minItems 1\n */\n profiles: [\n {\n /**\n * Profile name (e.g., 'Wounded' for degrading)\n */\n name?: string;\n M: StatValue;\n T: number;\n W: number;\n Sv: number;\n invuln_sv?: number | null;\n Ld: number;\n OC: number;\n [k: string]: unknown;\n },\n ...{\n /**\n * Profile name (e.g., 'Wounded' for degrading)\n */\n name?: string;\n M: StatValue;\n T: number;\n W: number;\n Sv: number;\n invuln_sv?: number | null;\n Ld: number;\n OC: number;\n [k: string]: unknown;\n }[]\n ];\n points?: {\n models: number;\n cost: number;\n [k: string]: unknown;\n }[];\n /**\n * True when point costs are carried over provisionally (e.g. seeded from a prior edition during migration) and not yet confirmed against the current dataslate.\n */\n points_provisional?: boolean;\n keywords?: KeywordList;\n faction_keywords?: KeywordList;\n /**\n * The unit's representative base (the most-numerous model's base). Mixed-model units carry the full per-model breakdown in unit-composition; this top-level value is a convenience for consumers that need a single base.\n */\n base_size_mm?: BaseSize | null;\n model_count?: {\n min: number;\n max: number;\n [k: string]: unknown;\n };\n weapon_ids?: EntityId[];\n ability_ids?: EntityId[];\n transport_capacity?: {\n capacity: number;\n keyword_restrictions?: KeywordList | null;\n exclusion_keywords?: KeywordList | null;\n } | null;\n game_version: GameVersionReference;\n is_legend?: boolean;\n}\n/**\n * A wargear option available to models within a unit: a weapon/wargear swap, a pure add-on, or a choice between alternatives. Models start with the unit's base loadout; an option modifies that loadout for the number of models its `model_constraint` permits.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"wargear-option\".\n */\nexport interface WargearOption {\n id: EntityId;\n unit_id: EntityId;\n model_constraint?: {\n model_name?: string;\n per_n_models?: number;\n max_count?: number;\n /**\n * When true, every model in the unit may take the option ('Any number of models can each ...'). Mutually exclusive in spirit with `per_n_models`.\n */\n any_number?: boolean;\n } | null;\n /**\n * Weapon or wargear IDs removed from the model. Omit for a pure add-on (the option only equips new wargear).\n *\n * @minItems 1\n */\n replaces?: [EntityId, ...EntityId[]];\n /**\n * Weapon or wargear IDs added to the model — all of them. Exactly one of `replacement` / `replacement_choice` is present.\n *\n * @minItems 1\n */\n replacement?: [EntityId, ...EntityId[]];\n /**\n * A choice of replacements ('one of the following'): pick exactly one inner group; each group's IDs are all added together. Exactly one of `replacement` / `replacement_choice` is present.\n *\n * @minItems 2\n */\n replacement_choice?: [[EntityId, ...EntityId[]], [EntityId, ...EntityId[]], ...[EntityId, ...EntityId[]][]];\n is_free?: boolean;\n additional_cost?: number | null;\n game_version: GameVersionReference;\n}\n/**\n * A non-weapon item a model may carry — an icon, attachment, or other piece of equipment with no weapon profile. Weapons live in weapon.schema.json; this entity exists so wargear-option swaps and add-ons can reference equipment that is not a weapon.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"wargear\".\n */\nexport interface Wargear {\n id: EntityId;\n name: string;\n category?: string | null;\n game_version: GameVersionReference;\n}\n/**\n * Catalog entry for a weapon keyword (Lethal Hits, Sustained Hits N, Anti-X N+, etc.). Each weapon profile references entries here via {keyword_id, parameters?} instead of carrying free-text strings. The optional `effect` describes the keyword's game mechanic in the Ability DSL; null when the behaviour is faction-specific flavour not yet modelled.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"weapon-keyword\".\n */\nexport interface WeaponKeyword {\n id: EntityId;\n name: string;\n /**\n * Parameter keys that must be supplied at each reference site, in the order they would appear in a printed datasheet (e.g. Anti-INFANTRY 4+ → ['target_keyword', 'threshold']).\n *\n * @maxItems 3\n */\n required_parameters:\n | []\n | [\"value\" | \"target_keyword\" | \"threshold\"]\n | [\"value\" | \"target_keyword\" | \"threshold\", \"value\" | \"target_keyword\" | \"threshold\"]\n | [\n \"value\" | \"target_keyword\" | \"threshold\",\n \"value\" | \"target_keyword\" | \"threshold\",\n \"value\" | \"target_keyword\" | \"threshold\"\n ];\n /**\n * Mechanical effect of this keyword. Null when the behaviour is faction-specific flavour not yet expressible in the DSL — engines treat such references as no-op buffs and may surface them as 'cannot auto-apply'.\n */\n effect: AbilityEffect1 | null;\n game_version: GameVersionReference;\n}\n/**\n * A weapon entry with one or more stat profiles (e.g., standard and overcharge modes).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"weapon\".\n */\nexport interface Weapon {\n id: EntityId;\n name: string;\n type: \"ranged\" | \"melee\";\n /**\n * @minItems 1\n */\n profiles: [\n {\n name: string;\n range?: number | \"Melee\";\n stats: {\n A: StatValue;\n BS?: number | null;\n WS?: number | null;\n S: StatValue;\n AP: number;\n D: StatValue;\n [k: string]: unknown;\n };\n /**\n * References into the weapon-keyword catalog. Each entry names the catalog id and supplies parameter values (e.g. `Sustained Hits 1` → `{keyword_id: 'sustained-hits', parameters: {value: 1}}`).\n */\n keywords?: {\n keyword_id: EntityId;\n /**\n * Reference-site parameters conforming to the catalog entry's required_parameters. Only the three documented keys are accepted; any other key is invalid.\n */\n parameters?: {\n value?: StatValue;\n target_keyword?: string;\n threshold?: number;\n };\n }[];\n },\n ...{\n name: string;\n range?: number | \"Melee\";\n stats: {\n A: StatValue;\n BS?: number | null;\n WS?: number | null;\n S: StatValue;\n AP: number;\n D: StatValue;\n [k: string]: unknown;\n };\n /**\n * References into the weapon-keyword catalog. Each entry names the catalog id and supplies parameter values (e.g. `Sustained Hits 1` → `{keyword_id: 'sustained-hits', parameters: {value: 1}}`).\n */\n keywords?: {\n keyword_id: EntityId;\n /**\n * Reference-site parameters conforming to the catalog entry's required_parameters. Only the three documented keys are accepted; any other key is invalid.\n */\n parameters?: {\n value?: StatValue;\n target_keyword?: string;\n threshold?: number;\n };\n }[];\n }[]\n ];\n game_version: GameVersionReference;\n}\n/**\n * Community-authored structured representation of what a game ability does. NOT GW text.\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"ability\".\n */\nexport interface AbilityDSLEntry {\n ability_id: EntityId;\n name: string;\n authored_by: ContributorRef;\n game_version: GameVersionReference;\n version?: DataslateVersion;\n supersedes?: DataslateVersion | null;\n unit_ids?: EntityId[];\n /**\n * For faction-type abilities, the faction this rule belongs to\n */\n faction_id?: EntityId | null;\n /**\n * For detachment/enhancement/stratagem-type abilities, the associated detachment\n */\n detachment_id?: EntityId | null;\n ability_type?: \"core\" | \"faction\" | \"detachment\" | \"unit\" | \"enhancement\" | \"stratagem\";\n /**\n * How this ability interacts with the game flow — not a runtime predicate\n */\n behavior?: \"passive\" | \"activated\" | \"reactive\" | \"aura\";\n effect: AbilityEffect1;\n scope: AbilityScope;\n /**\n * Static, human-curated keyword filter naming which datasheet units this ability benefits, for roster-side highlighting. A unit matches when it carries every keyword in `required_keywords` (across its `keywords` + `faction_keywords`) and none in `excluded_keywords`. This is a denormalized projection distinct from the runtime `effect` condition tree (which mixes static class, runtime-granted markers, and timing gates and must not be scraped for scope). Absent/null means no resolvable unit scope — consumers render no highlight rather than guess.\n */\n applies_to?: {\n required_keywords?: KeywordList;\n excluded_keywords?: KeywordList;\n } | null;\n interactions?: {\n ability_ref: EntityId;\n type: \"conflicts-with\" | \"combos-with\" | \"superseded-by\" | \"requires\" | \"replaces\";\n notes?: string;\n [k: string]: unknown;\n }[];\n disputed?: boolean;\n dispute_notes?: string;\n community_notes?: string;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"scope\".\n */\nexport interface AbilityScope {\n range:\n | \"self\"\n | \"unit\"\n | \"attached\"\n | \"aura-6\"\n | \"aura-9\"\n | \"aura-12\"\n | \"aura-custom\"\n | \"engagement-range\"\n | \"any-visible\"\n | \"any-on-battlefield\"\n | \"terrain-within-range\";\n duration: \"phase\" | \"turn\" | \"battle-round\" | \"battle\" | \"until-next-command-phase\" | \"one-use\" | \"permanent\";\n range_inches?: number;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"interaction-flag\".\n */\nexport interface InteractionFlag {\n ability_a: EntityId;\n ability_b: EntityId;\n interaction_type: \"conflicts\" | \"combos\" | \"sequencing-dependent\" | \"stacks\" | \"does-not-stack\" | \"replaces\";\n resolution?: string;\n faq_reference?: string;\n disputed?: boolean;\n game_version: GameVersionReference;\n authored_by?: ContributorRef;\n [k: string]: unknown;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"phase-mapping\".\n */\nexport interface PhaseMapping {\n source_id: EntityId;\n source_type: SourceType;\n phases: PhaseList;\n game_version: GameVersionReference;\n authored_by?: ContributorRef;\n [k: string]: unknown;\n}\n/**\n * A faction's resource system (Miracle Dice, Pain tokens, Blessings dice pool, etc.).\n *\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"resource-pool\".\n */\nexport interface ResourcePool {\n id: EntityId;\n name: string;\n faction_id: EntityId;\n pool_type: \"token\" | \"dice-pool\" | \"counter\";\n generation?: {\n condition: AbilityCondition2;\n amount: StatValue;\n [k: string]: unknown;\n }[];\n max_size?: number | null;\n game_version: GameVersionReference;\n}\n/**\n * This interface was referenced by `0KdcBundledSchemas`'s JSON-Schema\n * via the `definition` \"timing-flag\".\n */\nexport interface TimingFlag {\n source_id: EntityId;\n source_type: SourceType;\n timing:\n | \"start-of-phase\"\n | \"end-of-phase\"\n | \"before-hit-roll\"\n | \"after-hit-roll\"\n | \"before-wound-roll\"\n | \"after-wound-roll\"\n | \"before-save-roll\"\n | \"after-save-roll\"\n | \"before-damage-roll\"\n | \"after-damage-roll\"\n | \"before-charge-roll\"\n | \"after-charge-roll\"\n | \"before-advance-roll\"\n | \"after-advance-roll\"\n | \"before-battle-shock\"\n | \"after-battle-shock\"\n | \"on-unit-selected\"\n | \"on-unit-destroyed\"\n | \"on-model-destroyed\"\n | \"on-damage-allocated\";\n game_version: GameVersionReference;\n authored_by?: ContributorRef;\n [k: string]: unknown;\n}\n"]}
@@ -0,0 +1,32 @@
1
+ import type { ValidationResult } from "./validate.js";
2
+ /**
3
+ * Factions whose units carry exactly one bare legion/faction faction_keyword.
4
+ *
5
+ * These are the shared-datasheet factions where contamination has been observed:
6
+ * a unit materialized from a parent template keeps the parent's faction keyword
7
+ * (e.g. a World Eaters Chaos Rhino left carrying `Emperor's Children`, or a Chaos
8
+ * Space Marines unit carrying the full multi-legion union line). For a faction in
9
+ * this map, every unit's `faction_keywords` must be a subset of `{home}`.
10
+ *
11
+ * Factions absent from this map (e.g. Space Marine chapters, which legitimately
12
+ * carry several faction_keywords) are not subject to the membership check, so the
13
+ * guard never produces a false positive on them. Extend this map as other
14
+ * single-token factions adopt the convention.
15
+ */
16
+ export declare const FACTION_HOME_KEYWORD: Record<string, string>;
17
+ /**
18
+ * Cross-entity referential integrity that per-file JSON Schema validation cannot
19
+ * express:
20
+ *
21
+ * - every unit `ability_id` must resolve to an ability defined in that faction's
22
+ * `enrichment/<faction>/abilities.json` (or the shared `enrichment/_core` pool).
23
+ * Same-faction scoping is deliberate — a union check would pass shared-unit
24
+ * contaminants because they happen to be defined in some *other* faction's
25
+ * enrichment.
26
+ * - every unit `faction_keywords` entry must be permitted for the unit's faction
27
+ * (see {@link FACTION_HOME_KEYWORD}).
28
+ *
29
+ * Results reuse {@link ValidationResult} so the CLI reporter can render them.
30
+ */
31
+ export declare function checkReferentialIntegrity(dataRoot?: string): Promise<ValidationResult>;
32
+ //# sourceMappingURL=integrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../src/integrity.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMvD,CAAC;AAyBF;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqE5F"}
@@ -0,0 +1,120 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { glob } from "glob";
3
+ import { resolve, basename, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ const __dirname = fileURLToPath(new URL(".", import.meta.url));
6
+ const DATA_ROOT = resolve(__dirname, "../../data");
7
+ /**
8
+ * Factions whose units carry exactly one bare legion/faction faction_keyword.
9
+ *
10
+ * These are the shared-datasheet factions where contamination has been observed:
11
+ * a unit materialized from a parent template keeps the parent's faction keyword
12
+ * (e.g. a World Eaters Chaos Rhino left carrying `Emperor's Children`, or a Chaos
13
+ * Space Marines unit carrying the full multi-legion union line). For a faction in
14
+ * this map, every unit's `faction_keywords` must be a subset of `{home}`.
15
+ *
16
+ * Factions absent from this map (e.g. Space Marine chapters, which legitimately
17
+ * carry several faction_keywords) are not subject to the membership check, so the
18
+ * guard never produces a false positive on them. Extend this map as other
19
+ * single-token factions adopt the convention.
20
+ */
21
+ export const FACTION_HOME_KEYWORD = {
22
+ "chaos-space-marines": "Heretic Astartes",
23
+ "world-eaters": "World Eaters",
24
+ "death-guard": "Death Guard",
25
+ "thousand-sons": "Thousand Sons",
26
+ "emperors-children": "Emperor’s Children",
27
+ };
28
+ function readArray(file) {
29
+ return JSON.parse(readFileSync(file, "utf-8"));
30
+ }
31
+ function loadAbilityIds(file, into) {
32
+ try {
33
+ for (const a of readArray(file)) {
34
+ if (a.ability_id)
35
+ into.add(a.ability_id);
36
+ }
37
+ }
38
+ catch {
39
+ // file absent — faction has no enrichment abilities, or no shared core pool
40
+ }
41
+ }
42
+ /**
43
+ * Cross-entity referential integrity that per-file JSON Schema validation cannot
44
+ * express:
45
+ *
46
+ * - every unit `ability_id` must resolve to an ability defined in that faction's
47
+ * `enrichment/<faction>/abilities.json` (or the shared `enrichment/_core` pool).
48
+ * Same-faction scoping is deliberate — a union check would pass shared-unit
49
+ * contaminants because they happen to be defined in some *other* faction's
50
+ * enrichment.
51
+ * - every unit `faction_keywords` entry must be permitted for the unit's faction
52
+ * (see {@link FACTION_HOME_KEYWORD}).
53
+ *
54
+ * Results reuse {@link ValidationResult} so the CLI reporter can render them.
55
+ */
56
+ export async function checkReferentialIntegrity(dataRoot) {
57
+ const root = dataRoot ?? DATA_ROOT;
58
+ const result = {
59
+ totalFiles: 0,
60
+ totalItems: 0,
61
+ passed: 0,
62
+ failed: 0,
63
+ errors: [],
64
+ };
65
+ // Shared core ability pool, available to every faction (optional).
66
+ const coreAbilities = new Set();
67
+ loadAbilityIds(resolve(root, "enrichment/_core/abilities.json"), coreAbilities);
68
+ const unitFiles = await glob("core/*/units.json", { cwd: root, absolute: true });
69
+ unitFiles.sort();
70
+ for (const file of unitFiles) {
71
+ const faction = basename(dirname(file));
72
+ if (faction.startsWith("_"))
73
+ continue; // scratch/example/report dirs
74
+ let units;
75
+ try {
76
+ units = readArray(file);
77
+ }
78
+ catch {
79
+ continue; // structural problems are the AJV pass's job
80
+ }
81
+ if (!Array.isArray(units))
82
+ continue;
83
+ const defined = new Set(coreAbilities);
84
+ loadAbilityIds(resolve(root, `enrichment/${faction}/abilities.json`), defined);
85
+ const home = FACTION_HOME_KEYWORD[faction];
86
+ result.totalFiles++;
87
+ for (let i = 0; i < units.length; i++) {
88
+ const u = units[i];
89
+ result.totalItems++;
90
+ const errs = [];
91
+ for (const aid of u.ability_ids ?? []) {
92
+ if (!defined.has(aid)) {
93
+ errs.push({
94
+ path: `/${i}/ability_ids`,
95
+ message: `unit "${u.id}": ability_id "${aid}" is not defined in ${faction} enrichment`,
96
+ });
97
+ }
98
+ }
99
+ if (home !== undefined) {
100
+ for (const fk of u.faction_keywords ?? []) {
101
+ if (fk !== home) {
102
+ errs.push({
103
+ path: `/${i}/faction_keywords`,
104
+ message: `unit "${u.id}": faction_keyword "${fk}" is not permitted for ${faction} (expected only "${home}")`,
105
+ });
106
+ }
107
+ }
108
+ }
109
+ if (errs.length > 0) {
110
+ result.failed++;
111
+ result.errors.push({ file, index: i, errors: errs });
112
+ }
113
+ else {
114
+ result.passed++;
115
+ }
116
+ }
117
+ }
118
+ return result;
119
+ }
120
+ //# sourceMappingURL=integrity.js.map