0004: Causality
Status: Accepted
Context
The prototype records cause only occasionally, as an extra free-text line that repeats a move:
2:02 Urza's Tower #11: battlefield -> exile, untapped
2:02 Sowing Mycospawn #2 exiled Urza's Tower #11Most state changes have no cause. In the Sowing Mycospawn sequence, nothing links the fetched Stomping Ground to trigger #14, or the 2 life lost to Stomping Ground's replacement effect.
Decision
- Every event line can end with a cause reference introduced by
by. A cause is one of:- an object: the instance ID of the spell, ability, or permanent whose effect (including static and replacement effects) caused the event, for example
by #14; - a rule: a game rule from a fixed list defined in the spec (for example draw step, state-based actions, combat damage, cleanup), for example
by rule:sba; - a player: an action the player takes directly (playing a land, conceding, mulliganing), for example
by PlayerA.
- an object: the instance ID of the spell, ability, or permanent whose effect (including static and replacement effects) caused the event, for example
- Unknown causes are explicit. If the source does not know the cause, the writer writes
by ?. A missingbyandby ?are not the same thing; the spec defines which events require a cause. - Lines stay flat. Each event line is self-contained. Effects are not nested under the event that caused them; viewers may group them for display.
- Cause lines are not duplicated. The prototype's lines such as "Sowing Mycospawn #2 exiled Urza's Tower #11" are replaced by the cause on the move itself.
- Numeric changes show before and after values with their cause, for example life
19 -> 17 by #16.
Exact syntax is defined in the spec. The examples above are illustrative.
Rules basis
Checked against the Comprehensive Rules effective 2026-09-25.
- 609.1: "An effect is something that happens in the game as a result of a spell or ability." Spells and abilities are the main causes, so causes reference their instance IDs.
- 614.1, 614.1c: replacement effects, including "As [this permanent] enters . . ." effects, change events as they happen. They come from permanents, not from anything on the stack, so a permanent can be a cause (Stomping Ground's life payment).
- 504.1, 510.2, 514.1, 514.2: drawing in the draw step, combat damage, and cleanup actions are turn-based actions that don't use the stack. 704.3: state-based actions are performed by the game itself. These need rule causes, because no object caused them.
- 103.5: the mulligan is a player's own choice. Some events are caused by a player directly.
Alternatives rejected
- Nesting effects under their cause. Rejected: breaks down when effects interleave or span several steps, and makes lines depend on their parent for meaning.
- Separate cause lines (the prototype). Rejected: duplicates information and leaves most events unattributed.
- Omitting unknown causes. Rejected: a parser cannot tell "unknown" from "writer forgot".
Consequences
- The spec must define the cause grammar, the list of rule causes, and which event types require a cause.
- Writers need cause information from their source, or must write
by ?.