Summoned records its summoner (the minion whose trigger is resolving) inside
the engine; the harness log is unchanged. When a Sequence ends, SpellGrid
writes spawned text, places each summoned minion with a noun on its
summoner's tile, removes the dead, reparses and syncs rule auras.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Rename course/11-break-your-engine to 13-break-your-engine and update every
link and mention; start-module explains that Module 13 has no tests to start.
- tools/diff-tracks.mjs (npm run diff:tracks): stages both references of a
module, generates a seeded random SpellGrid level and script per seed, pipes
it to the Rust and TypeScript CLIs and diffs their output; crashes on one or
both sides fail. stagePlay takes a module number.
- register_assembled: the TypeScript track compared only the text of an
existing Assembled card, so a base re-registered with a new cost (or a
different split) silently rewrote the earlier card. It now compares every
field the engine reads, as Rust does (Modules 5-10).
New test_05_assemble_never_rewrites_an_earlier_card.
- SpellGrid CLIs: coordinates and chooser numbers are 1-9 plain digits in both
tracks (Rust accepted signs, TypeScript accepted "+2", "0x2", "1e0"); Rust
quotes card names verbatim instead of with Debug escapes; Rust joins the
minion list with "; " instead of rewriting ", ". Two new CLI tests per track.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SpellGrid cards move to course/10-spellgrid/cards; start-module and
verify-references stage course/cards plus module-local cards up to the module,
so M5-M9 workspaces get exactly the pre-M10 card set.
- cast() rejects a chosen-target spell without a target (checkCast/checkPlay);
new test_10_targeted_spell_needs_target.
- Rust CLI pre-validates instead of swapping the global panic hook.
- Catalog: CRIER noun; DEATHRATTLE/BATTLECRY note on lexicon vs catalog role.
- Lesson: design note on mid-movement reparse.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SpellGrid capstone: Part I's card engine and Part II's grid engine joined at
three seams (rules -> aura data, hazard victims -> one destroy Sequence,
Sequence end -> write text, remove the dead, reparse). Three levels with
scripted solutions, a naive-timing test via a harness-only hook that
reverses the END_OF_PHASE list, CLIs in both tracks, the BATTLECRY IS DOUBLE
Expansion Drop, SpellGrid cards and words in course/cards and the catalog,
level schema cards/hand, and tools staging/copying of module levels.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>