feat(sim+player): scale-ring navigation (endless encoder) + cosmos/abyss scales #9

Merged
benstull merged 1 commits from feature/scale-ring-navigation into main 2026-06-08 06:41:21 +00:00
Owner

Scale-ring navigation (simulator) — session 0011

Implements the scales-library design §3: an endless rotary-encoder control
(relative, vs the absolute 0–4 experience knobs) that walks a closed ring of
neutral "scales of nature" clips, with placeholder AI zoom/warp transitions
between adjacent scales and a small→large wrap (the infinite-zoom payoff).

What's in it

  • player/ring.py (new, canonical pure logic): ScaleRing + advance_ring
    — one transition clip per edge, forward zooming inward / reversed outward,
    modulo wrap both ways, chained steps for a multi-detent spin.
  • Simulator: load_ring + serializers; GET /api/ring, POST /api/ring/advance (Python owns the step/wrap/transition math; the browser only
    plays the returned transition(s) then settles on the target scale).
  • Frontend: endless-encoder control (zoom in/out + stage scroll), current
    scale readout, multi-clip active-scale selection, transition playback.
  • Media: two cheap true-PD scales so the ring is demonstrable — cosmos
    (NASA/Hubble) + abyss (NOAA Ocean Exploration); provenance in the manifest,
    bytes generated as labelled placeholders by setup_scales_media.py.

Deferred (deliberately)

  • The expensive multi-strength flow-stabilized Right re-bake — new scales
    carry a raw base only until the ring is liked.
  • The Pi renderer + serial/firmware (simulator-first).

Verification

  • pytest 215 passed / 2 skipped (+22 new: test_player_ring.py,
    ring cases in test_clips.py / test_simulator_api.py).
  • Sim boots; /api/ring + /api/ring/advance correct incl. wrap; media served;
    a headless-Chrome CDP drive walked cosmos → forest → abyss → (wrap) → cosmos
    with the active clip reloading correctly.

Spec: docs/superpowers/specs/2026-06-07-scales-library-and-right-axis-pipeline-design.md (§3)
Plan: docs/superpowers/plans/2026-06-07-scale-ring-navigation.md

## Scale-ring navigation (simulator) — session 0011 Implements the scales-library design §3: an **endless rotary-encoder** control (relative, vs the absolute 0–4 experience knobs) that walks a **closed ring** of neutral "scales of nature" clips, with placeholder AI zoom/warp **transitions** between adjacent scales and a small→large **wrap** (the infinite-zoom payoff). ### What's in it - **`player/ring.py`** (new, canonical pure logic): `ScaleRing` + `advance_ring` — one transition clip per edge, forward zooming inward / reversed outward, modulo wrap both ways, chained steps for a multi-detent spin. - **Simulator**: `load_ring` + serializers; `GET /api/ring`, `POST /api/ring/advance` (Python owns the step/wrap/transition math; the browser only plays the returned transition(s) then settles on the target scale). - **Frontend**: endless-encoder control (zoom in/out + stage scroll), current scale readout, multi-clip active-scale selection, transition playback. - **Media**: two cheap **true-PD** scales so the ring is demonstrable — `cosmos` (NASA/Hubble) + `abyss` (NOAA Ocean Exploration); provenance in the manifest, bytes generated as labelled placeholders by `setup_scales_media.py`. ### Deferred (deliberately) - The expensive **multi-strength flow-stabilized Right re-bake** — new scales carry a raw base only until the ring is liked. - The **Pi renderer** + **serial/firmware** (simulator-first). ### Verification - `pytest` **215 passed / 2 skipped** (+22 new: `test_player_ring.py`, ring cases in `test_clips.py` / `test_simulator_api.py`). - Sim boots; `/api/ring` + `/api/ring/advance` correct incl. wrap; media served; a headless-Chrome CDP drive walked cosmos → forest → abyss → (wrap) → cosmos with the active clip reloading correctly. Spec: `docs/superpowers/specs/2026-06-07-scales-library-and-right-axis-pipeline-design.md` (§3) Plan: `docs/superpowers/plans/2026-06-07-scale-ring-navigation.md`
benstull added 1 commit 2026-06-08 06:41:12 +00:00
Add scale-ring navigation to the simulator per the scales-library design §3:
an endless rotary-encoder control (relative, vs the absolute 0-4 experience
knobs) walks a closed ring of neutral "scales of nature" clips, with placeholder
AI zoom/warp transitions between adjacent scales and a small->large wrap (the
infinite-zoom payoff).

- player/ring.py (new, canonical pure logic): ScaleRing + advance_ring; one
  transition clip per edge, played forward zooming inward / reversed outward;
  modulo wrap both ways; chained steps for a multi-detent spin. Mirrors
  player/content.py conventions (frozen dataclasses, pure functions).
- simulator: load_ring + ring_to_dict/ring_move_to_dict; GET /api/ring and
  POST /api/ring/advance (Python owns step/wrap/transition math; the browser
  only plays the returned transition(s) then settles on the target scale).
- frontend: endless-encoder control (zoom in/out buttons + stage scroll),
  current-scale readout, multi-clip active-scale selection, transition playback.
- media: two cheap true-PD scales so the ring is demonstrable -- cosmos
  (NASA/Hubble) + abyss (NOAA Ocean Exploration), provenance recorded in the
  manifest, bytes generated as labelled placeholders by setup_scales_media.py.
  The expensive multi-strength flow-stabilized Right re-bake is DEFERRED (new
  scales carry a raw base only) until the ring is liked; Pi renderer +
  serial/firmware remain deferred (simulator-first).
- docs: ROADMAP slice-3 done; USER_GUIDE scale-ring gesture; plan doc.

Verified: pytest 215 passed / 2 skipped (+22 new); sim boots, /api/ring +
/api/ring/advance correct incl. wrap, media served, and a headless-Chrome CDP
drive walked cosmos -> forest -> abyss -> (wrap) -> cosmos with the active clip
reloading correctly.

Spec: docs/superpowers/specs/2026-06-07-scales-library-and-right-axis-pipeline-design.md (§3)
Plan: docs/superpowers/plans/2026-06-07-scale-ring-navigation.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
benstull merged commit 435f201534 into main 2026-06-08 06:41:21 +00:00
benstull deleted branch feature/scale-ring-navigation 2026-06-08 06:41:21 +00:00
Sign in to join this conversation.