docs: detach design-system (S0-DS/S14) to Phase L; leave pointers

Remove S0-DS and S14 from Phase S PLAN/CONTEXT (moved to Phase L on dev),
restore S10's Depends-on without the kit gate; S10-S13 adopt the Phase L
kit when it lands rather than being gated on it.
This commit is contained in:
2026-07-26 19:36:10 -04:00
parent 3d6c0ab66a
commit 5de2183ce3
3 changed files with 69 additions and 180 deletions
+28 -87
View File
@@ -1392,82 +1392,26 @@ without re-opening each editor. The missing trigger: a **bank-generation counter
This seam serves **both** S8 ingest and M10 recapture; the writer side is extension-only and
independent of S8, so it can land alongside either.
## Design-system foundation (S0-DS + S14; "the VST is dogshit / temple os", 2026-07-26)
## Design-system foundation — moved to Phase L (2026-07-26)
**The diagnosis, from the vendored source, not lore.** Daniel DAW-tested the instrument and
called the look "temple os … the VST is dogshit," and asked whether Cockos ships a toolkit for
this. It does, and it's already vendored — the problem is the current editor draws at the
**floor** of it. The S1S6 editor renders flat opaque `LICE_FillRect` blocks and pipes text
through raw GDI **`DrawTextA`** (reasampler_editor.cpp) — no gradients, no anti-aliasing, no
rounded corners, no hover, aliased system text. That is the entire "temple os" look. The
toolkit ceiling is not the constraint.
**The toolkit (verified against `vendor/WDL`).** Two layers, both in hand:
- **LICE** (`vendor/WDL/WDL/lice/`) — Cockos's 2D rasterizer, the same one REAPER's themed UI
and SWS draw with. Verified surface beyond the flat `LICE_FillRect` the editor limits itself
to: `LICE_GradRect` (gradient fills), `LICE_Line`/`LICE_FLine`/`LICE_ThickFLine` (AA lines,
`aa=true` default), `LICE_RoundRect` (AA rounded rects), `LICE_Circle`/`LICE_FillCircle` (AA),
`LICE_DrawCBezier` (AA curves — envelope draw), `LICE_FillTriangle`/`FillTrapezoid`/
`FillConvexPolygon`, per-primitive `alpha`+blend `mode`, and a real font engine
`LICE_CachedFont`/`LICE_IFont` (`lice_text.h`: AA glyph cache from an `HFONT`, `SetTextColor`,
`DrawText`, and shadow/outline/glow FX flags). **This is a sufficient modern-dark-UI toolkit
with no new dependency.**
- **WDL VirtualWnd (vwnd)** (`vendor/WDL/WDL/wingui/virtwnd*.{h,cpp}`) — the retained-mode
LICE-drawn *widget* layer REAPER/SWS use: `virtwnd-iconbutton` (buttons), `virtwnd-slider`
(sliders + `vwnd_slider_drawknobstack` knobs), `virtwnd-listbox` (scroll lists),
`virtwnd-skin` (image skins), `WDL_STYLE_*` gradient/knob hooks. **Fork DS-1 settled A:
crib vwnd's drawing craft (read `virtwnd-slider.cpp` as the reference for a good LICE
slider/knob), do NOT adopt its object model** — its controls own their hit-test internally,
which would move geometry back into untestable shell code and undercut the pure/shell split
the codebase relies on. (Narrow build-time exception: vwnd's *listbox* for the S12 scroll
list only.) **iPlug/IPlug (VST2-era, dated — reject), iPlug2/JUCE (a framework shift that
re-opens settled D-A to solve a non-ceiling problem — reject), VSTGUI (the D-A fallback rung,
now moot since S1's LICE bridge landed).** Full toolkit assessment + palette + the three
visual directions + all forks: `docs/product/visual-design-language.md`.
**S0-DS — shared LICE drawing kit (BEFORE S10).** One shared kit — palette + type + component
draw — both the VST editor and the bank panel draw through, so "scope it for the whole system"
is one source, not two divergent restyles. **Sequenced before S10** so the keyboard-strip
editor is built in the new language, not restyled after. Honors the house split: the *geometry*
(a role→color `theme` module — direction selectable via one constants block — and component
layout/hit-test helpers) is **pure and CTest-covered** (mirror of `mode_switch`/`embed_strip`/
`editor_geometry`); the *draw* (LICE `fillSurface` with micro-gradient + inner highlight,
`drawButton`/`drawSlider`/`drawListRow`/`drawWaveform`/segment draw, and shared `LICE_CachedFont`
text) is shell. The kit defines the **interaction state model** the current editor lacks
entirely — rest / **hover** / active / pressed / dragging / focus / disabled — and the
double-buffered zero-jank draw discipline (draw to `LICE_SysBitmap`, single `BitBlt`) already in
both artifacts is preserved.
**Palette + "punch" rule (Daniel's standing taste).** Dark, modern, **visual punch over
conservative contrast**: for each text-on-surface pair, take the *most* vibrant accent that
still clears its WCAG floor (AA 4.5:1 body / 3:1 large + state indicators) — the floor
approached from the vibrant side, never a retreat to safe gray. Palette is defined by **role**
(base/panel/cell/text-primary/text-dim/accent/accent-hot/warn), not hardcoded hue, so the visual
direction (fork DS-2) is a single constants block. Surfaces gain a micro-gradient + 1px inner
highlight/shadow (the vwnd trick) instead of flat fills; text moves to AA cached fonts (the
single biggest "temple os → modern" lever).
**"Speed is the selling point" — read as a design constraint, not a tagline.** The UI must
*feel* instant: sub-frame hover/press/drag feedback repainted immediately on the input message
(instant acknowledgment *is* the perception of speed); zero-jank via the preserved double-buffer;
region-scoped `InvalidateRect` during a drag (build-time residual). **No decorative animation** —
no tweens/fades/pulses; the only permitted motion is a level/meter readout following the audio
directly (as the embed strip already does). Animation that costs a frame of latency violates the
speed promise. The "fast" feeling is typography + hover + no-jank, not motion.
**S14 — dock-panel refresh (extension-side, lighter).** The panel is "not terrible" — this is
kit-application, not redesign (fork DS-3 settled light): route its text through the shared
cached font (retire GDI text), re-draw buttons/tab-strip/segmented-switch/toggles through the
kit, adopt palette roles + micro-gradient surfaces, add hover to tabs/rows. **Structure
untouched** — the vertical-split / tab / grid layout and the pure `bank_grid`/`tab_strip`/
`mode_switch` hit-test sources of truth stay exactly as landed; only draw upgrades.
Extension-side, independent of the VST S10S13 chain, parallelizable after the kit.
**Sequencing:** `S0-DS` gates both S10 and S14. The prior "S10 leads the UX overhaul" becomes
"**S0-DS leads, then S10**" — the kit is a small foundation, not a detour. Constraints all
hold: **LICE/SWELL only** (D-A reinforced, not re-opened), **pure geometry modules** for all
layout/hit-test, RT discipline untouched (draw-thread only), instrument stays a read-only bank
consumer (a visual refresh is not a data-ownership or compat event — VST3 class UID unchanged).
> **The visual design language moved out of Phase S into its own Phase L.** The
> design-system content that stood here (the toolkit assessment, the shared LICE drawing
> kit **S0-DS**, and the dock-panel refresh **S14**) has been lifted into **Phase L**
> (Look-and-feel) on `dev`, taken up by a parallel team so Phase S feature work proceeds
> ungated. S0-DS is now **Phase L point L1** (the shared kit); S14 is now **L2** — and,
> per Daniel's DS-3 call, expanded from a light re-skin into a **thorough dock-panel layout
> redesign** that lays out the full M11-aware button inventory before applying the kit; the
> VST editor + embed-strip restyle is now the explicit **L3** point (gated on Phase S
> landing on dev). The design-system forks DS-1 (LICE + WDL free game, no external
> frameworks), DS-2 (Direction B "Neon Console" + Direction C's spectral keyboard strip),
> and DS-3 (thorough panel layout redesign) are all **SETTLED (Daniel, 2026-07-26)**.
>
> **Authoritative from here:** **PLAN.md §Phase L + CONTEXT.md §Phase L on `dev`**, and
> `docs/product/visual-design-language.md` (on `dev`). Phase S's **S10S13 build their
> interaction UX with the current drawing and adopt the Phase L kit when it lands — they
> are not gated on Phase L.** LICE/SWELL-only, the pure-geometry-module discipline, RT
> discipline, and the read-only-over-bank / VST3-class-UID-unchanged guardrails all hold
> exactly as before — a visual refresh is not a data-ownership or compat event.
## ReaSampler 9000 — the UX overhaul (S10S13; DAW-tested S1S6, "the UX is awful")
@@ -1511,9 +1455,10 @@ read-only-over-bank stay settled.
geometry module (key-span↔pixel reusing the `embed_strip` idiom; edge-grab vs. body-move
hit regions; `pixel→note`; drag-delta resolver). Shell extends the click-only `wndProc`
to a `WM_MOUSEMOVE`/`WM_LBUTTONUP` drag-state machine with live feedback, one coherent
edit on release. **Built in the S0-DS kit's language** (drawn through the shared component
kit, not the flat `LICE_FillRect`/GDI path); the drag machine's `WM_MOUSEMOVE` tracking
also lights the kit's hover states at near-zero marginal cost.
edit on release. **Built with the current LICE drawing; adopts the Phase L kit (L1) when
it lands** (drawn through the shared component kit rather than flat `LICE_FillRect`/GDI once
available) — **not gated on Phase L**; the drag machine's `WM_MOUSEMOVE` tracking also lights
the kit's hover states at near-zero marginal cost once the kit is present.
- **S11 — waveform view + draggable loop points.** Selecting a zone shows its sample's
**waveform** (peaks via the existing `peaks` module over the shell's already-decoded PCM
— no new decode/WAV path) with draggable **start/end/loop-start/loop-end** markers that
@@ -1603,15 +1548,11 @@ Set by Daniel on DAW-testing the S1S6 instrument, alongside the UX-overhaul d
- **LICE/SWELL editor.** Reuses the `bank_panel` LICE/SWELL drawing surface; verify the
`IPlugView`↔LICE window/bitmap bridge at the spike (window creation, sizing, event
routing) — the least-trodden edge of the phase.
- **LICE design-kit surfaces (S0-DS).** Verified *present* in `vendor/WDL/WDL/lice/lice.h` +
`lice_text.h`: `LICE_GradRect`, `LICE_RoundRect`, AA `LICE_Line`/`LICE_FLine`/
`LICE_ThickFLine`/`LICE_Circle`/`LICE_FillCircle`/`LICE_DrawCBezier`, `LICE_FillTriangle`/
`FillTrapezoid`/`FillConvexPolygon`, and the `LICE_CachedFont`/`LICE_IFont` font engine
(`SetFromHFont`, AA `DrawText`, shadow/outline/glow FX flags). **Verify exact signatures +
the `LICE_CachedFont`↔`HFONT` lifecycle before use.** vwnd reference (drawing craft only,
not the object model): `vendor/WDL/WDL/wingui/virtwnd-slider.cpp` /
`vwnd_slider_drawknobstack` for slider/knob rendering, `virtwnd-controls.h` for the
`WDL_STYLE_*` gradient hooks.
- **LICE design-kit surfaces — moved to Phase L.** The shared LICE drawing-kit surface
verification (`LICE_GradRect`/`LICE_RoundRect`/AA lines/circles/beziers/polygons + the
`LICE_CachedFont`/`LICE_IFont` font engine, and the vwnd drawing-craft references) now
lives with **Phase L point L1** on `dev` — see CONTEXT.md §Phase L "LICE / WDL API
surface". Phase S surfaces (S10S13) adopt that kit when it lands; they are not gated on it.
## Drop-and-load — drag a capture onto a track's FX button (S17 spec)