task 7 fix3 - xopherdeep/do-it-for-the-xp GitHub Wiki
Every round-2 item is confirmed addressed. The re-review found new breakage in the fix diff; fix it, TDD, one spec at a time, small commits.
Review: "T001 at 1F (2,0) opens onto the entrance and rides to T004 at 3F (3,0); T004 opens onto the fairy room T003, whose circle rides up to 4F T005. Walling off 2F (1,0) and (1,1) still leaves it solvable; walling off 1F (2,0) as well makes it unsolvable. So two of Storm's three must-clear rooms, and the Lightning Rod, are optional. Only Storm of the nine is affected."
RULING (dress rule, no engine change): in placeLandingCircles, a warp whose JSON landing is not a circle (one-way in LTTP) keeps its added landing circle only if the ride back opens no way around a must-clear room; otherwise both ends become empty rooms (keep the rooms, e.g. the compass hangs off 3F (3,0)), reported in classicReport(id).dropped as a dropped warp. Spec (pinned for all dressed temples): every must-clear room that blocks the boss when warps are treated as one-way still blocks the boss in the dressed temple.
Review: "smallLockEnd (dressDoors.ts:102-107) looks up distances by JSON position but passes slot.at, which shiftFloors now moves. Shadow B1 is shifted one column: at head the lock sits on the must-clear fight's east side and the stairs side is a plain door, so a hero coming down the stairs walks in without a key. Fix: look positions up by slot.cell.row/col." Fix as stated; spec on a shifted-floor fixture.
Review: "Shadow goes from solvable at base to R2: the flight pushed out of the sealed fight at 1F (6,1) takes 1F (7,4) (placeNearest ranks 'any free converted cell on the floor' above the free spot right beside it at (6,0)); the stairs end up behind two cracked walls. Fix: a flight out of a seal goes beside its source first (openNear), as holes and circles now do." Fix as stated.
- A JSON hole cell that itself has two or more open sides (a hole on a passage, e.g. Moon GT 5F (2,1) with three open sides, which cuts the floor: R1 on 8 rooms) moves to an added dead-end cell beside it; the passage stays an empty room. Spec: no pit cell in any dressed temple has more than one open side.
- The shop goes on the entrance floor, in an empty cell reachable from the entrance without passing a must-clear seal; if none, add one cell beside the entrance (Storm's shop must not sit on 4F).
-
dressDoors.ts:220: replace the eagerslots.map(tryOpenBeside).find(...)with a loop that stops at the first hit (each call adds a room). - Stale comments:
dressBoard.ts:13-15(circles),dress.ts:80-82(Hera's shop),openNear's doc (it can still throw inplaceNearest's corner case — make it never throw, or say so). - A guard spec that dresses all nine JSONs in memory with the current stand-in plans and PINS, per temple, whether it builds and solves (and the exact reasons for any that do not, e.g. Wind and Water under the stand-in plans). Task 8 then flips each to "solves" as it dresses it; any regression turns the spec red.
Run ClassicDress, ClassicTemples, ClassicTempleRefresh, ShippedTemplesAudit, TempleSolver one at a time. Audit with npx --yes [email protected] audit --no-index --unroll (no file you touch may newly appear under LINE_BUDGET_FILE / CONTROL_FLOW_INLINE_BOOLEAN / TYPE_COLOCATION / HOOK_RETURN_OVERLOAD), then git checkout -- chemx-ratchet.json. Regenerate storm-temple.ts. Append "Fix round 3" to task-7-report.md and reply with the short status contract.