feat(sim): Left HUD redesign · emotion channel · deterministic painterly Right dream · 3-knob control #12

Merged
benstull merged 3 commits from feature/left-hud-look-and-feel into main 2026-06-23 18:27:21 +00:00
Owner

Session 0013. Simulator-first work, all judged by eye, 233 tests green.

  • Left HUD redesign — corner-bracket reticles, legible chips, detection vs measurement channels with confidence scores, escalating ANALYSIS status tag.
  • Affect channel — emotion words surfaced only when BOTH Left+Right are up (min(left,right)); soft violet, scene-level. Design: docs/superpowers/specs/2026-06-22-affect-channel-hud-design.md
  • Right axis reframe — replaced the too-fluid pre-baked SD variants with a deterministic, real-time WebGL Kuwahara painterly dream that holds still across the loop; max goes trippy. Design: docs/superpowers/specs/2026-06-22-right-axis-deterministic-dream-design.md
  • Control surface — Dark+Light collapsed into one bipolar Mood dial; Calibration sliders removed (gains pinned to locked 1.0). Now 3 knobs: Left, Right, Mood.
  • Dev ergonomics — no-cache + /dev/version live-reload + on-screen error banner + crash-proof render.

Legacy SD baker + baked variants parked (unused at runtime). No deploy (simulator-first; no PPE/prod stage exists yet).

🤖 Generated with Claude Code

Session 0013. Simulator-first work, all judged by eye, 233 tests green. - **Left HUD redesign** — corner-bracket reticles, legible chips, detection vs measurement channels with confidence scores, escalating ANALYSIS status tag. - **Affect channel** — emotion words surfaced only when BOTH Left+Right are up (min(left,right)); soft violet, scene-level. Design: docs/superpowers/specs/2026-06-22-affect-channel-hud-design.md - **Right axis reframe** — replaced the too-fluid pre-baked SD variants with a deterministic, real-time **WebGL Kuwahara painterly** dream that holds still across the loop; max goes trippy. Design: docs/superpowers/specs/2026-06-22-right-axis-deterministic-dream-design.md - **Control surface** — Dark+Light collapsed into one bipolar Mood dial; Calibration sliders removed (gains pinned to locked 1.0). Now 3 knobs: Left, Right, Mood. - **Dev ergonomics** — no-cache + /dev/version live-reload + on-screen error banner + crash-proof render. Legacy SD baker + baked variants parked (unused at runtime). No deploy (simulator-first; no PPE/prod stage exists yet). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
benstull added 3 commits 2026-06-23 18:27:13 +00:00
Left-brain HUD look-and-feel pass (judged by eye in the sim):
- corner-bracket targeting reticles (capped arms) replace plain boxes
- translucent label chips, legible over any frame
- two sensor channels: cyan detections (with deterministic confidence
  scores) vs amber measurements (center crosshair)
- bbox-sized "ANALYSIS . L{n} . {k} OBJ" status tag, escalating with Left

Affect channel (emotions in the HUD), per
docs/superpowers/specs/2026-06-22-affect-channel-hud-design.md:
- surfaces only when BOTH knobs up; strength = min(left, right)
- stable per-scene palette, more words appear with combined strength
- soft glowing violet words on their own opacity layer (the dream
  leaking into the machine's read); math in player/alteration.py
- forest/cosmos/abyss palettes in the manifest; 5 new unit tests

Simulator no-cache middleware so by-eye iteration never serves a stale
app.js / api response (fixes the latent "plan has affect but clip.affect
empty" stale-/api/clips bug).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the pre-baked SD restyle variants (too fluid — the painting re-rolled
every keyframe and the flow-warp melted frames) with a deterministic, real-time
dream that holds STILL across the loop; only the footage's own motion moves.
Design: docs/superpowers/specs/2026-06-22-right-axis-deterministic-dream-design.md

Engine (player/alteration.py): Restyle(variant) -> Dream(strength, intensity);
Calibration.right_variant_map -> dream_gain. player/state.py: a Right change is a
LIVE_UPDATE now, not a crossfade (only a clip swap crossfades). Plan dict
restyle -> dream. Tests migrated; 233 green. (No new Python behavior for the
client-render swap below.)

Renderer (simulator front-end): the Right dream is a WebGL2 Kuwahara shader on a
<canvas> over the live video — edge-preserving, so motion/structure stay crisp;
the dream is the same footage, just stylized (no blur). Ramped by the knob; max
goes "trippy" (vivid saturation + ~45deg hue drift + posterize, concentrated near
max via t=intensity^2). Phase-1 luminous-haze (CSS+bloom) was built then retired
by eye (blur read as out-of-focus video). Mood grade rides as a CSS filter on the
canvas; bloom layer removed.

Dev ergonomics that fell out of the iteration:
- /dev/version + a 1s client poll = live-reload (open tab never runs stale
  renderer code; reloads on my edits AND server restarts).
- no-cache on the dev server; an on-screen error banner + crash-proof render so a
  silent throw can't masquerade as "nothing is changing".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The engine already models Dark/Light as the two poles of one signed axis
(tone = (light - dark)/4, equal = neutral), so the simulator now exposes a single
bipolar Mood dial (-4 dark .. 0 neutral .. +4 light) that maps onto dark/light in
controls(). Removes the Calibration section entirely: mood_gain and overlay_gain
were always-locked 1.0 dev knobs (full dial = full effect), so they bake in as the
DEFAULT_CALIBRATION constants and the sim sends no calibration. Experience panel is
now just Left, Right, Mood.

Engine/tests unchanged (DEFAULT_CALIBRATION already carries the 1.0 constants).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
benstull merged commit 23306fa140 into main 2026-06-23 18:27:21 +00:00
Sign in to join this conversation.