---
name: stat-block-validator
description: >
  Audit and validate D&D 5e 2024 monster stat blocks for mechanical
  correctness, format conformity, and internal consistency. Five sequential
  checks: (1) format compliance against MM 2024 layout, (2) arithmetic
  validation (modifiers, saves, attacks, AC, HP), (3) CR math audit
  (offensive DPR × 3 rounds + defensive effective HP + AC), (4) action
  economy audit (multiattack, recharge, legendary/lair/regional/mythic
  actions), (5) trait vocabulary audit (2024 phrasing, official conditions,
  no 2014 syntax). Produces a structured defect report with severity
  (Critical / High / Medium / Low) and corrected stat block. Use on
  "validate this stat block", "audit my monster", "check the CR on this",
  "is this stat block legal 2024", "verify monster math", "audit homebrew
  creature", "valide ce bloc de stats", "audite ce monstre", "vérifie le
  CR". Boundary: VALIDATES existing stat blocks (use monster-creator to
  design new ones). Targets D&D 5e 2024 exclusively (not 2014, not PF2e,
  not OSR — those need different audit patterns once warranted). One stat
  block per call. NOT for PC builds, NOT for pure-narrative NPCs with no
  statblock, NOT a balance review ("your CR 5 monster has CR 7 math" yes;
  "your CR 5 monster is no fun to fight" — that's editorial, use
  ttrpg-supplement-reviewer).
---

# Stat Block Validator

Audit and validate D&D 5e 2024 monster stat blocks for mechanical
correctness, format conformity, and internal consistency. The output
is what a publisher's mechanical editor or rules-lawyer playtester
would deliver before sending a bestiary to layout.

The validator is **pure mechanical audit**. It does not opine on
flavor, narrative interest, or table-feel. It identifies what's
wrong, why it's wrong, and proposes a corrected value.

---

## Scope and Boundary

This skill validates **single D&D 5e 2024 stat blocks** for monsters
and NPCs presented in Monster Manual format.

| In scope | Out of scope |
|---|---|
| D&D 5e 2024 stat blocks (PHB 2024, MM 2024 conventions) | D&D 5e 2014 stat blocks (different format) |
| Format / layout audit | Flavor / narrative audit (use ttrpg-supplement-reviewer) |
| Arithmetic verification | Tactical advice ("this monster is hard to run") |
| CR math (offensive + defensive) | Encounter calibration (use encounter-builder) |
| Action economy audit (multiattack, recharge, legendary actions) | Re-designing the monster (use monster-creator) |
| Trait vocabulary against MM 2024 conventions | Multi-monster encounter audit |
| Legendary, lair, regional, mythic action consistency | PC builds in monster format (audit differently) |
| One stat block per call | Bestiary-wide cohesion (cross-creature theme, niche, CR distribution) |

**For 5e 2014 stat blocks**, the validator's heuristics mostly apply
but the format/vocabulary check will flag many false positives.
Future: a 2014-mode flag. For now, recommend converting via
`adventure-converter` first.

**For PF2e, OSR, or other systems**, this skill doesn't apply.

---

## Before You Begin

Two things to settle before validating:

1. **The stat block.** The user must provide the stat block text as
   a code block or quoted text. Don't infer from descriptions.

2. **Source context.** Is this stat block:
   - **Brand-new homebrew** (custom monster) — validate as standalone
     creation.
   - **Generated by another skill** (e.g., `monster-creator` output)
     — validate against the skill's design intent.
   - **Adapted from a 2014 source** — validate against 2024 conventions
     but flag legacy patterns separately.
   - **Reference / copy of an official 2024 monster** — verify against
     MM 2024 if data is available; flag any deviations.

If the stat block has ambiguous fields (missing CR, missing
ability scores, missing HP roll), ask before proceeding. Don't
invent missing data.

---

## The Five-Check Audit

Run each check in order. Each produces specific findings.

