clone

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

main
miau-is-true / openspec / specs / world-index-presentation / spec.md
spec.md 6.7K source

world-index-presentation Specification

Purpose

TBD - created by archiving change add-world-index-presentation. Update Purpose after archive.

Requirements

Requirement: INDEX SHALL present the active world as the header subject

The INDEX presentation SHALL render an 11px tracked INDEX | WORLD NN eyebrow, the active world name in --fg, weight 800, and its muted tagline with 8px vertical spacing. The tagline SHALL fall back to walk the path, pick a proof when the normalized world has none. The large standalone INDEX heading and overlapping world-number stack SHALL not be rendered. The presentation SHALL also show ★ n / N, where both counts are scoped to the active world view model.

Scenario: Desktop world header establishes hierarchy

  • WHEN INDEX renders an active world on a desktop canvas
  • THEN the eyebrow, name, tagline, and per-world count are legible, separated by the specified spacing, and do not overlap the board or world strip

Scenario: Missing tagline uses the approved fallback

  • WHEN the normalized active world has no tagline
  • THEN INDEX renders walk the path, pick a proof in the tagline region

Scenario: Mobile header remains inside its owning region

  • WHEN INDEX renders at 390px wide
  • THEN the complete world name, fallback or authored tagline, and per-world count remain inside the header region without covering the board or footer

Requirement: INDEX SHALL render the world strip as an actionable control

The desktop strip SHALL render [Q] ◀ ● • • ▶ [E] with drawn Q and E keycaps, 14px arrows, 10px dots, and one dot per world. The active dot SHALL use the normalized world's accent when present; inactive dots SHALL use the neutral dot role. On mobile or coarse pointers, keycaps SHALL be omitted and each arrow SHALL expose a 44px tap target. Hit geometry SHALL match the visible arrows.

Scenario: World strip exposes adjacent actions

  • WHEN INDEX renders three worlds on desktop
  • THEN it shows Q, a previous arrow, three dots, a next arrow, and E in that order, with the active dot accented

Scenario: Mobile strip exposes touch targets

  • WHEN INDEX renders on a 390px canvas or a coarse pointer
  • THEN Q/E keycaps are absent and the previous and next arrows each have a 44px tappable target

Scenario: Dot slide follows a world transition

  • WHEN the D20 seam reports a world switch
  • THEN the active dot travels from its prior position to its new position over 110ms with back-ease, while the world sheet uses the same transition start and its 280ms ease

Scenario: Reduced motion settles the strip

  • WHEN reduced motion is enabled during a world switch
  • THEN the strip renders the destination dot and sheet immediately without an intermediate slide

Requirement: The first-entry world card SHALL present and dismiss world identity

The INDEX SHALL consume the D20 world-card request and render a centered, hard-edged card containing the normalized glyph at 96px, WORLD NN eyebrow, 32px name, 15px muted tagline when present, a meta line with proof count, ★ n / N, and by <author> only when an author exists, followed by an action. These elements SHALL use a 16px vertical rhythm. The card SHALL never show by Unknown author. Its 2px stroke SHALL use the normalized world accent. Desktop SHALL show [ENTER] enter world; mobile and coarse-pointer layouts SHALL show a full-width 48px accent ENTER WORLD button without a keycap. The card SHALL fit all copy inside at desktop and mobile sizes and preserve the existing iris entry choreography. ENTER or the equivalent confirmed pointer/touch action SHALL dismiss the card and leave the player on the settled INDEX sheet without selecting a proof. The card SHALL not install packs or mutate simulation state.

Scenario: INDEX first entry opens a readable world card

  • WHEN D20 requests a card with origin index
  • THEN the card shows its glyph, WORLD NN, name, tagline, proof count, completion, author when present, and the correct desktop or touch action without clipping

Scenario: Core uses a first-party identity

  • WHEN the player first enters the Core world
  • THEN its card uses 🐈, Where the rules first bend., the you accent, and by Miau Is True rather than the fallback identity

Scenario: Missing author leaves no placeholder

  • WHEN an imported world omits author
  • THEN its meta line omits the byline segment and never prints by Unknown author

Scenario: Workshop PLAY uses the same card presentation

  • WHEN D20 requests a card with origin workshop
  • THEN the card uses the same composition and preserves the Workshop selected pack's first node for the subsequent INDEX sheet

Scenario: Card confirmation returns to INDEX

  • WHEN the player confirms ENTER on an open world card
  • THEN the card closes and INDEX remains on the active world's sheet; no proof move or simulation turn is recorded

Scenario: Touch confirmation has a large target

  • WHEN the card is rendered for a coarse pointer
  • THEN the card has no visible keycap and its full-width accent ENTER WORLD button is 48px high and tappable across that width

Scenario: Card motion respects reduced motion

  • WHEN reduced motion is enabled
  • THEN the card appears in its settled geometry without an iris intermediate

Requirement: Mobile INDEX controls SHALL use touch affordances and coherent narration

Below 760px or on coarse pointers, INDEX SHALL omit keyboard keycap hints, render tap the cat to play below the active proof banner, and expose the bottom ☰ menu thumb affordance. Workshop SHALL remain reached through that menu. The INDEX accessibility label SHALL include world number/name, world-scoped completion, total proof count, and the keyboard world-switch action where keyboard controls are available. An open card label SHALL include world identity, author, and its ENTER action.

  • WHEN INDEX renders below 760px or for a coarse pointer
  • THEN it shows the cat play prompt and menu thumb affordance without the desktop ENTER, ESC, or SPACE keycap row

Scenario: Accessibility follows the visible world state

  • WHEN the active world or its completed count changes
  • THEN the INDEX label names the current world and its updated n of N proof progress, and announces Q/E switching when applicable

Scenario: Presentation leaves simulation and grid state unchanged

  • WHEN any header, strip, card, or mobile footer presentation is measured, animated, or dismissed
  • THEN engine rules, simulation snapshots, integer board coordinates, progress keys, and pointer semantics remain unchanged