Read docs/work-queue.md and do the next unchecked batch. For each batch:
mtg-engine/src/abilities.rs, mtg-engine/src/game.rs) to understand current Effect/StaticEffect variantsgame.rs mod tests)cargo check -p mtg-cards && cargo test --libdocs/{fdn,tla,tdm,ecl}-remediation.md, update ROADMAP.mddocs/work-queue.md with today's dateIf a batch turns out to be wrong or more complex than described, update the queue with what you learned and move on to the next one.
I'll start by reading the work queue to find the next unchecked batch.
The next batch is Batch 5: Ward keyword. Let me read the engine files and investigate the cards.
Let me search for the Ward cards and read the relevant parts of game.rs.
Let me understand how static effects are processed and find where Ward should be implemented.
Let me look at the specific card implementations and how keywords are set.
Let me find the FDN card at line ~5602 and the TDM card at ~4070 (the "Ward -- Discard a card" one).
Let me check the keywords field for Ambling Stormshell since it wasn't visible in the snippet.
Now I have all the context. Let me check how the default keywords work and then look at the game.rs test section for the test pattern.
Good, default keywords are empty(). Now let me read the test section in game.rs to follow the pattern.
Let me find the end of the tests module in game.rs.
Now I have all the context. Let me implement Batch 5: Ward keyword.
Plan:
StaticEffect::Ward { cost: String } variant + builderLet me start with the engine changes.
Now add the builder method in the impl StaticEffect block.
Now add a test for the Ward builder.
Good. Now fix all the cards. Let me do them in parallel using sed commands.
Now add KeywordAbilities::WARD to the keyword flags for each card. Let me do them one by one.
Now fix Tolarian Terror — it has keywords: KeywordAbilities::WARD but no Ward static ability. I need to add a Ward ability to its abilities vec.
Now let me verify all changes are correct by checking the relevant lines.
All 7 instances replaced. Let me verify the keyword flags too.
I'm missing some keyword additions. Let me check those specific lines.
The line numbers shifted. Let me fix the remaining cards.
Let me verify all WARD keywords are now set.
All 7 cards have WARD keyword flags. Now let me build and test.
Clean compilation. Now run the tests.
All 249 tests pass (including the new Ward builder test in static_effect_builders). Now let me update the documentation.
Let me find the relevant sections in each remediation doc where these cards would be listed, and also the ROADMAP.
Let me update the card entries in each remediation doc. First, let me find the exact lines.
Now let me update each remediation doc.
Now update ROADMAP.md — add Ward as a note in the "Recently implemented" section.
Now check off Batch 5 in the work queue.
Let me do one final verification that everything still compiles and tests pass.
All 249 tests pass. Let me also quickly check if there are any other Ward Custom variants I might have missed elsewhere.
Those are false positives ("Cowards" and "Forward"). No remaining Ward Custom variants.
Batch 5 complete. Here's a summary:
Engine changes:
StaticEffect::Ward { cost: String } variant to the enumStaticEffect::ward(cost) builder methodstatic_effect_builders test with Ward variant checksCards fixed (7 across 3 sets):
What was done for each card:
StaticEffect::Custom("Ward {2}") / Custom("Ward -- Discard a card.") with typed StaticEffect::ward("{2}") / ward("Discard a card.")KeywordAbilities::WARD to the keyword flags (5 cards were missing it)Note: Ward is now stored as structured data. The mechanical enforcement (counter-unless-pay during targeting) would require full targeting/stack interaction and is deferred. All 249 tests pass.