### Check 1 — Format Compliance

Load `references/stat-block-format-2024.md` for the canonical MM
2024 stat block layout.

**Required fields (all must be present):**

| Field | Format Example |
|---|---|
| Name | "Goblin Captain" |
| Size + Type + Tag + Alignment | "Small Humanoid (Goblinoid), Neutral Evil" |
| Armor Class | "AC 14 (chain shirt)" |
| Hit Points | "HP 38 (7d6 + 14)" |
| Speed | "Speed 30 ft." |
| Ability score block | STR / DEX / CON / INT / WIS / CHA with scores and modifiers |
| Saving Throws (if any) | "Saves Wis +5, Dex +4" |
| Skills (if any) | "Skills Perception +3, Stealth +6" |
| Damage Resistances / Immunities / Vulnerabilities (if any) | "Resistances Necrotic" |
| Condition Immunities (if any) | "Condition Immunities Charmed" |
| Senses | "Senses Darkvision 60 ft., Passive Perception 13" |
| Languages | "Languages Common, Goblin" |
| Challenge Rating | "CR 3 (XP 700; PB +2)" |
| Proficiency Bonus | "PB +2" |
| Habitat | "Habitat Forest, Mountain" |
| Treasure | "Treasure Individual" |
| Traits (if any) | Italicized name then descriptor |
| Actions | At least one action |
| Bonus Actions (if any) | Same structure |
| Reactions (if any) | Same structure |
| Legendary Actions (if any) | Header then sub-actions |
| Lair Actions / Regional Effects / Mythic Actions (if any) | Standard sub-headers |

**Format errors to flag:**

- Missing required field (Name, AC, HP, Speed, Ability scores, CR,
  PB, Senses, Languages — Habitat / Treasure are new in 2024 and
  occasionally absent in early conversions).
- Field in wrong order.
- Vocabulary drift (e.g., "race" instead of "species" in NPC
  descriptions, "Lawful Good" without "Typically" qualifier when
  optional alignment is intended).
