- commit
- 7f4f3f2b8ade8d65221f54373c3bd55642f506ce
- parent
- 946e8ddff5acb535a22ab7762049c207afdf2477
- author
- Dami <dami.etoile@gmail.com>
| M | openspec/ | 40 | ++++++++++++++++++++++-------- |
| M | openspec/ | 34 | ++++++++++++++++++++------ |
| M | openspec/ | 11 | +++++---- |
@@ -1,7 +1,7 @@
11 ## Source contract22 33 This change follows the accepted D20 material in `docs/design.md` and the4-designer reply headed **D20 header round 1** in `docs/design-inbox.md`, dated4+designer's D20 header and world-card reviews in `docs/design-inbox.md`, dated55 2026-09-24. `openspec/changes/add-world-index-navigation/` owns the world view66 model, request origins, world transition events, and navigation behavior. This77 change consumes those values and does not recreate them from level data.@@ -44,17 +44,24 @@ the settled dot and sheet immediately.
4444 ## First-entry world card4545 4646 When the stage receives the D20 `world-card` request, INDEX renders the card47-over the stage with the existing iris entry choreography. The card contains:47+over the stage with the existing iris entry choreography. Its centered content48+uses a 16px vertical rhythm in this order:4849 49-- the normalized world glyph at 96px;50-- the world name;51-- the tagline, when present;52-- `by <author>`; and53-- an ENTER action shown as a drawn keycap on keyboard layouts.50+1. the normalized world glyph at 96px;51+2. `WORLD NN` eyebrow;52+3. world name at 32px;53+4. tagline at 15px muted, when present;54+5. `<N> proofs | ★ <completed> / <total> | by <author>`; and55+6. the action.56+57+If author is absent, the byline segment is omitted; the card never prints58+`by Unknown author`. The desktop action is `[ENTER] enter world`. On mobile59+or a coarse pointer, it is a full-width 48px `ENTER WORLD` button in the60+world accent with no keycap.5461 5562 The card is centered on the ink-and-signal surface and preserves the existing56-hard-edged card lip and Recursive font. The card uses the world's accent as a57-signal color while retaining neutral card surfaces. Card text is fitted and63+hard-edged card lip and Recursive font. The 2px stroke and mobile action use64+the world's accent while retaining neutral card surfaces. Card text is fitted and5865 wrapped within the card; it must not clip at the supported desktop or mobile5966 sizes.6067 @@ -62,8 +69,19 @@ ENTER (or the equivalent confirmed card action) dismisses the card and
6269 returns to the settled INDEX sheet. Dismissing the card does not select or6370 enter a proof. The card is shown at most once per world per session, and a6471 Workshop PLAY request uses the same composition with its D20 `workshop` origin.65-On touch layouts the ENTER action keeps its visible keycap style but exposes a66-44px hit target. Reduced motion presents the settled card immediately.72+The mobile action's visible 48px button is its touch target. Reduced motion73+presents the settled card immediately.74+75+Core declares a first-party world identity: `🐈`, `Where the rules first bend.`,76+`you`, and author `Miau Is True`. This keeps the opening card out of the77+fallback state used for older imported packs.78+79+The designer accepted the finished Core and Crossword cards on 2026-09-24 in80+`docs/design-inbox.md`, including desktop and 390px Crossword captures. The81+world-index browser fixture passed first entry, Workshop PLAY, four-world82+navigation, touch confirmation, and reduced motion with no page errors. The83+full Node suite passed 373/373, the production build passed, and the84+sequential world solver gate solved all 30 proofs.6785 6886 ## Mobile INDEX footer and narration6987 @@ -64,10 +64,15 @@ SHALL expose a 44px tap target. Hit geometry SHALL match the visible arrows.
6464 ### Requirement: The first-entry world card SHALL present and dismiss world identity6565 6666 The INDEX SHALL consume the D20 `world-card` request and render a centered,67-hard-edged card containing the normalized glyph at 96px, name, tagline when68-present, `by <author>`, and an ENTER action. The card SHALL use the normalized69-accent as a signal color, fit all copy inside the card at desktop and mobile70-sizes, and preserve the existing iris entry choreography. ENTER or the67+hard-edged card containing the normalized glyph at 96px, `WORLD NN` eyebrow,68+32px name, 15px muted tagline when present, a meta line with proof count,69+`★ n / N`, and `by <author>` only when an author exists, followed by an action.70+These elements SHALL use a 16px vertical rhythm. The card SHALL never show71+`by Unknown author`. Its 2px stroke SHALL use the normalized world accent.72+Desktop SHALL show `[ENTER] enter world`; mobile and coarse-pointer layouts73+SHALL show a full-width 48px accent `ENTER WORLD` button without a keycap.74+The card SHALL fit all copy inside at desktop and mobile sizes and preserve75+the existing iris entry choreography. ENTER or the7176 equivalent confirmed pointer/touch action SHALL dismiss the card and leave the7277 player on the settled INDEX sheet without selecting a proof. The card SHALL7378 not install packs or mutate simulation state.@@ -75,8 +80,21 @@ not install packs or mutate simulation state.
7580 #### Scenario: INDEX first entry opens a readable world card7681 7782 - **WHEN** D20 requests a card with origin `index`78-- **THEN** the card shows the world glyph, name, tagline, author, and ENTER79- action without clipping83+- **THEN** the card shows its glyph, `WORLD NN`, name, tagline, proof count,84+ completion, author when present, and the correct desktop or touch action85+ without clipping86+87+#### Scenario: Core uses a first-party identity88+89+- **WHEN** the player first enters the Core world90+- **THEN** its card uses `🐈`, `Where the rules first bend.`, the `you` accent,91+ and `by Miau Is True` rather than the fallback identity92+93+#### Scenario: Missing author leaves no placeholder94+95+- **WHEN** an imported world omits author96+- **THEN** its meta line omits the byline segment and never prints97+ `by Unknown author`8098 8199 #### Scenario: Workshop PLAY uses the same card presentation82100 @@ -93,8 +111,8 @@ not install packs or mutate simulation state.
93111 #### Scenario: Touch confirmation has a large target94112 95113 - **WHEN** the card is rendered for a coarse pointer96-- **THEN** the visible ENTER keycap remains readable and its confirmation hit97- target is at least 44px high114+- **THEN** the card has no visible keycap and its full-width accent115+ `ENTER WORLD` button is 48px high and tappable across that width98116 99117 #### Scenario: Card motion respects reduced motion100118 @@ -11,15 +11,16 @@
1111 1212 ## 2. World card1313 14-- [x] 2.1 Apply the accepted centered card composition: 96px glyph, name,15- tagline, `by <author>`, accent signal, hard-edged surfaces, and ENTER action.14+- [x] 2.1 Apply the revised centered card composition: 96px glyph, `WORLD NN`,15+ 32px name, 15px tagline, proof/progress/optional-author meta line, 16px16+ rhythm, accent stroke, and desktop/touch actions.1617 - [x] 2.2 Preserve the D20 `index` and `workshop` origins and dismiss the card1718 to the settled INDEX sheet without entering a proof or changing simulation.18-- [x] 2.3 Fit and wrap card copy for desktop/mobile canvases, expose the 44px19- coarse-pointer ENTER target, and settle the card under reduced motion.19+- [x] 2.3 Fit and wrap revised card copy for desktop/mobile canvases, expose the20+ full-width 48px coarse-pointer action, and settle under reduced motion.2021 - [x] 2.4 Add focused renderer, input, and accessibility tests for first entry,2122 Workshop PLAY, confirmation, pointer/touch parity, and one-per-session card22- behavior.23+ behavior, including Core identity and missing-author copy.2324 2425 ## 3. Mobile controls and narration2526