docs: close out Phase L L3 — archive to COMPLETED, mark landed in design-language doc

L3 (VST editor + embed-strip restyle) is on dev. Append its COMPLETED entry
and flip visual-design-language.md §5.3/5.4 from GATED to landed / Phase L
complete. PLAN.md + CONTEXT.md L3 edits already landed via the S-VIEW commit.
This commit is contained in:
2026-07-27 12:50:00 -04:00
parent 13b23801a0
commit 85eac37912
2 changed files with 91 additions and 67 deletions
+51
View File
@@ -1484,6 +1484,57 @@ placement behavior; the "capture ≠ placement" principle is untouched.
--- ---
## L3 — VST editor + embed-strip restyle
**Goal:** Bring the ReaSampler 9000 VST editor (`IPlugView` LICE surface,
`reasampler_editor.cpp`) and the S6 embed strip (`reasampler_embed.cpp`) up to the
settled-and-revised **B + three-accent pastel** look via the L1 kit: kit cached-font
`text()` (the kit's current face — no font change), kit component draws, the
**REAPER-grey neutrals** (`bg/base #2b2b2b` / `bg/panel #333333` / `bg/cell #3a3a3a`)
with the **three pastel accents** (primary lime / secondary teal / tertiary purple), the
**pastel spectral keyboard strip + zone bars** (active zone lifts to `accent/primary` +
a static glow) as the signature surface, and hover/pressed/drag interaction states
throughout. Merged as `c53683e`. **L3 was the last remaining Phase L point — Phase L
is now complete (L1, L2, L3, L4, L5, L6, L7 all landed).**
**Verify (in DAW):** the VST editor + embed strip render in the settled B + three-accent
pastel language through the L1 kit — kit AA cached-font text, gradient/rounded kit
components, the pastel spectral keyboard strip, working hover/pressed/drag; the VST3
class UID is unchanged (a visual refresh is not a compat event).
- [x] Route the VST editor's + embed strip's text through the kit's cached-font
`text()`; retire their raw GDI `DrawTextA` path (retired in both shells).
- [x] 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. One kit, one look; two palettes collapsed to one.
- [x] Restyle the editor + embed components through the kit (capture-first browser
search/tabs/thumbnails, channel toggles, ADSR + pitch sliders, Varispeed/Preserve mode
toggles, zone bars, list rows, waveform + start/loop markers, segmented controls) in
the B (Neon Console) palette with hover/pressed/drag states throughout.
- [x] 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 lifts to
`accent/primary` + a static glow (no animation); waveform + loop/start markers drawn
through `drawWaveform` + `warn`/accent marker roles; VST3 class UID unchanged.
**Notes/decisions:**
- **Full restyle, not a born-in-kit no-op.** The Phase S surfaces (`reasampler_editor.cpp`
+ `reasampler_embed.cpp`) arrived on dev drawing flat `LICE_FillRect` blocks + raw GDI
`DrawTextA`, off a local pre-L1 forest-green palette (`kColBackground` etc.) — the
coordination contract's "born in the kit" branch did not occur. L3 performed the full
restyle and reconciled the two palettes into one.
- **Shell-side only.** All `src/vst/` UI geometry modules (`editor_geometry`,
`keyboard_strip`, `waveform_view`, `capture_browser`, `param_slider`, `browser_scroll`,
`embed_strip`) are pure geometry/hit-test — zero LICE, zero draw. L3 touched only the
two draw shells; no geometry rework was needed.
- **Beta title band — textual-only distinction (Daniel, 2026-07-27).** The S18 beta
channel title band gets no distinct visual accent; L3 restyles it in the standard B
pastel palette and the beta-vs-stable distinction stays purely textual (the
channel-derived plugin name via `app_version`, as before). No channel-specific accent
color. Closes the one open fork from the L3 readiness review.
- **VST3 class UID unchanged.** A visual refresh is not a compat event; RT/`process`
path untouched; pure geometry modules remained pure throughout.
---
# Phase S — MIDI-playback instrument (native VST3 sampler; a second build artifact) # Phase S — MIDI-playback instrument (native VST3 sampler; a second build artifact)
> **Landed on dev (merged 2026-07-27); DAW verification pending Daniel's smoke test.** > **Landed on dev (merged 2026-07-27); DAW verification pending Daniel's smoke test.**
+40 -67
View File
@@ -582,86 +582,59 @@ draw it.
**Sequence L2 AFTER M11 merges to dev** — L2 must inventory M11's *actual* landed buttons, **Sequence L2 AFTER M11 merges to dev** — L2 must inventory M11's *actual* landed buttons,
not a forecast of them. If L2 starts before M11 lands, it designs against a moving target. not a forecast of them. If L2 starts before M11 lands, it designs against a moving target.
### 5.3 `L3` — VST editor + embed-strip restyle (GATED on Phase S landing on dev) ### 5.3 `L3` — VST editor + embed-strip restyle [LANDED]
The ReaSampler 9000 VST editor (`IPlugView` LICE surface, `reasampler_editor.cpp`) and the **L3 has landed (merged `c53683e`, 2026-07-27). Phase L is now complete (L1L7 all
S6 embed strip (`reasampler_embed.cpp`) get the full kit treatment: kit cached-font text landed).** The ReaSampler 9000 VST editor (`IPlugView` LICE surface,
(§3.1 — the kit's current face, no bundled font), kit component draws, the **B palette with `reasampler_editor.cpp`) and the S6 embed strip (`reasampler_embed.cpp`) received the full
the three-accent pastel system** (primary lime / secondary teal / tertiary purple), the kit treatment: kit cached-font text (§3.1 — the kit's current face, no bundled font), kit
**pastel spectral keyboard strip** as the signature surface, hover/pressed/drag states component draws, the **B palette with the three-accent pastel system** (primary lime /
everywhere. The editor's landed component set (verified on the phase-s worktree) is broader secondary teal / tertiary purple), the **pastel spectral keyboard strip + zone bars** (active
than an early "editor + keyboard strip" sketch: a **capture-first browser** (search box + zone lifts to `accent/primary` + a static glow) as the signature surface, hover/pressed/drag
tabs + sample thumbnails, S10), **channel mono/stereo toggles** (S7), a **waveform pane with states throughout. The full editor component set was restyled: the **capture-first browser**
start + loop markers** (S11), the **keyboard strip + zone bars** (S10/S10-Z), and **ADSR + (search box + tabs + sample thumbnails, S10), **channel mono/stereo toggles** (S7), **waveform
pitch sliders + Trigger/Gate & Varispeed/Preserve mode toggles** (S12/S15/S16) — every one of pane with start + loop markers** (S11), **keyboard strip + zone bars** (S10/S10-Z), and
these is on the restyle surface. **ADSR + pitch sliders + Trigger/Gate & Varispeed/Preserve mode toggles** (S12/S15/S16).
**L3 is explicitly GATED: these surfaces do not exist on dev yet.** The VST editor, the **What was confirmed at build:**
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 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.
**Landed-reality check (product-designer, 2026-07-27 — read-only against the phase-s - **All Phase S UI draw was in exactly two shells**`reasampler_editor.cpp` (the
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 `IPlugView` editor) and `reasampler_embed.cpp` (the S6 embed strip). Every other
`src/vst/` UI file (`editor_geometry`, `keyboard_strip`, `waveform_view`, `src/vst/` UI file (`editor_geometry`, `keyboard_strip`, `waveform_view`,
`capture_browser`, `param_slider`, `browser_scroll`, `embed_strip`) is a **pure `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 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 held. L3 was therefore a **shell-side restyle of two files**; no geometry rework required.
rework, and the pure hit-test coverage is already there to lean on. - **Full restyle, not a born-in-kit no-op.** The Phase S surfaces arrived on dev drawing flat
- **Both shells still draw at the floor.** They fill flat `LICE_FillRect` rectangles and `LICE_FillRect` blocks + raw GDI `DrawTextA`, off a local pre-L1 forest-green palette
pipe text through raw GDI `DrawTextA` — the exact "temple os" path §0/§1.1 describe. They (`kColBackground` etc.) — the coordination contract's "born in the kit" branch did not
do **not** include `theme.h` / `draw_kit.h`, do **not** call any kit `draw*`/`text()`, and occur. L3 performed the full restyle.
use **no** `LICE_CachedFont`. So the coordination contract's "born in the kit" branch did - **Two palettes collapsed to one.** The editor shell's local `kColBackground`/`kColCardBg`/
**not** happen for the VST surfaces — L3 lands as a **full restyle**, and all three build `kColThumb`/… forest-green-on-near-black constants block (the **pre-L1 palette** this
points below are confirmed live (none is a no-op). doc's §2 set out to replace) was retired; all surfaces now draw through the L1 `theme`
- **There is a second palette to reconcile.** The editor shell carries its own local roles. One kit, one look.
constants block — `kColBackground = RGB(28,28,30)`, accent `kColThumb/kColWaveform = - **Beta title band — textual-only distinction (Daniel, 2026-07-27).** The S18 beta channel
RGB(120,200,160)`, `kColTitleBg = RGB(20,20,22)`, etc. — the **pre-L1 forest-green-on-near- title band gets no distinct visual accent; L3 restyles it in the standard B pastel palette
black palette** this doc's §2 set out to replace, mirrored (partially) in the embed shell. and the beta-vs-stable distinction stays purely textual (the channel-derived plugin name
That is a live divergence from the landed `theme` roles. Collapsing these two palettes into via `app_version`, as before). No channel-specific accent color.
the one `theme` kit is the concrete "one kit, one look" reconcile L3 performs (§5.3 build - **VST3 class UID unchanged.** A visual refresh is not a compat event; RT/`process` path
point 2, PLAN.md §L3). untouched; pure geometry modules remained pure throughout.
- **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 L4L7
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.
**Settled: the beta channel title band gets no distinct visual accent (Daniel, **Coordination contract (resolved).** Phase S's S10S13 built their interaction UX with the
2026-07-27).** L3 restyles the title band in the standard B pastel palette, the same as the current drawing and adopted the L1 kit via L3 (the "L3 restyles them" branch). There is now
stable channel. The beta-vs-stable distinction stays **purely textual** — the channel-derived one kit and one look across both artifacts.
plugin name (as today, via `app_version`) is the only signal; there is **no** channel-specific
accent color. Reasoning: one look across channels keeps the kit palette single-sourced and
avoids a per-channel branch in the restyle; the textual name already disambiguates. This
closes the one open fork the L3 readiness review surfaced (see PLAN.md §Phase L, L3
must-verify).
**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. **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 ### 5.4 Sequencing summary
``` ```
L1 (shared kit) ──► L2 (dock-panel layout redesign, extension-side; AFTER M11 merges) L1 (shared kit) ──► L2 (dock-panel layout redesign, extension-side) [LANDED]
└─────────► L3 (VST editor + embed-strip restyle; GATED on Phase S landing on dev) └─────────► L3 (VST editor + embed-strip restyle) [LANDED]
Phase S (separate team, ungated): S7…S13 build with current drawing, adopt L1 kit when it lands. Phase L is complete — L1, L2, L3, L4, L5, L6, and L7 have all landed.
``` ```
L1 is the foundation both L2 and L3 consume. L2 is extension-side and lands after M11. L3 L1 was the foundation both L2 and L3 consumed. L2 was extension-side and landed after M11.
is gated on Phase S reaching dev. Phase S feature work proceeds in parallel, ungated. L3 was gated on Phase S reaching dev Phase S merged 2026-07-27 and L3 followed
immediately. **Phase L is complete.**
--- ---
@@ -762,5 +735,5 @@ re-skin).**
font-fallback concern. The kit keeps its current cached-font face (no bundled font — DS-2 font-fallback concern. The kit keeps its current cached-font face (no bundled font — DS-2
declined the font upgrade), so §3.1 introduces no new redistribution or cross-platform declined the font upgrade), so §3.1 introduces no new redistribution or cross-platform
font obligation. font obligation.
- **Phase S is not gated on Phase L** — S7S13 proceed in parallel; they adopt the kit - **Phase S is not gated on Phase L** — S7S13 proceeded in parallel; they adopted the
when it lands. Phase L (L1/L2) is the live work on dev; L3 waits for Phase S to reach dev. kit via L3 when it landed. Phase L is complete (L1L7 all landed).