From 937461e3ba2bc764616ab739d305bec012a6cbc4 Mon Sep 17 00:00:00 2001 From: BenStullsBets Date: Sat, 27 Jun 2026 15:35:23 -0700 Subject: [PATCH 01/14] docs(plan): scrub-driven altitude transitions implementation plan Plan for the approved design at docs/superpowers/specs/2026-06-27-scrub-driven-altitude-transitions-design.md. Two phases: (1) scrub interaction against current morphs, (2) all-intra re-bake. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...06-27-scrub-driven-altitude-transitions.md | 803 ++++++++++++++++++ 1 file changed, 803 insertions(+) create mode 100644 docs/superpowers/plans/2026-06-27-scrub-driven-altitude-transitions.md diff --git a/docs/superpowers/plans/2026-06-27-scrub-driven-altitude-transitions.md b/docs/superpowers/plans/2026-06-27-scrub-driven-altitude-transitions.md new file mode 100644 index 0000000..0cef39d --- /dev/null +++ b/docs/superpowers/plans/2026-06-27-scrub-driven-altitude-transitions.md @@ -0,0 +1,803 @@ +# Scrub-driven Altitude Transitions Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Make the Altitude knob position *continuously* drive the scale transition — dragging the dial scrubs the morph video's `currentTime` and crossfades the two adjacent scale soundtracks by knob angle, holding wherever the knob stops, fully reversible. + +**Architecture:** Introduce a continuous float **position** `pos` (integers = altitudes/detents, fractions = mid-morph blend). A small pure module (`scrub.js`) owns the math (position→segment, frac→currentTime, audio gains, integer-crossing detection); `app.js` becomes the DOM/event glue that drives `pos` from the dial, seeks the morph `