feat(sim+engine): lock alteration calibration + fix psychedelic dark grade

Tuning the look by eye in the simulator (design §8) surfaced that the dark
mood pole rendered a full-frame hue-rotate(-200deg) — rock orange, trees
purple: the disorienting look rejected in session 0008, not the peaceful POC
dark_frame. Replace it with darken + slight desaturate on the video filter
plus a multiply-blended deep-blue wash (#tint, below the SVG HUD so the
overlay stays legible). Dark now reads cool/somber with natural greens, like
the approved POC look; light/left/right unchanged and confirmed peaceful.

With full tilt now tasteful on every axis, LOCK DEFAULT_CALIBRATION to unity
gains + linear variant map as a deliberate by-eye choice (not placeholders),
closing the open session-0006 knob->strength decision: knobs run 0=off..4=max,
equal Dark/Light = identity, the 5 notches map 1:1 to the 5 discrete Right
bakes. Guard the locked constants with test_default_calibration_is_locked.

Resolves design §8 open questions (calibration curve shape; grade-vs-overlay
ordering) and records the dark-grade fix. Full suite 193 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ben Stull
2026-06-07 23:19:53 -07:00
parent 7d2a3064ad
commit 9c347d580f
6 changed files with 62 additions and 12 deletions
@@ -273,12 +273,26 @@ calibration. The re-bake is a later offline-pipeline task.
## 8. Open questions (for the plan, not blockers)
- **Calibration curve shape** — the panel exposes the params; the final
`DEFAULT_CALIBRATION` values are settled by eye, not fixed here.
- **Grade vs. Left overlay interaction** — with a runtime overlay the grade need *not*
tint the HUD (unlike the baked path); decide in the renderer whether the Left overlay
sits above or below the grade. Default: **above** (HUD stays legible regardless of
mood). Revisit by eye.
- **Calibration curve shape** — **RESOLVED (session 0010, by eye).**
`DEFAULT_CALIBRATION` is **locked** to unity gains + a linear variant map
(`mood_gain=1.0`, `overlay_gain=1.0`, `right_variant_map=(0,1,2,3,4)`), as a
deliberate choice: with the dark-grade fix below, full knob is peaceful on
every axis (POC + sim), so full tilt = full look and the 5 notches map 1:1 to
the 5 discrete Right bakes. This also closes the **session-0006** convention
question — knobs run 0=off..4=max, equal Dark/Light = identity; no
"centered at 2 = no push." Guarded by `test_default_calibration_is_locked`.
- **Grade vs. Left overlay interaction** — **RESOLVED: overlay above the grade.**
The simulator composites the Left HUD (SVG) above the mood grade and the cool
tint, so the HUD stays legible regardless of mood. The Pi renderer should do
the same.
- **Dark-pole grade look** — **FIXED (session 0010).** The first by-eye pass found
the sim's dark grade used a full-frame `hue-rotate(-200deg)`, which turned the
rock orange and trees purple — the disorienting look rejected in 0008, not the
peaceful POC `dark_frame`. Replaced with darken + slight desaturate on the video
filter plus a `multiply`-blended deep-blue wash (`#tint`) that lifts shadows
toward blue while preserving natural greens. The Pi renderer (later slice) will
do proper grading; this matches the approved POC dark look closely enough to tune
by eye in the sim.
- **Crossfade timing in the browser** — a simple opacity crossfade is enough for tuning;
the real timing engine is a later slice.
- **Placeholder fidelity** — how close the strength-13 placeholders should look to real