Damage check now places the card, then pauses on a trigger with PendingTrigger(DamageCheck) and the remaining damage count. Resolving applies the same +5000 and secondary effect as drive check, then continues the remaining damage or closes the battle. 34 tests.
Drive check now pauses on a trigger and waits for ResolveTriggerCommand(powerTarget, effectTarget). Power and crit modifiers moved from the battle to the unit and are cleared at the end of the battle. Stand stands the chosen rear-guard; Critical applies +1 crit to the chosen unit. Damage-check triggers still apply only the secondary effect.
Pure rules library with no Orleans or database. Command in, events out. Deterministic RNG stored in GameState. Covers setup with starting vanguard and mulligan, six phases, ride, call, attack, guard, drive check, damage check with triggers, retirement and win at six damage. 8 engine tests, 30 total. Sentinel, boost and card abilities are the next step.
Applied the style from the customer's edits: unit -> 'karta', place on -> 'pomeshchaetsya v', ride -> 'smena', boost -> 'podderzhivat', attack hits -> 'prokhodit', drive check -> 'proverka', Restraint -> 'Sderzhivanie', {heal} reminder simplified, long clauses split, pronouns instead of repeated 'eta karta'. Added a forbidden-terms check to translations check. Removed the one-off seed script: ru.yaml is now the source of truth.
Dropped nameRu from the translation workflow and from content validation warnings. Progress now counts cards whose text is filled; vanilla cards without text count as done.
Solution on .NET 10 LTS with rules, content and CLI projects. Content importer pulls stats from the official card list, merges trigger/rarity data, emits three YAML sets (94 cards, 124 printings). Validator checks the grade-0 shield invariant, sentinel shield, parallel printing links, and deck construction limits. 14 tests cover catalog integrity and deck validation.