- Capitalization errors ("bonus action" lowercase, should be "Bonus
  Action").
- Old 2014 patterns ("Speed 30 ft" without period, "AC 14
  (natural armor)" missing armor type).
- Action format errors (Action title not italicized, missing space
  before description, missing damage type).
- Trait or action description lacking specificity (e.g., "deals
  damage" with no die or type specified).

### Check 2 — Arithmetic Validation

Verify all derived values against their components.

**Ability score → Modifier:**

```
Modifier = (Score - 10) / 2, rounded down
```

| Score | Modifier |
|---|---|
| 1 | -5 |
| 2-3 | -4 |
| 4-5 | -3 |
| 6-7 | -2 |
| 8-9 | -1 |
| 10-11 | +0 |
| 12-13 | +1 |
| 14-15 | +2 |
| 16-17 | +3 |
| 18-19 | +4 |
| 20-21 | +5 |
| 22-23 | +6 |
| 24-25 | +7 |
| 26-27 | +8 |
| 28-29 | +9 |
| 30 | +10 |

**Proficiency Bonus by CR:**

| CR | PB |
|---|---|
| 0–4 | +2 |
| 5–8 | +3 |
| 9–12 | +4 |
| 13–16 | +5 |
| 17–20 | +6 |
| 21–24 | +7 |
| 25–28 | +8 |
| 29+ | +9 |

**Save bonus:**

```
Save = ability mod + PB (if proficient)
```

A non-proficient save = ability mod only.

**Skill bonus:**

```
Skill = ability mod + PB (if proficient)
Expertise = ability mod + 2× PB (for expertise-granting cases)
```

**Attack bonus:**

```
Melee attack = ability mod (Str by default, Dex for Finesse) + PB + magic
Ranged attack = Dex + PB + magic
Spell attack = spellcasting ability mod + PB
```

**Damage:**

```
Weapon damage = weapon die + ability mod (PB does NOT apply)
+ bonus dice (rider effects, e.g., sneak attack)
```

**AC computation:**

```
AC (no armor) = 10 + Dex mod + natural armor + magic
AC (light armor) = light armor base + Dex mod (up to max)
AC (medium armor) = medium armor base + Dex mod (max +2)
AC (heavy armor) = heavy armor base (Dex mod ignored)
AC with shield = AC + 2
```

**HP formula:**

```
HP = (HD count × average HD) + (HD count × Con mod)
Average HD: d6→3.5, d8→4.5, d10→5.5, d12→6.5
Hit point total in stat block = ceiling of (HD count × avg) + (HD × Con mod)
```

Verify the HP formula against the stat block's stated HD and Con
modifier. Most stat blocks round average HD; calculate both
`(HD × avg HD) + (HD × Con mod)` and `(HD × avg HD) + (HD × Con mod)`
and compare.

**Arithmetic errors to flag:**

- Modifier doesn't match score.
- Save bonus doesn't match `ability mod + PB` (if proficient).
- Skill bonus doesn't match `ability mod + PB` (if proficient).
- Attack bonus doesn't match `ability mod + PB`.
- Damage average doesn't match `(die avg) + ability mod`.
- AC doesn't match armor + Dex + bonus.
- HP doesn't match `(HD count × HD avg) + (HD × Con mod)`.

### Check 3 — CR Math Audit

Load `references/cr-math-2024.md` for the offensive and defensive
CR tables.

**Offensive CR:**

```
DPR (damage per round) = average damage over 3 rounds
   (account for multiattack, save-half AoE expected hit rate,
   recharge probability)

Offensive CR is looked up in the offensive CR table:
  - DPR maps to a CR range
  - Adjustments for attack bonus and save DC compared to expected
    values for that CR
```

**Defensive CR:**

```
Effective HP = stat block HP × multipliers for resistances /
  immunities (typically 1.5× per common resistance / 2× per immunity)

Defensive CR is looked up in the defensive CR table:
  - Effective HP maps to a CR range
  - Adjustments for AC compared to expected AC for that CR
```

**Final CR:**

```
CR = average of (Offensive CR, Defensive CR), rounded to nearest
half (0, 1/4, 1/2, 1, 2, 3, 4...)
```

**CR mismatch types:**

- **CR stated higher than math suggests:** Monster is weaker than
  stated CR. Underdesigned for stated tier.
- **CR stated lower than math suggests:** Monster is stronger than
  stated CR. Overpowered for stated tier.
- **Asymmetric CR:** Offensive CR significantly different from
  Defensive CR (e.g., a hard-hitting glass cannon at CR 5 might
  have offensive CR 7 + defensive CR 3, averaging CR 5 — flag if
  the asymmetry is unintentional).
- **PB mismatch with CR:** Monster's PB doesn't match CR table
  (e.g., CR 5 monster with PB +2 instead of PB +3 — error).

For each CR mismatch, propose the corrected CR with offensive and
defensive computed values.

### Check 4 — Action Economy Audit

Load `references/action-economy-audit.md` for budgets per CR tier.

**Action economy elements:**

- **Multiattack count:** How many attacks per Action round?
  - Tier 1 (CR 0-4): typically 1 attack per Multiattack.
  - Tier 2 (CR 5-10): typically 2 attacks.
  - Tier 3 (CR 11-16): typically 3 attacks.
  - Tier 4 (CR 17+): typically 3-4 attacks or 2 attacks with one
    higher-damage strike.

- **Recharge mechanics:** "Recharge 5-6" (33% per round) is standard.
  Other patterns: "Recharge after a Long Rest" (rare), "1/Day"
  (signature ability).

- **Reactions:** Standard creatures have 1 Reaction per round.
  Powerful creatures may have 2+ Reactions, but rarely.

- **Bonus Actions:** Most monsters have 0-1 Bonus Action per round.
  Faster creatures (CR 7+) often have a Bonus Action option (Cunning
  Action equivalent).

**Legendary actions:**

Legendary actions exist for major bosses (CR 10+). Standard budget:

- **3 legendary actions per round** (typical 3-action budget).
- Legendary actions cost 1-2 actions each (most cost 1; signature
  costs 2-3).
- At Initiative count 20 (lose ties) — Legendary Actions usable
  off-turn.
- Triggered by another creature ending its turn near the boss.

**Lair actions:**

- Lair actions exist for environment-bound bosses (Ancient Dragons,
  Liches, etc.).
- **1 lair action per round** at Initiative count 20 (lose ties).
- Lair actions affect the environment (move difficult terrain,
  summon minions, alter visibility).
- Distinct from legendary actions in timing and source.

**Regional effects:**

- Narrative-level environmental changes visible *outside* the lair.
- Not used in combat; documentation-level only.

**Mythic actions:**

- Tier 4 (CR 17+) only.
- Trigger when the boss reaches a specific HP threshold.
- Often equivalent to "second phase" of the fight.

**Action economy errors to flag:**

- Multiattack count outside expected range for CR.
- Recharge value outside standard range (most are 5-6, some 4-6;
  4-6 only for low-tier recharges).
- Legendary actions on a CR < 10 monster (unusual; flag for review).
- Lair actions present but no regional effects defined (or
  vice versa — they usually come together).
- Multiattack including same attack twice without specifying
  (should be "Twice" or with the second-strike rules clear).
- Bonus Action that's Action-strength (a major Bonus Action ability
  on a low-CR monster is overpowered).

### Check 5 — Trait Vocabulary Audit

Load `references/trait-vocabulary-2024.md` for canonical 2024
phrasing.

**Vocabulary conventions:**

- **Conditions:** Use the official 2024 condition names (Blinded,
  Charmed, Deafened, Frightened, Grappled, Incapacitated, Invisible,
  Paralyzed, Petrified, Poisoned, Prone, Restrained, Stunned,
  Unconscious — and graded Exhaustion 1-6).
- **Action types:** "Action", "Bonus Action", "Reaction" capitalized.
- **Spell-related:** "spell slot", "spell save DC", "Concentration",
  "Verbal", "Somatic", "Material" components.
- **Recharge syntax:** "(Recharge 5-6)" inside parentheses; "(Recharge
  after a Long Rest)" for long-rest recharges.
- **Save syntax:** "DC X [Ability] saving throw" or "[Ability] save
  (DC X)".
- **Damage syntax:** "X (Yd6) [damage type]" — e.g., "5 (1d6 + 2)
  slashing damage".
- **Targeting syntax:** "one target you can see within range",
  "each creature within X feet".
- **Senses:** "Darkvision X ft.", "Blindsight X ft.",
  "Tremorsense X ft.", "Truesight X ft.", "Passive Perception X".

**Vocabulary errors to flag:**

- Old 2014 syntax: "advantage on Wisdom (Perception) checks made
  to see" → 2024 prefers "advantage on Perception checks".
- Capitalization errors.
- Non-standard condition names ("fascinated" — not a real condition;
  "charmed and incapacitated" — should be both Charmed and
  Incapacitated as separate conditions).
- Damage type abbreviations or missing damage type.
- Range or area in non-standard units (use feet, not yards;
  except where setting demands).
- Save DC missing the ability ("DC 15 saving throw" — should specify
  ability: "DC 15 Wisdom saving throw").

---

## Output Format

Produce a structured defect report.

```markdown
# Stat Block Validation Report

**Subject:** [Stat Block Name]
**Stated CR:** [X]
**Validated against:** D&D 5e 2024 Monster Manual conventions

---

## Summary

**Overall Status:** [Pass / Pass with warnings / Needs revision /
Major errors]

**Defect Count:** [Format: X | Arithmetic: Y | CR: Z | Action Economy: W | Vocabulary: V]

[1-2 sentence executive summary.]

---

## Check 1 — Format Compliance

**Status:** [Pass / Issues found]

| Field | Status | Notes |
|---|---|---|
| Name | [Pass] | |
| Size + Type + Tag + Alignment | [Pass / Missing tag / etc.] | |
| Armor Class | [Pass / Format error] | [details] |
| ... | ... | ... |

[For each format error: cite the offending line, the expected
form, and the correction.]

---

## Check 2 — Arithmetic Validation

**Status:** [Pass / Issues found]

### Ability modifiers
| Score | Stated Mod | Expected Mod | Status |
|---|---|---|---|
| STR 16 | +3 | +3 | Pass |
| DEX 14 | +2 | +2 | Pass |
| ... | ... | ... | ... |

### Saves
| Save | Stated | Expected | Status |
|---|---|---|---|
| Wis | +5 | (Wis mod +3) + PB +2 = +5 | Pass |
| Dex | +4 | (Dex mod +2) + PB +2 = +4 | Pass |

### Skills
| Skill | Stated | Expected | Status |
|---|---|---|---|
| Perception | +3 | Wis +3 + PB 0 (not prof) = +3 | Pass |
| Stealth | +6 | Dex +2 + PB +2 + Expertise +2 = +6 | Pass |

### Attacks
| Attack | Stated To-Hit | Expected | Status |
|---|---|---|---|
| Scimitar | +4 | Dex +2 + PB +2 = +4 | Pass |

### Damage
| Attack | Stated Avg | Expected | Status |
|---|---|---|---|
| Scimitar (1d6+2) | 5 | 3.5+2 = 5.5 → 5 | Pass (rounded) |

### AC
| Component | Value | Notes |
|---|---|---|
| Armor base (chain shirt) | 13 | |
| Dex mod (capped at +2) | +2 | |
| Stated | 15 | Expected = 15. Pass. |

### HP
| Component | Value | Notes |
|---|---|---|
| HD (count × type) | 7d6 | |
| HD average × count | 3.5 × 7 = 24.5 | |
| Con mod × HD count | +2 × 7 = +14 | |
| Expected HP | 24.5 + 14 = 38.5 → 38 | |
| Stated HP | 38 | Pass |

---

## Check 3 — CR Math Audit

**Status:** [Pass / Mismatch detected]

### Offensive CR

| Element | Value | Notes |
|---|---|---|
| Multiattack | 2 scimitar attacks | |
| Damage per attack | 5 (1d6+2) | |
| DPR (3 rounds avg) | 10 | (2 × 5, no save-half) |
| Recharge ability | None | |
| Save DC vs CR table | N/A | |
| Attack bonus vs CR table | +4, matches CR 1 | |
| Offensive CR | CR 1 | |

### Defensive CR

| Element | Value | Notes |
|---|---|---|
| HP | 38 | |
| Resistances / Immunities multiplier | 1× | None |
| Effective HP | 38 | Matches CR 1 |
| AC | 15 | Matches CR 1 |
| Defensive CR | CR 1 | |

### Final CR

| Value | Notes |
|---|---|
| Computed CR | (1 + 1) / 2 = 1 | Pass. Stated CR 1 matches computed. |

[If mismatch: "Stated CR X but computed CR Y. Difference of Z
levels. Suggested correction: [adjust HP / damage / multiattack
/ change stated CR]."]

---

## Check 4 — Action Economy Audit

**Status:** [Pass / Anomaly detected]

| Element | Stated | Expected for CR | Status |
|---|---|---|---|
| Multiattack count | 2 | 2 for CR 1 (Tier 1 upper) | Pass |
| Recharge values | None present | N/A | Pass |
| Reactions | 1 Reaction (Disengage) | 1 standard | Pass |
| Bonus Actions | None | 0-1 standard | Pass |
| Legendary actions | None | None expected at CR 1 | Pass |
| Lair actions | None | None expected at CR 1 | Pass |

[If anomaly: cite the rule and propose adjustment.]

---

## Check 5 — Trait Vocabulary Audit

**Status:** [Pass / Vocabulary drift detected]

| Element | Found | Expected | Status |
|---|---|---|---|
| Condition names | "Charmed", "Frightened" | Match 2024 | Pass |
| Action labels | "Action", "Bonus Action" capitalized | Match 2024 | Pass |
| Recharge syntax | "(Recharge 5-6)" | Match | Pass |
| Save syntax | "DC 14 Wisdom saving throw" | Match | Pass |
| Damage syntax | "5 (1d6+2) slashing" | Match | Pass |
| Sense format | "Darkvision 60 ft., Passive Perception 13" | Match | Pass |

[If vocabulary drift: cite the offending phrasing and propose
correction.]

---

## Proposed Corrections

[Prioritized list of corrections in suggested order.]

1. **Highest priority:** [Major error — CR mismatch, missing
   required field, fundamental arithmetic error.]
2. **Medium priority:** [Format polish, minor arithmetic, minor
   vocabulary.]
3. **Low priority:** [Style suggestions.]

[Each correction includes: the issue, the proposed fix, and one
sentence on why.]

---

## Stat Block as Corrected

[If meaningful corrections are needed, present the stat block
*with corrections applied* as a final corrected version. This
makes the report immediately usable.]
```

**Language:** Match the language of the input. If the stat block
is presented in French (using French ability score abbreviations
or French monster names), output the validation report in French
with appropriate vocabulary mapping.

**Tone:** Strict, precise, mechanical. The validator is not
diplomatic — defects are defects. But corrections should be
constructive and specific.

---

## Severity Levels

When reporting, classify each finding by severity.

| Severity | Definition | Examples |
|---|---|---|
| **Major** | Breaks the stat block's usability or is mechanically wrong | CR mismatch by 2+, missing required field, broken arithmetic |
| **Medium** | Functional but incorrect or inconsistent | CR off by 1, minor arithmetic errors, action economy slightly off |
| **Minor** | Style or format polish | Capitalization, vocabulary drift, sentence-level phrasing |
| **Informational** | Note for the reader; not strictly an error | "Convention varies on this point; both forms acceptable" |

A pass-with-warnings = no Major, may have Medium/Minor.
A needs-revision = at least one Major.

---

## Interaction with Other Skills

- **Brand-new monster from monster-creator** → run validator after
  the skill produces output to catch any creation-stage errors.
- **Converted stat block from adventure-converter** → run validator
  after conversion to verify the 2024 conversion is mechanically
  correct.
- **Bestiary review** → run validator on each stat block, then run
  `ttrpg-supplement-reviewer` for editorial/flavor review.
- **Cross-bestiary cohesion** → not in scope; would need a dedicated
  `bestiary-cohesion-auditor` skill once warranted.
- **Encounter calibration** → after validation passes, encounter
  design uses `encounter-builder`.
- **Cliché audit** → not mechanical; use `ttrpg-cliche-buster` on
  the lore/flavor side.
- **Production review** → `ttrpg-supplement-reviewer` handles the
  broader publication-readiness; this validator handles only
  mechanical correctness.

---

## Edge Cases

**Stat block uses optional / variant rules** (e.g., a 2024 monster
using 2014 Multiattack syntax): flag as legacy pattern. Recommend
update if the publication target is 2024 strict.

**Stat block uses sources beyond MM 2024** (e.g., Volo's Guide,
Mordenkainen's, Tasha's): validate against 2024 conventions
generally. Note source if unusual abilities are present.

**Stat block is incomplete** (missing fields the user hasn't
provided): ask before assuming. Don't validate a partial block as
"complete" — that's misleading.

**Stat block uses homebrew abilities with no precedent**: validate
the format and arithmetic; flag the homebrew ability as "novel,
not verifiable against MM 2024 precedent" without classifying as
an error.

**Stat block is for an NPC with class levels** (e.g., "Knight"
template + Fighter class): use the NPC stat block format, but
note that some PC-class-feature-derived traits may not have MM
precedent. Validate format and arithmetic; flag PC-class-features
as additional context.

**Stat block is for a summoned creature** (Beast Spirit, Fey
Spirit etc. in 2024 PHB): these have a different scaling pattern
(level-scaled stat block in spell description, not standalone).
Validate against the spell-level scaling convention.

**Stat block is for a swarm**: swarm conventions exist (resistance
to certain damage types, damage based on remaining HP fraction).
Validate against swarm template.

**Stat block has only narrative text, no statblock**: not in
scope. Recommend running `monster-creator` to produce a stat
block first.

**French stat blocks**: validate format conventions from the
Manuel des Monstres (FR edition) where available. Use FR
vocabulary: *Classe d'armure*, *Points de vie*, *Vitesse*, *Jets
de sauvegarde*, *Sens*, *Langues*, *Facteur de puissance*. Map
to MM 2024 EN conventions for the audit logic; output in FR if
input is in FR.

**Stat block from a competitor publisher's bestiary**: validate
the same way. The validator is system-mechanical; copyright /
brand concerns are outside scope.

**Stat block in OGL / Creative Commons content**: validate the
same way. Licensing is not the validator's concern.

---

## Publication Checklist

Before considering a stat block validation complete:

- [ ] All five checks run.
- [ ] Each check's status declared (Pass / Issues / Mismatch / etc.).
- [ ] Specific defects cited with line references where applicable.
- [ ] Corrections proposed in prioritized order.
- [ ] Severity classification applied to each finding.
- [ ] Corrected stat block presented (if meaningful corrections
      needed).
- [ ] Validator output language matches input language.

---

## Reference Files

Load as needed — not all at once.

- `references/stat-block-format-2024.md` — Canonical MM 2024 stat
  block layout: every required field, field order, vocabulary
  conventions, capitalization rules, habitat / treasure tags,
  legendary / lair / regional / mythic action layout, action
  format syntax, save / attack / damage syntax. Plus FR vocabulary
  mapping for the French Manuel des Monstres.
- `references/cr-math-2024.md` — Offensive CR table (DPR × 3
  rounds → CR), defensive CR table (effective HP + AC → CR),
  expected save DC by CR, expected attack bonus by CR, expected
  AC by CR, PB by CR, multipliers for resistances / immunities,
  worked examples (a CR 5 monster's expected mechanical profile).
- `references/action-economy-audit.md` — Action economy budgets
  per CR tier: multiattack count, recharge patterns, reaction
  count, bonus action allowance, legendary action budget (when /
  how many / cost / typical actions), lair action conventions
  (timing, frequency), regional effects, mythic actions. Common
  patterns and anti-patterns (e.g., "low-CR monster with legendary
  actions" or "high-CR monster with no multiattack").
- `references/trait-vocabulary-2024.md` — Canonical 2024 vocabulary:
  condition names, action type capitalization, recharge syntax, save
  syntax, damage syntax, targeting syntax, sense format, FR
  vocabulary mapping for stat block labels, official condition
  list and definitions.
- `references/common-stat-block-errors.md` — Catalogue of recurring
  errors found in homebrew and conversion stat blocks: arithmetic
  errors (modifier mismatch, save bonus typos, attack bonus typos,
  damage average miscalculation, AC misadding shield bonus, HP
  formula errors), CR mismatches (under-CR vs over-CR cases),
  action economy errors (multiattack out of range, recharge
  outside 5-6 range, legendary actions on under-CR monsters), and
  vocabulary drift (legacy 2014 syntax, mis-capitalized action
  labels, missing damage types, ambiguous save references).
