From a434ef47f834471122bdbf74bf0e67b25fe2d145 Mon Sep 17 00:00:00 2001 From: daniel-c-harvey Date: Mon, 27 Jul 2026 03:42:24 -0400 Subject: [PATCH] docs(plan): ground L3 readiness against landed Phase S surfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both VST draw shells still draw flat off a local pre-L1 palette — L3 restyle confirmed live, not a born-in-kit no-op. Name the concrete gate files, add the palette-reconcile point, enumerate the landed editor set. --- PLAN.md | 83 +++++++++++++++++++------- docs/product/visual-design-language.md | 67 ++++++++++++++++----- 2 files changed, 113 insertions(+), 37 deletions(-) diff --git a/PLAN.md b/PLAN.md index 65dbea1..bd0421f 100644 --- a/PLAN.md +++ b/PLAN.md @@ -350,31 +350,57 @@ components, the pastel spectral keyboard strip, working hover/pressed/drag; the UID is unchanged (a visual refresh is not a compat event). **Depends on:** L1 (the kit) **AND — GATE — Phase S landing on dev.** The VST editor, embed strip, and keyboard strip live in Phase S, which is **not on dev yet** (it exists on the -phase-s worktree). **L3 cannot be built on dev until Phase S's editor/embed surfaces -(≈ S1 / S6 / S10) merge to dev. The Phase L team must NOT chase these files on dev — they -are not there.** Until then L3 is a planned, blocked point; L1 and L2 are the live Phase L -work. +phase-s worktree). **L3 cannot be built on dev until Phase S's drawing shells +(`src/vst/reasampler_editor.cpp` + `reasampler_embed.cpp`) merge to dev. The Phase L team +must NOT chase these files on dev — they are not there.** Until then L3 is a planned, +blocked point; L1 and L2 are the live Phase L work. -> **Coordination contract with Phase S (load-bearing).** Phase S's S10–S13 build their -> interaction UX with the **current** drawing and **adopt the L1 kit when it is available — -> they are NOT gated on Phase L.** Whichever lands first (the L1 kit or the S10–S13 UX), -> the kit is the **one source of drawing**: if S10–S13 reach dev before L1, they draw in -> the current language and L3 restyles them; if L1 lands first, they are born in the kit. -> Either way there is one kit and one look, and L3 is the point that completes the VST/embed -> adoption and applies the settled B+spectral treatment. +> **Coordination contract with Phase S (load-bearing).** Phase S's editor/embed UX +> (S10–S13, S15–S18) build their interaction UX with the **current** drawing and **adopt the +> L1 kit when it is available — they are NOT gated on Phase L.** Whichever lands first (the +> L1 kit or the Phase S UX), the kit is the **one source of drawing**: if the Phase S +> surfaces reach dev before L1, they draw in the current language and L3 restyles them; if +> L1 lands first, they are born in the kit. **Reality check (product-designer, 2026-07-27, +> read-only against the phase-s worktree): the Phase S surfaces did NOT adopt the kit — +> `reasampler_editor.cpp` and `reasampler_embed.cpp` still draw flat `LICE_FillRect` blocks +> + raw GDI `DrawTextA`, off a local pre-L1 forest-green palette (`kColBackground` etc.), +> not `theme`/`draw_kit`.** So L3 lands as a **full restyle**, not a born-in-kit no-op — all +> three plan points below are live and confirmed still-needed. Either way there is one kit +> and one look, and L3 is the point that completes the VST/embed adoption and applies the +> settled B+spectral treatment. +> +> **Landed-scope note (product-designer, 2026-07-27).** All Phase S drawing is centralized +> in **exactly two shells** — `reasampler_editor.cpp` (the `IPlugView` editor) and +> `reasampler_embed.cpp` (the S6 embed strip). Every other `src/vst/` UI file +> (`editor_geometry`, `keyboard_strip`, `waveform_view`, `capture_browser`, `param_slider`, +> `browser_scroll`, `embed_strip`) is a **pure geometry/hit-test module — zero LICE, zero +> draw** (the house discipline held on the branch). So L3 touches two draw shells, but their +> rendered component set is broader than the original plan named: the editor draws a +> **capture-first browser** (search + tabs + thumbnails, S10), **channel toggles** (S7), +> **waveform + start/loop markers** (S11), the **keyboard strip + zone bars** (S10/S10-Z), +> and **ADSR / pitch sliders + mode toggles** (S12/S15/S16). Every one of these is on the +> restyle surface — enumerated in the points below. - [ ] Route the VST editor's + embed strip's text through the kit's cached-font `text()` - (the kit's current face — §3.1, no font change); retire their raw GDI `DrawTextA` path. - (Gated — Phase S surfaces must be on dev.) -- [ ] Restyle the editor + embed components through the kit (buttons, sliders/ADSR, list - rows, waveform, segmented controls) in the B (Neon Console) palette — **REAPER-grey - neutrals** (`bg/base` `#2b2b2b` / `bg/panel` `#333333` / `bg/cell` `#3a3a3a`) with the - **three pastel accents** (primary lime = live layer; secondary teal / tertiary purple = - categorical); add hover/pressed/drag states. (Gated.) -- [ ] Apply **Direction C's pastel spectral treatment to the keyboard strip** (hue-mapped - zones as a pastel sweep anchored on the three accents, glow-on-active as a static drawn - state — never a pulse, per the speed constraint) as the signature surface; VST3 class UID - unchanged. (Gated.) + (the kit's current face — §3.1, no font change); retire their raw GDI `DrawTextA` path + (present in both shells today). (Gated — Phase S surfaces must be on dev.) +- [ ] Retire the shells' **local pre-L1 palette** — the `kColBackground`/`kColCardBg`/ + `kColThumb`/… forest-green-on-charcoal constants block in `reasampler_editor.cpp` (and the + mirrored constants in `reasampler_embed.cpp`) — and draw every surface through the L1 + `theme` roles instead. **This is the coordination-contract reconcile: today there are two + palettes (the landed `theme` kit + this local constants block); L3 collapses them to the + one kit.** (Gated.) +- [ ] Restyle the editor + embed components through the kit (browser search/tabs/thumbnails, + channel toggles, ADSR + pitch sliders, mode toggles, zone bars, list rows, waveform, + segmented controls) in the B (Neon Console) palette — **REAPER-grey neutrals** (`bg/base` + `#2b2b2b` / `bg/panel` `#333333` / `bg/cell` `#3a3a3a`) with the **three pastel accents** + (primary lime = live layer; secondary teal / tertiary purple = categorical); add + hover/pressed/drag states. (Gated.) +- [ ] Apply **Direction C's pastel spectral treatment to the keyboard strip + zone bars** + (hue-mapped zones as a pastel sweep anchored on the three accents, active zone lifting to + `accent/primary` + a static glow — never a pulse, per the speed constraint) as the + signature surface; also carry the waveform + loop/start markers onto the kit's + `drawWaveform` + `warn`/accent marker roles; VST3 class UID unchanged. (Gated.) ## Phase L — sequencing ``` @@ -416,6 +442,19 @@ feature work runs in parallel, ungated by Phase L. cursors chosen for drop-result cues (Reorder→IDC_SIZEALL, Move→IDC_HAND, Copy→IDC_UPARROW, Replace→IDC_SIZEWE); existing pool-privilege guard reused as-is for Alt-replace. Gap navigation in the grid = skip gaps (arrow keys skip empty slots). See `COMPLETED.md` §L7. +- **L3 restyle surface (L3)** — **PRE-CONFIRMED read-only against the phase-s worktree + (product-designer, 2026-07-27); re-confirm against dev once Phase S merges.** (1) Both draw + shells (`reasampler_editor.cpp`, `reasampler_embed.cpp`) still draw flat — `LICE_FillRect` + + raw GDI `DrawTextA`, no `theme`/`draw_kit`/`LICE_CachedFont` include — so all three L3 points + are live (no born-in-kit no-op). (2) There is a **second palette** to reconcile: a local + `kCol*` forest-green-on-charcoal constants block in the editor shell, divergent from the + landed `theme` roles. (3) Draw is centralized in those two shells only; every other + `src/vst/` UI file is pure geometry (kit adoption is a shell-side change, no geometry + rework). (4) The phase-s branch carries an **older L1 kit** (its `action_bar` predates dev's + L4–L7 `theme` palette revisions) — after Phase S merges, L3 draws against dev's current + `theme`/`draw_kit`, so re-confirm the palette roles L3 consumes are dev's, not the branch's + stale copy. **One genuine open question for Daniel** (see the assessment) — otherwise the + settled DS-1/2/3 spec forces the rest. --- diff --git a/docs/product/visual-design-language.md b/docs/product/visual-design-language.md index f31f730..b69f488 100644 --- a/docs/product/visual-design-language.md +++ b/docs/product/visual-design-language.md @@ -584,26 +584,63 @@ not a forecast of them. If L2 starts before M11 lands, it designs against a movi ### 5.3 `L3` — VST editor + embed-strip restyle (GATED on Phase S landing on dev) -The ReaSampler 9000 VST editor (`IPlugView` LICE surface) and the S6 embed strip get the -full kit treatment: kit cached-font text (§3.1 — the kit's current face, no bundled font), -kit component draws, the **B palette with the three-accent pastel system** -(primary lime / secondary teal / tertiary purple), the **pastel spectral keyboard strip** -as the signature surface, hover/pressed/drag states everywhere. +The ReaSampler 9000 VST editor (`IPlugView` LICE surface, `reasampler_editor.cpp`) and the +S6 embed strip (`reasampler_embed.cpp`) get the full kit treatment: kit cached-font text +(§3.1 — the kit's current face, no bundled font), kit component draws, the **B palette with +the three-accent pastel system** (primary lime / secondary teal / tertiary purple), the +**pastel spectral keyboard strip** as the signature surface, hover/pressed/drag states +everywhere. The editor's landed component set (verified on the phase-s worktree) is broader +than an early "editor + keyboard strip" sketch: a **capture-first browser** (search box + +tabs + sample thumbnails, S10), **channel mono/stereo toggles** (S7), a **waveform pane with +start + loop markers** (S11), the **keyboard strip + zone bars** (S10/S10-Z), and **ADSR + +pitch sliders + Trigger/Gate & Varispeed/Preserve mode toggles** (S12/S15/S16) — every one of +these is on the restyle surface. **L3 is explicitly GATED: these surfaces do not exist on dev yet.** The VST editor, the embed strip, and the keyboard strip live in Phase S, which has landed on the phase-s -worktree but **not on dev**. L3 cannot be built on dev until Phase S (at least the editor -+ embed surfaces, S1/S6/S10) lands on dev. **The Phase L team must not chase these files -on dev** — the gate is stated so they don't. Until Phase S merges to dev, L3 is a planned, -blocked point; L1 and L2 are the live Phase L work. +worktree but **not on dev**. L3 cannot be built on dev until the two Phase S drawing shells +(`src/vst/reasampler_editor.cpp` + `reasampler_embed.cpp`) land on dev. **The Phase L team +must not chase these files on dev** — the gate is stated so they don't. Until Phase S merges +to dev, L3 is a planned, blocked point; L1 and L2 are the live Phase L work. -**Coordination contract (stated once, load-bearing):** Phase S's S10–S13 build their -interaction UX with the *current* drawing and **adopt the L1 kit when it is available — -they are not gated on Phase L.** Whichever lands first (L1 kit or S10–S13 UX), the kit is +**Landed-reality check (product-designer, 2026-07-27 — read-only against the phase-s +worktree).** Verified against the actual landed Phase S surfaces so L3's scope is grounded, +not forecast: + +- **All Phase S UI draw is in exactly two shells** — `reasampler_editor.cpp` (the + `IPlugView` editor) and `reasampler_embed.cpp` (the S6 embed strip). Every other + `src/vst/` UI file (`editor_geometry`, `keyboard_strip`, `waveform_view`, + `capture_browser`, `param_slider`, `browser_scroll`, `embed_strip`) is a **pure + geometry/hit-test module with zero LICE and zero draw** — the house pure/shell discipline + held on the branch. L3 is therefore a **shell-side restyle of two files**; no geometry + rework, and the pure hit-test coverage is already there to lean on. +- **Both shells still draw at the floor.** They fill flat `LICE_FillRect` rectangles and + pipe text through raw GDI `DrawTextA` — the exact "temple os" path §0/§1.1 describe. They + do **not** include `theme.h` / `draw_kit.h`, do **not** call any kit `draw*`/`text()`, and + use **no** `LICE_CachedFont`. So the coordination contract's "born in the kit" branch did + **not** happen for the VST surfaces — L3 lands as a **full restyle**, and all three build + points below are confirmed live (none is a no-op). +- **There is a second palette to reconcile.** The editor shell carries its own local + constants block — `kColBackground = RGB(28,28,30)`, accent `kColThumb/kColWaveform = + RGB(120,200,160)`, `kColTitleBg = RGB(20,20,22)`, etc. — the **pre-L1 forest-green-on-near- + black palette** this doc's §2 set out to replace, mirrored (partially) in the embed shell. + That is a live divergence from the landed `theme` roles. Collapsing these two palettes into + the one `theme` kit is the concrete "one kit, one look" reconcile L3 performs (§5.3 build + point 2, PLAN.md §L3). +- **The Phase S branch carries an *older* L1 kit.** The kit modules (`theme`, `draw_kit`, + `component_geometry`) are present on the branch, but its `theme` predates dev's L4–L7 + palette revisions (the branch has only L1+L2). After Phase S merges to dev, L3 draws + against **dev's** current `theme`/`draw_kit`, so the restyle consumes dev's pastel-on-grey + roles, not the branch's stale copy — a merge-hygiene note, not a scope change. + +**Coordination contract (stated once, load-bearing).** Phase S's editor/embed UX build +their interaction UX with the *current* drawing and **adopt the L1 kit when it is available — +they are not gated on Phase L.** Whichever lands first (L1 kit or the Phase S UX), the kit is the **one source of drawing**; when both exist, the Phase S surfaces draw through it, and -L3 is the point that completes that adoption + applies the settled B+spectral look. If -S10–S13 land on dev before L1, they draw in the current language and L3 restyles them; if -L1 lands first, S10–S13 are born in the kit. Either way there is one kit, one look. +L3 is the point that completes that adoption + applies the settled B+spectral look. **In the +event that actually occurred, the Phase S surfaces reached the worktree with the current +(flat, local-palette) drawing and did not adopt the kit — so L3 restyles them.** Either way +there is one kit, one look. ### 5.4 Sequencing summary