🤖 AI text below 🤖
Summary
The tracked-set publish authority affected_objects_from_events (crates/engine/src/game/effects/mod.rs) is head-by-head: an effect head that affects objects without emitting a per-object event needs an explicit arm, or it falls through to the _ => ZoneChanged harvest and publishes an empty set. Every downstream anaphor ("Those creatures…", "Untap them") then binds nothing and is silently a no-op.
PR for #6857 fixes three such heads (PumpAll, GoadAll, GiveControl) — the heads whose every row could be dispositioned by runtime measurement. This issue records the remaining heads with the identical defect, so the class is on file rather than rediscovered.
No follow-up work is scheduled. This is the record.
Live instance: God-Eternal Rhonas
Oracle text (verbatim from card-data.json, not recalled):
When God-Eternal Rhonas enters, double the power of each other creature you control until end of turn. Those creatures gain vigilance until end of turn.
That is the population-head + plural-anaphor shape exactly. Measured:
- The head is
DoublePTAll, dispatched to pump::resolve_double_pt_all.
resolve_double_pt_all pushes only GameEvent::EffectResolved — no per-object event.
affected_objects_from_events has no Effect::DoublePTAll arm, so the head falls to _ =>, which harvests only ZoneChanged.
Result: the published set is empty and "Those creatures gain vigilance until end of turn" does nothing. The power-doubling works; the vigilance grant is lost.
DoublePTAll is the closest sibling to the heads already fixed — the arm would be a few lines of a shape that now exists in the same file.
Same-shape heads (census)
Measured over the corpus for heads that affect objects without a per-object event and can reach a tracked-set consumer:
| head |
rows |
PhaseOut |
5 (teferi timeless voyager, oubliette, out of time, the pandorica, the doctor's childhood barn) |
Attach |
15 |
BecomeCopy |
4 |
ApplyPerpetual |
5 |
Goad (single-target) |
2 (sontaran general, ood sphere) |
Bolster |
1 (optimus prime) |
DoublePT |
1 (neyith) |
DoublePTAll |
God-Eternal Rhonas (above) |
These were already broken before the #6857 work and are unchanged by it — no regression is introduced. They are listed so that the next person to touch this authority knows the shape is a class, not a one-off.
Why they were not fixed in the #6857 PR
Scope there was deliberately contracted to the measured core: heads every one of whose rows could be dispositioned by runtime measurement against the production predicate. Extending to these heads would have meant shipping rows on inference, which that PR explicitly avoided. The trade-off was disclosed in its Scope Expansion section rather than left implicit.
Suggested approach if picked up
Add a typed arm per head returning the head's own frozen population — the same pattern the #6857 PR uses, where the arm calls the producer's own enumeration function rather than a second hand-written scan. Each head needs its rows dispositioned by measurement (fix / preserved) before its arm ships, since some rows are declined by the sole-producer guard for legitimate reasons.
🤖 AI text below 🤖
Summary
The tracked-set publish authority
affected_objects_from_events(crates/engine/src/game/effects/mod.rs) is head-by-head: an effect head that affects objects without emitting a per-object event needs an explicit arm, or it falls through to the_ =>ZoneChangedharvest and publishes an empty set. Every downstream anaphor ("Those creatures…", "Untap them") then binds nothing and is silently a no-op.PR for #6857 fixes three such heads (
PumpAll,GoadAll,GiveControl) — the heads whose every row could be dispositioned by runtime measurement. This issue records the remaining heads with the identical defect, so the class is on file rather than rediscovered.No follow-up work is scheduled. This is the record.
Live instance: God-Eternal Rhonas
Oracle text (verbatim from
card-data.json, not recalled):That is the population-head + plural-anaphor shape exactly. Measured:
DoublePTAll, dispatched topump::resolve_double_pt_all.resolve_double_pt_allpushes onlyGameEvent::EffectResolved— no per-object event.affected_objects_from_eventshas noEffect::DoublePTAllarm, so the head falls to_ =>, which harvests onlyZoneChanged.Result: the published set is empty and "Those creatures gain vigilance until end of turn" does nothing. The power-doubling works; the vigilance grant is lost.
DoublePTAllis the closest sibling to the heads already fixed — the arm would be a few lines of a shape that now exists in the same file.Same-shape heads (census)
Measured over the corpus for heads that affect objects without a per-object event and can reach a tracked-set consumer:
PhaseOutAttachBecomeCopyApplyPerpetualGoad(single-target)BolsterDoublePTDoublePTAllThese were already broken before the #6857 work and are unchanged by it — no regression is introduced. They are listed so that the next person to touch this authority knows the shape is a class, not a one-off.
Why they were not fixed in the #6857 PR
Scope there was deliberately contracted to the measured core: heads every one of whose rows could be dispositioned by runtime measurement against the production predicate. Extending to these heads would have meant shipping rows on inference, which that PR explicitly avoided. The trade-off was disclosed in its Scope Expansion section rather than left implicit.
Suggested approach if picked up
Add a typed arm per head returning the head's own frozen population — the same pattern the #6857 PR uses, where the arm calls the producer's own enumeration function rather than a second hand-written scan. Each head needs its rows dispositioned by measurement (fix / preserved) before its arm ships, since some rows are declined by the sole-producer guard for legitimate reasons.