LookTopAndReorder asks top or bottom without revealing the deck. SearchDeckToCall and SearchDeckToRide wrap the search primitive; Alfred searches a Royal Paladin grade 2 or lower and calls it, Cocoa looks at the top card. Five tests.
SearchDeck hides the deck and returns matches only: none -> SearchFailedEvent and shuffle, one -> straight to the effect, several -> PendingChoice. Different arts are separate results, labelled with the printing id. Wired into Conroe, which pays Counter Blast 1 and retires itself. Four tests.
PendingChoice/ChooseCommand let effects ask the player to pick a unit. Added Counter Blast and Soul Blast cost helpers. Blaster Blade implemented for both zones with its CB2 cost and rear-guard target. Activated abilities pay rest-self and discard; Lake Maiden Lien, Gojo and Shout draw a card. Seven tests.
CardScript model with Triggered and Continuous abilities. Check Timing collects triggered abilities, orders them (turn player first, player picks the order via SelectTriggerCommand), and pauses on optional abilities (ResolveAbilityCommand). Continuous effects are recomputed on demand in EffectivePower. Scripts: Barcgal (optional call from soul), Wingal (+4000 when boosting Blaster Blade), Alfred (+2000 per Royal Paladin rear-guard). Six tests.
Grade 0-2 vanguard performs one check, grade 3+ performs two, rear-guards perform none by default. CardInstance.DriveChecksOverride lets effects remove Twin Drive or grant checks to a rear-guard. Added DriveCheckedEvent for the log. Five tests.
MoveCommand(from, to) in the Main phase. Only 0-3 (left) and 2-4 (right) are valid pairs; the center back row has no partner. Rested state stays with the card. Five tests.
Removed the rear-guard-only restriction. Interceptor resolution now runs before the vanguard damage branch, so a successful intercept retires the interceptor and the vanguard takes no damage. The attacked rear-guard still cannot intercept itself. Two tests.
InterceptCommand during the guard step. The interceptor leaves its circle, becomes the power reference for the attack and goes to the drop zone at the end of the battle; the original target survives. Grade 1 cannot intercept, back row only with InterceptFromBackRow granted by an effect. Five tests.
GuardCommand takes an optional discard. Sentinel cards have zero shield; paying with a card of the same clan sets Nullified on the battle so power no longer matters. Three tests: paid, unpaid, wrong clan.
Cards of grade 0 and 1 have boost by default (HasBoost); CardInstance.BoostOverride lets an effect grant or remove it at runtime. AttackCommand takes an optional BoosterSlot: the back-row unit in the same column adds its power for that battle only and becomes rested. Four new tests.
Order is now: reveal -> trigger zone -> resolve effects -> hand (drive check) or damage (damage check). Damage is added only after the trigger resolves, so heal compares the pre-damage count. Temporary power/crit are cleared at end of turn instead of end of battle.
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.