Deterministic army list validation against machine-readable rules. Use when ANY agent needs to check if an army list is legal, validate points totals, check enhancement eligibility, verify leader attachments, or run the Colosseum format rules.
This skill provides deterministic, rule-based army list validation. It reads validation rules from YAML and unit data from JSON to produce pass/fail results for each validation gate. No guessing — every check is backed by a specific rule.
Location: _bmad-output/warhammer-40k/agents/tacticus-sidecar/validation-rules.yaml
Contains:
faction_abilitieshard_rules — violations that make a list ILLEGALcolosseum_format — 500pt King of the Colosseum restrictionsdetachments — detachment-specific enhancements and rulesvalidation_gates — sequential checks that must ALL passLocation: _bmad/_config/custom/warhammer-40k/data/datasheets/{faction}.compact.json
Contains per-unit: points, sizes, epic_hero flag, keywords, leader info.
Location: army-lists/{faction}/*.cheatsheet.json
Contains per-unit: stats, weapons, abilities, leads array, points.
Run these gates IN ORDER. Stop on first failure.
1. Read validation-rules.yaml → hard_rules.points_limit.limits
2. Sum all unit points from the list
3. Sum all enhancement points
4. total = unit_points + enhancement_points
5. IF total > limit → ILLEGAL: "Over by X points"
6. Show itemized breakdown
1. Read validation-rules.yaml → hard_rules.rule_of_three
2. Count units by datasheet name
3. FOR each datasheet with count > 3:
- Check if unit has BATTLELINE or DEDICATED TRANSPORT keyword
- IF not exempt AND count > 3 → ILLEGAL: "X copies of Y (max 3)"
1. Read validation-rules.yaml → hard_rules.epic_hero_unique
2. FOR each unit in list:
- Check if epic_hero == true in datasheet
- IF same Epic Hero appears twice → ILLEGAL: "Duplicate Epic Hero: X"
1. Read validation-rules.yaml → hard_rules.enhancement_eligibility
2. FOR each enhancement assigned:
- Verify target has CHARACTER keyword
- Verify target does NOT have EPIC HERO keyword
- IF fails → ILLEGAL: "Enhancement on Epic Hero/non-CHARACTER: X"
3. Read hard_rules.enhancement_limit.limits
4. Count total enhancements
5. IF count > limit for game size → ILLEGAL: "Too many enhancements"
1. Read validation-rules.yaml → hard_rules.unit_sizes
2. FOR each unit:
- Read datasheet sizes array
- IF models not in valid sizes → ILLEGAL: "Invalid unit size for X"
1. Read validation-rules.yaml → hard_rules.leader_count
2. FOR each unit with attached leader(s):
- Verify leader's "leads" array includes the bodyguard unit
- IF two leaders attached, verify BOTH have "alongside" text
- IF fails → ILLEGAL: "Invalid leader attachment: X to Y"
1. Read validation-rules.yaml → faction_abilities
2. IF faction is a divergent chapter (Space Wolves, Blood Angels, etc.):
- Flag if list assumes full Oath of Moment (+1 wound)
- WARNING: "Divergent chapter — Oath of Moment is reroll hits ONLY"
IF game_size == 500 AND format == "colosseum":
1. Must have at least 1 CHARACTER
2. No models with Toughness > 9
3. No Epic Heroes
4. At least 2 INFANTRY units
Read full restrictions from colosseum_format section
## Validation Report: [Army Name]
| Gate | Check | Result | Detail |
|------|-------|--------|--------|
| 1 | Points Total | PASS/FAIL | X/Y pts (Z remaining) |
| 2 | Rule of Three | PASS/FAIL | [details if fail] |
| 3 | Epic Hero Unique | PASS/FAIL | |
| 4 | Enhancement Eligibility | PASS/FAIL | |
| 5 | Unit Sizes | PASS/FAIL | |
| 6 | Leader Attachments | PASS/FAIL | |
| 7 | Faction Abilities | WARN/OK | [divergent chapter note] |
**Verdict:** LEGAL / ILLEGAL (X gates failed)
[validation-rules.yaml: hard_rules.X]