1. World identity and pack validation
- [x] 1.1 Extend the normalized pack/catalog record with one world record per pack, including stable order, origin, author, level count, and per-world completion counts.
- [x] 1.2 Validate
manifest.world.glyphwithIntl.Segmentergrapheme counting and the 16 UTF-16-unit cap; validate tagline length, newlines, sentence case, and U+00B7; validateaccentagainst the closed token set, includingtick. Emit nonblocking W11 notes and normalized fallback metadata for invalid optional identity fields. - [x] 1.3 Add focused tests for valid metadata, grapheme and UTF-16 edge cases, each invalid field, the exact middle-dot diagnostic, absent metadata, gameplay-field rejection, replacement position, imported registration order, fork append order, and removal of an imported world.
- [x] 1.4 Add a pack-service/share view assertion that world metadata is exposed without changing pack IDs, level IDs, or share collision behavior.
2. World-owned INDEX layout
- [x] 2.1 Remove origin/ID-based bundled grouping from
src/and create one chapter group and sheet range for every pack, including core.scenes/ map.js - [x] 2.2 Expose
worlds,worldId, and world-local sheet links while keeping existing node coordinates, IDs, and fifteen-cell serpentine layout stable. - [x] 2.3 Add tests for a one-sheet world, a multi-sheet world, sheet boundaries, world boundaries, empty packs, and deterministic registration order.
- [x] 2.4 Update layout callers and accessibility text to use the active world identity rather than deriving world names from the active level.
3. World navigation and progress
- [x] 3.1 Add Q/E, gamepad LB/RB, and one-per-gesture two-finger swipe actions to the INDEX navigator with no-op feedback at the outer boundaries.
- [x] 3.2 Make path traversal cross adjacent world boundaries only at the terminal/initial node in the corresponding travel direction, without wraparound or accidental jumps between nearby cells.
- [x] 3.3 Preserve a cursor per world, choose that cursor or the first available node on entry, and keep proof unlocking and completion counts scoped to the active pack ID.
- [x] 3.4 Add focused navigator/progress tests for Q/E, edge traversal, boundary no-ops, locked openers, solved counts, undo/restart isolation, and removal of the active imported world.
4. Presentation handoff seam
- [x] 4.1 Expose the pure world header/strip view model and stable transition events without changing canvas grid geometry or simulation state.
- [x] 4.2 Emit a first-entry world-card request and a Workshop PLAY card origin; deduplicate repeated requests within a session and preserve the active node.
- [x] 4.3 Add accessible text coverage for world number/name, per-world completion, adjacent-world actions, and card ENTER/return state.
- [x] 4.4 Leave final card/header geometry, font fitting, iris animation, and
copy to a separate designer-reviewed presentation change; post the seam
evidence to
docs/before implementing that follow-up.design-inbox.md
5. Verification and handoff
- [x] 5.1 Run the focused catalog, map, navigator, and progress tests.
- [x] 5.2 Run the complete Node suite, bundled-world solver gate, production build, and desktop/mobile browser checks for INDEX, world switching, locked nodes, Workshop PLAY, and share import.
- [x] 5.3 Confirm the map implementation no longer relies on the old paragraph
that grouped built-ins on sheet 1; update the live
game-presentationandlevel-packsspecs only when implementation is complete. - [x] 5.4 Post navigation and metadata screenshots/logs to both team inboxes, obtain designer review for the presentation seam, and record the final world order and pack validation result before archiving this change.