Skip to content

task 8 report

Xopher edited this page Oct 22, 2026 · 1 revision

Task 8 report: the other seven LTTP temples (boards #1458-#1464)

Status: DONE_WITH_CONCERNS. All seven temples are dressed, one commit each, in the brief's order. Every one builds, solveTemple(...).solvable holds with reasons: [], the audit has no missing names, the Boss Key is needed to reach the boss, and every guard is green. Getting there needed two changes to the dress tool (separate commits, each with a ClassicDress fixture first) and four spec rules adjusted to data the Storm-era specs had never seen. Each is listed under "Deviations and concerns".

Commits on feat/classic-temples-2 (only my paths, git add <files>), oldest first:

SHA Subject
59dc1930 feat(temples): the Earth Temple follows Skull Woods
eb575b85 feat(temples): the Light Temple follows the Desert Palace
a7204f8d feat(tools): a classic plan can name its mini-boss rooms, so the mini-boss guards the Boss Key
3a44b131 feat(temples): the Water Temple follows the Swamp Palace
0ec9f580 fix(tools): the dress report names a merged screen and a dropped warp where they stand now
ec19a2c9 feat(temples): the Shadow Temple follows the Palace of Darkness
8079f740 feat(temples): the Ice Temple follows the Ice Palace
e32099d0 feat(temples): the Fire Temple follows Turtle Rock
64f7b7ad feat(temples): the Moon Temple follows Ganon's Tower

The R4 problem, and the tool change it needed (a7204f8d)

Under the stand-in plan, Ice, Fire, Moon, Shadow and Water each kept one R4 note: the Boss Key could be reached without passing the mini-boss. The brief expected each temple's plan to fix this by choosing its mini-bosses. A plan could only set how many there were, and the count alone can't fix it. I checked which fights cut the Boss Key off, with every door open:

  • Shadow: one sealed room does it alone (PoD Middle Cage). The design's rule picks the Arena, which stands before the Big Chest.
  • Ice: two sealed rooms each do it alone (Floor Switch, Jelly Key). The rule picks the Pengator Switch, which opens on the Big Key's cell, but that cell has stairs coming up from B2.
  • Moon: three sealed rooms are needed together (Pot Rail, Bob's Torch, Speed Torch). The real guard is GT Ice Armos, the shutter room in front of the Big Key Room. It is LTTP's Armos Knights refight, but the converter reads 0 enemies there.
  • Water: no set of sealed rooms does it. Only side fights do (Trench 2 Blocks stands right in front of the Big Key alcove).
  • Fire: no set of up to three fights, sealed or side, does it. The Big Key lies at a crossroads of the Lava Dual Pipes, a four-screen room with no enemies.

The change adds ClassicPlan.minibossRooms?: string[]: the LTTP rooms that are mini-bosses first, with the design's rule filling any left in minibosses. A named room is must-clear and seals whatever its screens say, side fights included. A named room with no enemies fights in its Big Key screen if it has one (the chest then waits behind the fight, through the existing "what a sealed fight held" rule), else in its first screen. dressBoard.planFights makes the named rooms fights from the start, so every seal-aware step treats them as seals. dressChores.planChores takes them as mini-bosses first. Unknown names and more names than minibosses throw.

TDD: a new BYWAY fixture (classicFixtures.ts). The Statue, a shutter fight, opens on the Big Chest. The Boss Key lies down a byway of a hall, the Trench (side fight), the Armory (a shutter room with no enemies) and the Alcove (Big Key). Five tests in ClassicDress.spec.ts:

  • unnamed: the R4 note stays;
  • naming the Trench: a sealed side fight becomes the mini-boss and the Statue a must-clear monster, reasons [];
  • naming the Armory: fights in its first screen, reasons [];
  • naming the Alcove: fights in the Big Key screen and the chest waits in a nook behind it, reasons [];
  • the two throws.

RED: compile error first (minibossRooms not in ClassicPlan), then, with the field added and no behaviour, 4 failed out of 43 (the unnamed baseline passing). GREEN: 43 passed. Storm, Earth and Light came out byte-identical, ClassicTemples 66 and Guards 91 green.

The ClassicTemples rule "seals every must-clear room on entry, and no side room" also accepts the rooms the plan names, and checks that each named room is a mini-boss.

The report-coordinate fix (0ec9f580)

Shadow's B1 is shifted (a row grown before the first, a leading column cut). ClassicTemples' "reports ... each to or from a real cell" failed there, under the stand-in too: it was a bug from before this task that the spec never ran on. board.merged entries and a warp dropped by demoteShortcutWarps were named at the converter's coordinates. Every other entry (moves, dropped riddles) names the dressed room. Both now name the cell where it stands on the board: the merged screen's slot, and the dropped warp's converted cell. TDD: SHIFTED gained wideGuard, a guard with a second screen under it. The test "names a merged screen where it stands now" failed at 1 of 44, then passed at 44 after the fix. No module changed (Storm's dropped list is still puzzle B1 (0,0), puzzle B1 (1,1), teleport 3F (0,0)).

Per temple

Common to every temple: today's theme, element, trap, riddle, relic and shop item, taken from today's PLANS entry. The mustClear list starts with today's starters, then today's other beasts, then other beasts of the theme up to the must-clear count. Must-clear monsters are 1-2, mini-bosses 3-5, the boss as today. Each temple left regenerate.ts PLANS and its regenerated-only rows in ShippedTemplesAudit, and its guard pin moved to its own plan (clean).

Earth: Skull Woods (#1458, 59dc1930)

  • Plan: must-clear kibble-kobold 1, droop-dryad 1, zoomie-zephyr 2, plop-golem 2, weed-wyrm 2 (all five are starter fills; Feed the Loyal Familiar reaches the Kibble Kobold by the library's suggestion). Mini-boss leaf-lion 5 (Skull Big Key, by the design's rule). Boss meadow-minotaur 8. Relic Gaia's Hammer, shop EarthquakeScroll.
  • Report: 2 floors, 46 rooms, size 39. 5 must-clear, repeats [], overflow [], left []. 18 moves, 15 added rooms. Dropped: puzzle 1F (2,7), puzzle 1F (4,2), teleport 1F (4,6). One Bomb chest at 1F (1,4). The shop is added at 1F (0,4).
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.
  • Spec change: Skull Woods has no stairway (the basement is reached by a fall), so ClassicTemples' "every flight" test now expects one flight per JSON stairway instead of at least two.

Light: the Desert Palace (#1459, eb575b85)

  • Plan: must-clear backpack-boggart 1 (the starter), paperwork-pixie 1, bookwyrm 2, sum-sphinx 2, desk-drake 2. Mini-boss homework-hydra 5 (Desert Compass Room, by the rule). Boss pop-quiz-poltergeist 8. Relic Dawnbreaker Bow, shop LuminousOrb.
  • Report: 2 floors, 38 rooms, size 29. 5 must-clear, repeats [], overflow [], left []. 6 moves, 5 added rooms. Dropped: four riddles. No Bomb chest.
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.

Water: the Swamp Palace (#1460, 3a44b131)

  • Plan: must-clear soggy-slug 1, bare-roll-imp 1, toothpaste-serpent 2, puddle-phantom 2, smudge-specter 2 (no water beast has a starter quest). Mini-boss drain-drake 5 in Swamp Trench 2 Blocks (named; a side fight, now sealed). Boss potty-poltergeist 8. Relic Trident of Tides, shop WaterBreathingPotion.
  • Report: 3 floors, 54 rooms, size 41. 3 must-clear (Shooters, Left Elbow, Push Statue), repeats [], overflow [], left [puddle-phantom, smudge-specter]. 17 moves, 9 added rooms. Dropped: four riddles.
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.

Shadow: the Palace of Darkness (#1461, ec19a2c9)

  • Plan: must-clear plate-pixie 1, gravy-ghoul 1, crumb-gremlin 1, dish-goblin 2 (the four starters), mug-thug 1, cupboard-kobold 2, garbage-gargoyle 2. Mini-boss stickyfoot-slime 5 in PoD Middle Cage (named). Boss grease-gorgon 8. Relic Void Dagger, shop ShadowVeil.
  • Report: 2 floors, 57 rooms, size 33. 5 must-clear (the Arena is now one), repeats [], overflow [], left [cupboard-kobold, garbage-gargoyle]. 19 moves, 17 added rooms. Dropped: six riddles and the warp at B1 (1,2). Shifted: B1 rows -1, cols +1; 1F rows -1. One compaction.
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.
  • Spec change: the many-screen rule (see Deviations 3).

Ice: the Ice Palace (#1462, 8079f740)

  • Plan: must-clear socktopus 2 (starter), hamper-hound 1, wrinkle-wyvern 2, then wardrobe-wraith 1, lint-lizard 1, pantry-phantom 1, bedsheet-banshee 2, freezer-yeti 2, slush-golem 2 (the rest of the theme). Mini-boss leftover-lich 5 in Ice Floor Switch (named). Boss laundry-lurker 13. Relic Frost Wand, shop FrostResistPotion.
  • Report: 8 floors, 61 rooms, size 49. 13 must-clear for 9 beasts, so repeats [socktopus, hamper-hound, wrinkle-wyvern, wardrobe-wraith], overflow [], left []. 27 moves, 22 added rooms. Dropped: eight riddles. One big-key door between ordinary rooms drawn plain (B5 (0,1) south).
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.
  • Spec change: ShippedTemplesAudit's "used once (once per sealed room)" now lets a classic temple's reported repeats through.

Fire: Turtle Rock (#1463, e32099d0)

  • Plan: must-clear hangry-hob 1, simmer-salamander 2 (starters), snack-snatcher 2, cardboard-golem 2, then backseat-beastie 2 (top-up). Mini-boss grime-griffin 5 in TR Lava Dual Pipes (named; no enemies, so it fights in the Big Key screen B1 (3,1)). Boxed in there, it hands the Boss Key out as its drop (the move big-key chest B1(3,1) -> B1(3,1)). Boss junkpile-jotun 13 monthly. Relic Flame Shield, shop FireResistPotion.
  • Report: 3 floors, 59 rooms, size 44. 7 must-clear (Twin Pokeys is now one) for 5 beasts, so repeats [hangry-hob, simmer-salamander], overflow [], left []. 14 moves, 10 added rooms. Dropped: none.
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.
  • Spec change: STARTER_MATCHES fire gains quest-car, from the topped-up Backseat Beastie.

Moon: Ganon's Tower (#1464, 64f7b7ad)

  • Plan: must-clear fang-fairy 2, scroll-troll 2, snooze-sloth 2, pajama-pooka 1, grubgoblin 1, hairball-harpy 1 (all six of today's are starters), then sniffle-sprite 1 (top-up). Mini-bosses, by path: stinkwisp 5 in GT Ice Armos (named: the shutter room in front of the Big Key, LTTP's Armos refight with 0 enemies read) and glowleech 3 in GT Quad Pot (named: its enemies are GT's Lanmolas, per the brief). Boss night-owlbear 8. Relic Lunar Pendant. No shop item, as today.
  • Report: 8 floors (B2, B1, 1F-6F), 103 rooms, size 63. 21 must-clear monster rooms (plus 2 mini-bosses) for 7 beasts, so repeats [fang-fairy, scroll-troll, snooze-sloth, pajama-pooka, grubgoblin, hairball-harpy, sniffle-sprite] (each about three times). These are the numbers the owner's Misery Mire decision reads. Overflow [], left []. 30 moves, 21 added rooms. Dropped: eight riddles. One Bomb chest at 4F (1,1).
  • Solver: solvable, reasons []. Audit clean. Keyless: unsolvable.
  • Spec changes: STARTER_MATCHES moon gains quest-vitamins (the Sniffle Sprite top-up). After Moon, regenerate.ts PLANS is empty, so ShippedTemplesAudit runs its per-temple "regenerated temples" block only while REGENERATED is non-empty: Jest refuses an empty describe.each table. FLOORS and RELICS are now empty records.

Generated module sizes: Earth 75, Light 70, Water 97, Shadow 101, Ice 118, Fire 102, Moon 165. None is over 500.

Specs (one at a time, chemx only)

The gate ran per temple before each commit: chemx test tests/unit/ClassicTemples.spec.ts, then ClassicDungeonGuards.spec.ts, then ShippedTemplesAudit.spec.ts. After the Moon commit's tree:

chemx test tests/unit/ClassicTemples.spec.ts         All tests passed (161 passed)
chemx test tests/unit/ClassicDungeonGuards.spec.ts   All tests passed (91 passed)
chemx test tests/unit/ShippedTemplesAudit.spec.ts    All tests passed (154 passed)
chemx test tests/unit/ClassicDress.spec.ts           All tests passed (44 passed)   # after 0ec9f580; the tool has not changed since

Each failure on the way, and what fixed it:

  • Earth's "at least two flights": spec adjusted to the dungeon.
  • Shadow's two ClassicTemples failures: a tool fix and a spec change.

Ice, Fire and Moon were green on their first run once the spec adjustments above were in.

Audit

npx --yes chemx@26.10.19-530 audit --no-index --unroll (written to my scratchpad), run before the Moon commit, then git checkout -- chemx-ratchet.json.

  • Counts as in Task 7's baseline: INLINE_BOOLEAN 5/4, LINE_BUDGET_FILE 36/4, DISPATCH_SWITCH 36, CASCADE_GUARDS 14, HOOK_RETURN_OVERLOAD 19, TYPE_COLOCATION 0.
  • None of my files is listed under LINE_BUDGET_FILE, CONTROL_FLOW_INLINE_BOOLEAN, TYPE_COLOCATION or HOOK_RETURN_OVERLOAD.
  • The one UNGUARDED_LOGGING entry is tools/temples/regenerate.ts:169, its CLI console.log. It is untouched by me and is the ratchet's existing 1.

File sizes: dressBoard 384, dressChores 192, dressDoors 287, dressPlans 204, ClassicDress.spec 442, classicFixtures 374, ClassicTemples.spec 487 (close to the cap), ClassicDungeonGuards.spec 445, ShippedTemplesAudit.spec 438.

Deviations and concerns

  1. Mini-boss rooms named by the plan (a tool change the brief did not foresee). The plan's mini-boss count could not settle R4 in these five. Mini-boss status moves away from the design's guard in each:
    • Water: Push Statue becomes a must-clear monster; Trench 2 Blocks (a side room in LTTP) is now sealed.
    • Shadow: the Arena becomes a must-clear monster.
    • Ice: the Pengator Switch becomes a must-clear monster.
    • Fire: Twin Pokeys becomes a must-clear monster.
    • Moon: Bob's Torch becomes a must-clear monster.
  2. Fights where LTTP shows none. Moon's Ice Armos is faithful: it is LTTP's Armos room, and only the converter misses the sprites. Fire's Lava Dual Pipes is a true deviation: LTTP has no fight there. It is the only plan-level way to guard Turtle Rock's Big Key, and its mini-boss hands the Boss Key out as a drop instead of a chest.
  3. ClassicTemples' many-screen rule is now measured against the JSON. PoD Middle Cage opens both its screens on the lobby, so in the converted dungeon itself its second screen, and the stairs in it, are reached without the fight. The rule now says that blocking the fight screen opens no more around the room than the JSON does. Rooms the dressing added stand for no cell; the Arena's moved Boss Key nook hung off a non-fight screen. This was a pre-existing failure under the stand-in too.
  4. Spec rules adjusted to the data. All recorded in the commits:
    • ClassicTemples: one flight per stairway (Skull Woods has none).
    • ShippedTemplesAudit: "once per sealed room" exempts the reported repeats.
    • ShippedTemplesAudit: STARTER_MATCHES fire gains quest-car, moon gains quest-vitamins. Both are starters of beasts the plans topped up with, as the chore ruling asks.
    • ShippedTemplesAudit: the regenerated block runs only when regenerate.ts plans a temple.
  5. regenerate.ts now plans nothing. PLANS is {} and its header says so. Whether to delete the script and the spec's regenerated block is the lead's call.
  6. Moon Shard. Ganon's Tower has one Big Chest, which holds the Lunar Pendant (the equipable relic, Night's Light). The Moon Shard (a flavour unlock) has no chest any more. The ClassicPlan has one relic, so keeping it would need a tool change; I did not make one.
  7. Today's beasts that leave. Water loses puddle-phantom and smudge-specter; Shadow loses cupboard-kobold and garbage-gargoyle. None of them has a starter quest. Repeats, for the art task:
    • Ice: socktopus, hamper-hound, wrinkle-wyvern, wardrobe-wraith.
    • Fire: hangry-hob, simmer-salamander.
    • Moon: all seven must-clear beasts.
  8. Moon is big. 8 floors and 21 must-clear rooms over 7 beasts. The Misery Mire fallback is the owner's decision from these numbers (posted on #1464).
  9. Shadow's B1 map. Seven empty rows sit between the main rooms and the boss cluster: the compaction only moves walled islands. This is Task 7's behaviour, which I left as is.
  10. Specs not run, per the rules. These specs import every shipped temple: TempleSolver, templeAudit, TempleCreatorMazeReadouts, TempleRegistry, TempleFreshness, ClassicTempleRefresh and importAllTemples.
    • TempleSolver's "passes the solver" and templeAudit's "can be finished" assert what ClassicTemples already asserts for each classic temple.
    • The others read layouts generically.
    • CI's full run will confirm them.
  11. The e2e. No Cypress walk was added for the seven (none was asked). The Storm walk stays skipped as Task 7 left it.

Fix round 1 (the coordinator's list after the task review)

Status: DONE. All six items are done, in small commits, same worktree and rules. Concerns 5 (regenerate.ts) and 6 (the Moon Shard) above are resolved. The rulings marked "accepted as is" (Water's sealed side fight, Fire's enemy-less mini-boss, Shadow's mini-boss north of the entrance) are unchanged.

SHA Subject
5c85cc19 fix(tools): a chest a boxed-in fight hands out is no move in the dress report
1b3eff13 feat(tools): a classic plan's relics beyond the first take the dungeon's gold chests nearest the entrance
f59a4362 fix(tools): the mini-boss nearest the entrance gets the easiest mini-boss quest
b6482d5f fix(temples): the Moon Temple keeps its Moon Shard, in the gold chest nearest the entrance
32418a85 test(temples): the many-screen seal check counts a room added to hold what moved as the cell it left
45bf7936 chore(tools): regenerate.ts goes: every shipped temple follows a classic dungeon or is made by hand
5b98528a test(temples): a classic plan that repeats a beast lists every beast of its theme

1. The Moon Shard (1b3eff13, b6482d5f)

Tool. ClassicPlan.extraRelics?: string[] holds the relics beyond the first. In order, each takes the place of the gold of the dungeon's other chest nearest the entrance by path distance (every door open; floor order, then reading order among equals).

  • dress.placeExtraRelics runs after the extras, on the final layout. It shares the nearestTheEntrance order with placeExtras.
  • It marks the chest's Item.relic, and dressRooms.chestOf writes { chest: "dungeon", dungeon: <relic> }.
  • A plan with more extra relics than other chests throws.
  • A gold chest held by a boxed-in fight is left out: a fight hands out one Dungeon Item at most.

TDD. New TREASURY fixture: a hoard of gold on the way, a second gold chest in a cellar past the guard.

  • Behavioural RED: 2 failed out of 47. The one-relic baseline passed.
  • GREEN: 47.
  • ClassicTemples and the guard spec count each extra relic once and the gold as 25 × (other chests − extra relics).

Moon. The plan lists extraRelics: ["Moon Shard"]. The Moon Shard takes the B1 (3,5) gold chest (O005) and appears in moon-temple.ts exactly once.

2. Mini-boss order (f59a4362)

Mini-bosses are now dealt their quests easiest first in path order, as the must-clear rooms are, for every temple. A stable sort keeps the plan's order among equals, so the six one-mini-boss temples and Storm are unchanged.

  • Moon regenerated: Glowleech (3) at the Ice Armos on B2, the nearer one; Stinkwisp (5) at the Quad Pot on 3F.
  • RED first: the new BYWAY test (a 5 then a 3 in the plan; the Statue, one door out, must get the 3) failed 1 of 48.
  • ShippedTemplesAudit now checks a classic temple's mini-boss quests are easiest-nearest too. It failed on the previous Moon module (restored by re-running the CLI afterwards).

3. The many-screen check maps moved nooks (32418a85)

dressedReach maps a room the dressing added to hold something moved to its placement's origin, the converted cell it left. A room added of its own accord (shop, Bomb chest, landing circle, antechamber, Master Room) has its own position as origin (the same object) and still stands for no cell. All eight classic temples hold. For example, Shadow's Boss Key nook stands for the Pit Room, which is reached either way.

4. A short plan cannot repeat quietly (5b98528a)

ShippedTemplesAudit "the classic temples' plans": every classic temple with repeats lists in its plan each beast of its theme that its mini-bosses and boss leave. Ice, Fire and Moon do; the other five have no repeats. With the Backseat Beastie taken out of Fire's plan for one run, it failed (1 failed out of 162); the plan was restored.

5. regenerate.ts removed (45bf7936)

chemx q generateShipped / SHIPPED_IDS / regenerate.ts found only ShippedTemplesAudit and comments.

Removed:

  • tools/temples/regenerate.ts;
  • ShippedTemplesAudit's regenerated plumbing: FLOORS, RELICS, REGENERATED, roomsOn, the per-temple block, and the regenerate/fs/path imports.

Added and renamed:

  • A check that every shipped temple is the hand-made Wind Temple or a classic one.
  • The header (lines 5-7) now describes the eight classic temples and Wind.
  • The generator-defaults block is retitled "the generator's defaults (the Temple Creator's Generate)" and kept: the editor still uses the generator.

Kept: questPlan.ts and renderModule.ts, the pieces regenerate.ts had shared, which dress.ts imports.

Comments updated: questPlan.ts, renderModule.ts, dressPlans.ts, classicFixtures.ts ("since removed") and tools/art/temple_floors.py's docstring.

6. No no-op move (5c85cc19)

dressPlace.relocate no longer reports a move when a boxed-in fight keeps the thing as its drops. These were Fire's Big Key, Ice's Right H map and Moon's Bob's Torch key, so their moves go from 14 to 13, 27 to 25 and 30 to 29.

  • ClassicMove.to's doc is corrected.
  • The guard spec's dead hand-out branch is removed.
  • RED first: ClassicTemples' new check "no move to its own cell" failed on Ice, Fire and Moon; it passes now.

Gate (the final tree, one at a time)

chemx test tests/unit/ClassicDress.spec.ts           All tests passed (48 passed)
chemx test tests/unit/ClassicTemples.spec.ts         All tests passed (161 passed)
chemx test tests/unit/ClassicDungeonGuards.spec.ts   All tests passed (91 passed)
chemx test tests/unit/ShippedTemplesAudit.spec.ts    All tests passed (162 passed)
chemx test tests/unit/TempleSolver.spec.ts           All tests passed (53 passed, 1 skipped)   # the skip predates this task
chemx test tests/unit/templeAudit.spec.ts            All tests passed (70 passed)

Audit: npx --yes chemx@26.10.19-530 audit --no-index --unroll, then git checkout -- chemx-ratchet.json.

  • Counts as before: INLINE_BOOLEAN 5/4, LINE_BUDGET_FILE 36/4, DISPATCH_SWITCH 36, CASCADE_GUARDS 14, HOOK_RETURN_OVERLOAD 19.
  • UNGUARDED_LOGGING is now 0 (its one entry was regenerate.ts's CLI console.log), one under the ratchet.
  • None of my files is listed.

File sizes: ClassicTemples.spec 494 (close to the cap), ClassicDress.spec 469, classicFixtures 394, ShippedTemplesAudit.spec 372, dress.ts 233, dressPlans.ts 211.

Concerns

  • ClassicTemples.spec.ts is at 494 lines; the next rule added there should go to a split spec.
  • UNGUARDED_LOGGING drops from the ratchet's 1 to 0. The ratchet file was restored, not lowered; whoever owns it may tighten it.

Table of Contents


Home - See Pages

Developer Docs

Start Screen

User Management

My Portal

My Home

The City (Hometown)

The World Map

The Dungeon

Game Master

Settings

Support & Glossary

About XP

Clone this wiki locally