clone

a browser grid puzzle game where you push words around to rewrite the rules of each level

main
miau-is-true / openspec / changes / archive / 2026-09-24-add-world-index-navigation / tasks.md
tasks.md 3.7K rendered
1## 1. World identity and pack validation23- [x] 1.1 Extend the normalized pack/catalog record with one world record per4 pack, including stable order, origin, author, level count, and per-world5 completion counts.6- [x] 1.2 Validate `manifest.world.glyph` with `Intl.Segmenter` grapheme7 counting and the 16 UTF-16-unit cap; validate tagline length, newlines,8 sentence case, and U+00B7; validate `accent` against the closed token set,9 including `tick`. Emit nonblocking W11 notes and normalized fallback metadata10 for invalid optional identity fields.11- [x] 1.3 Add focused tests for valid metadata, grapheme and UTF-16 edge cases,12 each invalid field, the exact middle-dot diagnostic, absent metadata,13 gameplay-field rejection, replacement position, imported registration order,14 fork append order, and removal of an imported world.15- [x] 1.4 Add a pack-service/share view assertion that world metadata is exposed16 without changing pack IDs, level IDs, or share collision behavior.1718## 2. World-owned INDEX layout1920- [x] 2.1 Remove origin/ID-based bundled grouping from `src/scenes/map.js` and21 create one chapter group and sheet range for every pack, including core.22- [x] 2.2 Expose `worlds`, `worldId`, and world-local sheet links while keeping23 existing node coordinates, IDs, and fifteen-cell serpentine layout stable.24- [x] 2.3 Add tests for a one-sheet world, a multi-sheet world, sheet boundaries,25 world boundaries, empty packs, and deterministic registration order.26- [x] 2.4 Update layout callers and accessibility text to use the active world27 identity rather than deriving world names from the active level.2829## 3. World navigation and progress3031- [x] 3.1 Add Q/E, gamepad LB/RB, and one-per-gesture two-finger swipe actions32 to the INDEX navigator with no-op feedback at the outer boundaries.33- [x] 3.2 Make path traversal cross adjacent world boundaries only at the34 terminal/initial node in the corresponding travel direction, without35 wraparound or accidental jumps between nearby cells.36- [x] 3.3 Preserve a cursor per world, choose that cursor or the first available37 node on entry, and keep proof unlocking and completion counts scoped to the38 active pack ID.39- [x] 3.4 Add focused navigator/progress tests for Q/E, edge traversal,40 boundary no-ops, locked openers, solved counts, undo/restart isolation, and41 removal of the active imported world.4243## 4. Presentation handoff seam4445- [x] 4.1 Expose the pure world header/strip view model and stable transition46 events without changing canvas grid geometry or simulation state.47- [x] 4.2 Emit a first-entry world-card request and a Workshop PLAY card origin;48 deduplicate repeated requests within a session and preserve the active node.49- [x] 4.3 Add accessible text coverage for world number/name, per-world50 completion, adjacent-world actions, and card ENTER/return state.51- [x] 4.4 Leave final card/header geometry, font fitting, iris animation, and52 copy to a separate designer-reviewed presentation change; post the seam53 evidence to `docs/design-inbox.md` before implementing that follow-up.5455## 5. Verification and handoff5657- [x] 5.1 Run the focused catalog, map, navigator, and progress tests.58- [x] 5.2 Run the complete Node suite, bundled-world solver gate, production59 build, and desktop/mobile browser checks for INDEX, world switching, locked60 nodes, Workshop PLAY, and share import.61- [x] 5.3 Confirm the map implementation no longer relies on the old paragraph62 that grouped built-ins on sheet 1; update the live `game-presentation` and63 `level-packs` specs only when implementation is complete.64- [x] 5.4 Post navigation and metadata screenshots/logs to both team inboxes,65 obtain designer review for the presentation seam, and record the final66 world order and pack validation result before archiving this change.