-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or requestprotocolArena protocol/proto issueArena protocol/proto issue
Description
Confidence: HIGH — full wire sequence from proxy recording (2026-03-21_23-56-57, Sheltered by Ghosts ward 2 vs Bushwhack).
Finding
Ward triggers use PayCostsReq (promptId=11) routed to the spell controller (not ward owner). Multiple ward triggers from one creature fire independently — paying one doesn't satisfy others.
Wire sequence
- Targeting submitted → two
AbilityInstanceCreated(one per ward trigger) spawn simultaneously - Both go to Pending zone, then Stack (LIFO: [trigger2, trigger1, spell])
- First trigger resolves:
PayCostsReq→ opponent auto-taps →ResolutionComplete - Second trigger resolves: no
PayCostsReq(opponent already tapped out) → auto-counters spell - Spell → GY with
ZoneTransfer(category="Countered"),affectorId=wardTriggerIid
Code gaps
PayCostsReqfor ward must route to spell controller, not ward owner — checkBundleBuilder.payCostsBundle()seatIdaffectorIdon ward-countered ZoneTransfer must be the ward trigger instanceId- Multiple ward triggers from one creature not tested
Additional observation (2026-03-22_13-39-53)
Ward trigger observed on Nervous Gardener (ability 141939 "Ward {o2}") when targeted by Pacifism. TriggeringObject pAnn fires with affectorId=ward ability iid, affectedIds=[targeting spell, targeted creature]. PayCostsReq sent to opponent (promptId=11). Ward cost was paid and Pacifism resolved. Consistent with prior findings.
Wire spec
docs/plans/2026-03-21-ward-counter-wire-spec.md
refs #37
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestprotocolArena protocol/proto issueArena protocol/proto issue