First Part II module. The cumulative reference adds a second engine (src/engine/puzzle: grid, lexer, parser) beside Part I's; nouns and properties are data in src/content/words.json, and the engine names only IS/AND/NOT/TEXT and the base rule TEXT IS PUSH. Rules are recompiled from the board on every change; rules() is a sorted set. Adds the M6 scenarios and tests (rows, columns, shared IS, AND distribution, stacked text, base rule), the HOT word as a data-only Expansion Drop, the lesson with the Part II bridge, and the Rust LevelDef shape in harness.md. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Module 6 Expansion Drop: HOT
The lesson's Expansion Drop beat explains the task. This file holds the scenario, the test locations and the check.
- Word: HOT, a property. "HOT is a property that causes the object to destroy any same-float MELT objects it contacts." (Baba Is You Wiki, HOT page, recorded in
docs/research/baba-is-you.md§5.) This module only parses it; what HOT does arrives with the turn in Module 9. - Tests:
tests/rust/test_06x.rsandtests/ts/test_06x.test.ts. Copy the one for your track into your workspace'stests/. - Reference answer:
solution/words.json, one file for both tracks: the Module 6 reference'ssrc/content/words.jsonwith one entry added,{ "name": "HOT", "role": "property" }. Copy it over your workspace'ssrc/content/words.json. Nothing undersrc/engine/changes, and neither does the harness. - Check: commit your workspace before you start, then run
node tools/expansion-check.mjs <your-workspace> <that-commit>from the course repository. It fails if any file undersrc/engine/changed.
Scenario
test_06x_hot_word
- Setup:
newBabawith an empty level 5 wide and 1 high. PlaceLAVA (0,0) IS (1,0) HOT (2,0) AND (3,0) PUSH (4,0). - Assertions:
rules()is exactly["LAVA IS HOT", "LAVA IS PUSH", "TEXT IS PUSH"]. Before the drop the parser doesn't knowHOT, so the sentence stops afterISand spells nothing;LAVA IS PUSHappears only onceHOT ANDis a valid run of complements.