Parent: #706. One of the exclusion families blocking the 104 M19 cards the catalog does not yet define.
Exclusion (crates/sage-engine/data/exclusions.json): Attack and block requirements, and blocking an additional creature — a declaration can be restricted but never required, and a blocker blocks one attacker.
M19 cards blocked (2)
| # |
Card |
Shape |
| 181 |
Ghastbark Twins |
may block one additional creature each combat — otherwise a vanilla trample body |
| 175 |
Declare Dominance |
every creature able to block the pumped creature must do so |
Scope
Two independent changes, and the first is much cheaper than the second:
- A blocker blocking more than one attacker. Today the declaration maps one blocker to one attacker. Lifting it touches the block legality check, the combat damage assignment (a blocker assigns its damage among the attackers it blocks), and the view. Ghastbark Twins is a permission, not a requirement, so it needs no maximisation logic at all.
- Requirements. CR 509.1c is the hard one: the declaration must satisfy the maximum possible number of requirements without violating any restriction, which makes validating a submitted block a search rather than a per-pair check. Restrictions still win over requirements, and a requirement that cannot be met is simply not met.
Do them in that order, in separate PRs. Requirements also need a clear answer for what the client is told — the blocker slot's prompt already carries whole-declaration facts like menace, and a requirement is another one.
Acceptance criteria
Parent: #706. One of the exclusion families blocking the 104 M19 cards the catalog does not yet define.
Exclusion (
crates/sage-engine/data/exclusions.json): Attack and block requirements, and blocking an additional creature — a declaration can be restricted but never required, and a blocker blocks one attacker.M19 cards blocked (2)
Scope
Two independent changes, and the first is much cheaper than the second:
Do them in that order, in separate PRs. Requirements also need a clear answer for what the client is told — the blocker slot's
promptalready carries whole-declaration facts like menace, and a requirement is another one.Acceptance criteria
data/sets/M19.json, and tested on the realapply_action.make compatregenerated and committed.docs/card-schema.mdanddocs/protocol.md(prompt text) updated;make verifygreen.