# Ordinary Creature Critical Block imports — 2026-10-06 ## Import boundary `src/game/enemyBlockAuras.ts` keeps `supportedEnemyBlockAuraDefinition` fail-closed for Critical Block (47294–47296) and Deterrence. The separate `ordinaryCreatureSelfTargetCriticalBlockAuraDefinition` guard admits only Critical Block after the caller supplies an `EnemyNpcCriticalBlockImportProof` for one ordinary Creature self-cast. The defender, caster, and target IDs must be the same nonempty ID; the proof must explicitly identify an ordinary Creature and exclude a native defender, a summon, and a character defender. It also carries the bounded applicability token `azerothcore-e822d718-default-spellmod-path`. The guard validates the complete raw spell signature, runtime contract, block chance, and the exact aura-107 sibling list against the reviewed profile/rank row before returning an aura-253 runtime definition. Aura 107 stays present in the source signature and unsupported-effect metadata. Its no-op behavior is specific to the reviewed default core path; a custom aura script/module or a private server override invalidates that applicability proof. The WoW, Ascension, and Epoch labels identify client DBC rows. They do not certify private server overrides for those clients. Player and party casts must never use this full-import guard. ## Reviewed Spell.dbc signatures Each listed effect is type 6, mechanic 0, target A/B 1/0, radius 0, period 0; spell range index is 1, school mask is 1, damage class is 0, duration is permanent (`-1` in the raw signature), and stack amount is 0. The parsed `basePoints` below are the client amount (`Spell.dbc` base-points field plus one). The Spell.dbc hashes and source paths are pinned in `NPC_BLOCK_AURA_PARITY_2026-10-06.md`. | Profile | Spell | Aura effects (`auraType:basePoints:miscValue`) | | --- | ---: | --- | | WoW 3.3.5a | 47294 | `253:20:0`, `107:5:7` | | WoW 3.3.5a | 47295 | `253:40:0`, `107:10:7` | | WoW 3.3.5a | 47296 | `253:60:0`, `107:15:7` | | Ascension | 47294 | `253:100:0`, `107:4:7`, `107:8:3` | | Ascension | 47295 | `253:100:0`, `107:7:7`, `107:16:3` | | Ascension | 47296 | `253:100:0`, `107:10:7`, `107:25:3` | | Epoch | 47294 | `253:20:0`, `107:5:7` | | Epoch | 47295 | `253:40:0`, `107:10:7` | | Epoch | 47296 | `253:60:0`, `107:15:7` | Aura 253 supplies the modeled critical-block chance. Aura 107 is `SPELL_AURA_ADD_FLAT_MODIFIER`; misc 7 is the spell critical-chance modifier, and Ascension also has misc 3 (`SPELLMOD_EFFECT1`). In the pinned AzerothCore checkout at commit `e822d718322289dd036fb2daf8867ba41283bf9a`, `SpellAuraEffects.cpp:780` sends aura spell modifiers through `ApplySpellMod`. `ApplySpellMod` returns at lines 813–816 when the target is not a player, so these aura-107 spell modifiers do not apply to an ordinary Creature on that default path. This evidence does not cover custom aura scripts, custom modules, or external server changes. ## Source assignment availability The pinned AzerothCore base `creature_template_spell.sql` dump and checked `db_world` SQL updates contain no `Spell` assignment for 47294, 47295, or 47296. This pass adds an importer guard and its evidence only; it does not assign Critical Block to a creature. A real source creature assignment is still required before any NPC receives the buff. Do not infer or fabricate one from the player talent spell rows. Deterrence remains outside the full importer because its source signatures also contain effects (including aura 185 or aura 27) that are not represented by ordinary NPC block inputs. ## Focused coverage `src/game/enemyBlockAuras.test.ts` covers all three ranks in all three client profiles, missing and malformed proof, mismatched self-target IDs, native, summoned, and character-defender exclusions, the pinned applicability token, generic importer fail-closed behavior, Deterrence exclusion, and raw signature drift. The focused command is: ```text npx vitest run src/game/enemyBlockAuras.test.ts ``` `combatStore.ts` uses this guard only for an ordinary source Creature's self-target descriptor with a known template entry. The compiler pins all three rank signatures in Ascension/Epoch, including aura-107 siblings, and validates them even when no source NPC assignment uses them. Its duration-index 0 parser sentinel is 0; the guarded runtime definition normalizes the source permanent aura to an `expiresAt=null` lifetime. `enemyCriticalBlockImport.integration.test.ts` passes two actual runtime tests: a clearly labeled synthetic self-cast applies the permanent aura without damage, produces a deterministic critical block, and clears on reset; native, summoned, character and non-self fixtures are excluded. This synthetic fixture does not establish a real creature assignment. Regenerated campaign data is byte-for-byte unchanged from this pass's starting snapshot.