Clear threat holder and reset runtime to idle when combat-target HP
is defeated — on cast accept and as an AdvanceOne guard so telegraph
cycles cannot continue after the killing blow.
Do not move the lazy-tick marker backward when nowUtc regresses; reject
non-positive catalog durations and break the phase loop when cursor stalls.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fixture reset cleared NPC rows but left a stale lazy-tick marker, causing
catch-up bursts after re-acquire. Reset to MinValue with prototype rows.
Co-authored-by: Cursor <cursoragent@cursor.com>
When simulation is capped, advance LastAdvancedUtc to windowEnd instead
of nowUtc so subsequent polls do not burst through missed NPC cycles.
Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce IThreatStateStore with first-hit acquire on damaging casts
and deterministic leash clears on player move and pre-acquire checks.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add legacy alpha targeting integration test, elite HP assertion, AAA fix,
Bruno docs refresh, and module/alignment doc updates. Strike through
resolved items in the NEO-91 review.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace alpha/beta dummies with PrototypeNpcRegistry (melee/ranged/elite),
per-archetype max HP from INpcBehaviorDefinitionRegistry, and updated
server tests + Bruno smokes. Documents breaking client change for NEO-97.
Co-authored-by: Cursor <cursoragent@cursor.com>