docs: close out Θ-W6 and Phase Θ, and file two legibility-pass deferrals

This commit is contained in:
2026-08-01 10:36:22 -04:00
parent 7504eefb59
commit ae9019465e
3 changed files with 145 additions and 53 deletions
+27 -53
View File
@@ -115,6 +115,9 @@ drag/drop defects that block getting captures into it.
**Consolidates items** 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16.
**All six waves have landed — Phase Θ is complete.** W1 through W6 each carry their own
landed note above; see `docs/COMPLETED.md` for every track's full narrative.
**The organizing constraint.** Three surfaces in the instrument are single-writer by
nature and dictate the wave shape:
@@ -253,60 +256,30 @@ as the boundary.
**One track.** Both items repaint essentially every surface in the editor; concurrent
tracks would collide everywhere.
#### Θ-W6-T1 — `legibility-and-antialiasing`
**Θ-W6-T1 has landed**`legibility-and-antialiasing` — see `docs/COMPLETED.md` for the
full narrative. It shipped both halves together: knobs grew 28→40 px (inner curve dial
14→20), the deck cell 48×58→60×74, and the label band 12→16 px, now drawn in
`Font::Label` rather than `Font::Micro` — group captions and toggle segments deliberately
stayed `Font::Micro`, since bumping them would outgrow row 1's headroom at the floor
width. The editor's default/minimum size grew 840×620→980×680 to fit the wider deck at
floor width; an existing saved instance's window grows on open, and the floor is
validated by a derived test rather than literals. All fourteen time-constant labels now
read in ms (display-only; internal representation untouched) — `holdFraction` knobs,
`Len %`, and the bank panel's duration readout stayed out of scope. Double-click resets
each ring independently — outer ring resets the value, inner dial resets the exponent to
1.0 — reaching the chrome's preview-velocity knob too via a shared `inKnobFace` rule.
**Goal.** Make the editor legible — bigger knobs and labels, time constants in ms,
double-click reset per ring — then audit every drawn surface for high-DPI clean rendering.
The antialiasing audit fixed knob arcs and needle, the inner dial arc and needle, staged
and spline envelope slopes, the spline contour, the velocity-popup trace, the waveform
outline, and the preview triangle; node handles, curve knots, knob discs, buttons, piano
keys, loop markers, borders, gradients, and text were already clean. The disposition
table is a standing artifact in `docs/product/visual-design-language.md` §8. The
piano-key open question is answered: not aliasing — every key is an axis-aligned
`LICE_FillRect`, so the earlier width defect was integer-division residue in the tiling,
not a sloped edge. High-DPI host scaling itself is unverified (deferred, see
`docs/TODO.md`).
**Consolidates items 10, 13.** Sequence internally: sizing first, audit second.
**Surface boundary — owns:** `core/instrument/ui/knob_deck` (sizing geometry),
`shell/panel/draw_kit` (the shared LICE draw shell — arcs, lines, slopes), and all three
Sample-face bands for repaint-level changes. **Note the blast radius:** `draw_kit` is
shared with the docked bank panel, so an antialiasing change there lands on the extension
UI too. That is desirable, but it puts the panel in this track's verification scope.
**Behavior — sizing and ergonomics (item 10).**
- **Radial knobs and their text labels grow** — both are currently too small. No target
size was given; this is a visual-judgment change accepted by eye.
- **Time-constant labels display in ms, not seconds.** A display-unit change; this makes
no claim about internal representation.
- **Double-click on any radial knob resets it to its default value.**
- **On dual-ring knobs, each ring is its own reset target**: double-click the outer ring
resets the time/level value; double-click the inner curve dial resets the exponent to
**1.0** (the settled linear neutral) — each independently, without touching the other.
**Behavior — antialiasing audit (item 13).**
- **A review pass, not a point fix.** Audit each class of drawn surface and confirm it
renders with antialiasing (or an equivalent) suitable for high-DPI, high-resolution
displays. Where one renders visibly aliased, bring it to the smooth standard.
- Daniel named the visibly pixely surfaces: **radial arcs, waveform lines, envelope
segment slopes.** By the time this runs, those include the inner dials (W3), the stereo
lanes (W2-T2), the staged *and* spline segment slopes (W3, W5), the loop markers
(W4-T1), and the piano key edges (W2-T3).
- The outcome is observable, not procedural.
**Acceptance criteria.**
- Knobs and labels are legibly larger; **Daniel signs off on the result by eye.**
- **Every** time-constant label reads in ms.
- Double-click resets any radial knob to its default; on dual-ring knobs, double-clicking
the inner dial resets **only** the exponent (to 1.0) and double-clicking the outer ring
resets **only** the value.
- Radial arcs (including the inner dials), waveform lines (including the stereo lanes),
and envelope segment slopes (staged **and** spline) render smooth — **no visible jaggies
at 100% scale or on a high-DPI display.**
- **The audit produces a short disposition list**: surfaces checked, which needed work,
which were already clean. A required deliverable, not a side effect — it is what makes
the audit re-runnable.
- Daniel signs off by eye on the named surfaces.
- The docked bank panel is re-verified for regression, since `draw_kit` is shared.
**Open questions.**
- **Target sizes [verify by eye].** No numeric target was given; item 10's own note is
that sizing is judged by eye. Bring a build, not a spec.
- **Whether the piano-key width defect was aliasing [verify].** W2-T3 fixes uniform width
regardless of cause; this audit confirms whether aliasing was the cause and whether the
fix survives DPI scaling.
All visual outcomes remain pending Daniel's by-eye sign-off on `dev`.
---
@@ -327,7 +300,8 @@ independent of the editor chain — which is what makes Ξ-W1 concurrency-safe w
bakes — "filtering, pitching, amp all set up nice" is the instrument items 1, 2, 3, and 14
build — and its settled reset scope enumerates the filter parameters, the spline contours,
and the loop points by name. Baking a processing chain that does not exist yet is not a
schedule preference; the feature is not expressible.
schedule preference; the feature is not expressible. Phase Θ landed as of Θ-W6-T1 (see
`docs/COMPLETED.md`); this gate is satisfied.
---