docs(product): spec Phase L L4 — dock-panel button layout enhancement
Capture+placement move to a top toolbar; Design View tag/switch verbs to the bottom toolbar; footer gains a narrow Arrange|Design toggle + a Tail button (was a click-zone), with warn Prune set apart at the right. Ungated/extension-side; sequences after the palette revision. Layout only.
This commit is contained in:
+49
-1
@@ -1512,6 +1512,51 @@ it. New layout math goes in a pure geometry module; `bank_grid`/`tab_strip`/`mod
|
||||
stay the pure source of truth for their own hit-testing. **L2 sequences after M11 merges**
|
||||
so it inventories the actual landed buttons.
|
||||
|
||||
## L4 dock-panel button layout (top / bottom / footer re-home)
|
||||
|
||||
L4 is a **second layout pass over the same `bank_panel`** that re-homes the L2 button inventory
|
||||
around *frequency and intent*. It ships **no new action and changes no capture/placement
|
||||
behavior** — every button fires an existing registered action; the "capture ≠ placement"
|
||||
load-bearing principle is untouched (the buttons only *fire* the split acts, they never fuse
|
||||
them). It is **ungated by Phase S** (the dock panel is on dev) and independent of L3.
|
||||
**L4 sequences AFTER the in-flight DS-2 palette-revision branch merges to dev** — both rework
|
||||
`bank_panel` heavily, and landing L4 concurrently would collide the same file. Drawn through the
|
||||
L1 kit in the DS-2 grey-neutral + three-accent-pastel palette (prune stays `warn`); no palette
|
||||
or font decisions are re-opened here.
|
||||
|
||||
**The new three-zone structure:**
|
||||
|
||||
- **Top toolbar = capture + placement.** The capture cluster (capture item, capture track,
|
||||
batch items, batch razor, capture RT) and the placement cluster (insert, insert-conform) move
|
||||
from the bottom L2 action bar to a **top** toolbar — the eye's first landing, matching the two
|
||||
acts the tool exists for. Icon+label buttons with the keybinding as a `micro` sub-label (the
|
||||
M11 keybinding-help convention), drawn through the kit.
|
||||
- **Bottom toolbar = Design View tagging + switching.** The space the capture/placement buttons
|
||||
vacate holds the **Design View action family** as buttons: **tag / untag selected tracks for a
|
||||
mode, activate Arrange, activate Design, toggle active mode, show-both.** These are the
|
||||
registered Design View actions today; L4 gives them a button home here.
|
||||
- **Footer = narrow Arrange|Design toggle · Tail button · … · Prune.** The large top
|
||||
`[ Arrange | Design ]` segmented toggle **shrinks to just-wide-enough-for-its-text** and moves
|
||||
into the footer at the **left**, carrying its per-mode membership count as a compact adjacent
|
||||
label. The **Tail** affordance is converted from a **click-zone to a proper kit button**
|
||||
(rest/hover/pressed states; click still cycles the tail setting). **Prune** stays the
|
||||
byte-deleting action — **set apart at the far right, `warn`-colored** — the only file-deleting
|
||||
affordance, kept isolated so no benign toggle sits next to it.
|
||||
|
||||
**Footer affordance order (left → right):** `[Arrange|Design]` toggle · Tail button · … ·
|
||||
**Prune** (rightmost, set apart, `warn`). The order reads benign/frequent at the left
|
||||
(view-mode toggle, tail-length control — both "how this panel/capture behaves") → destructive/
|
||||
rare at the right (Prune, isolated), so a mis-click near the left is cheap and the one
|
||||
destructive control is spatially and chromatically distinct.
|
||||
|
||||
**Pure/shell discipline (unchanged).** All new toolbar-row and footer-strip layout math goes in
|
||||
pure CTest-covered geometry modules — **extend/mirror `action_bar`** (the toolbar row layout,
|
||||
now instantiated top and bottom) and **`mode_switch`** (the now-narrow, fit-to-text footer
|
||||
toggle geometry + hit-test). `bank_grid` and `tab_strip` remain the pure owners of their own
|
||||
surfaces' hit-testing. The L1 kit draws; the geometry stays pure. **L4 resolves its re-home
|
||||
against the post-palette-revision `bank_panel`** (build-time inventory once that branch is on
|
||||
dev).
|
||||
|
||||
## The L3 gate + Phase S coordination contract
|
||||
|
||||
**L3 (VST editor + embed-strip restyle) is GATED on Phase S landing on dev.** The VST
|
||||
@@ -1519,7 +1564,10 @@ editor (`IPlugView` LICE surface), the S6 embed strip, and the keyboard strip li
|
||||
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.
|
||||
planned, blocked point; L1 and L2 have landed, and **L4 (dock-panel button layout enhancement)
|
||||
is the live, ungated extension-side Phase L work — it does not touch any Phase S surface, and
|
||||
sequences after the in-flight palette revision merges to dev** (shared-`bank_panel` collision).
|
||||
L4 is independent of the L3 gate.
|
||||
|
||||
**Coordination contract (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
|
||||
|
||||
@@ -288,7 +288,9 @@ build:** the `IReaperUIEmbedInterface` contract + embed message/lifecycle agains
|
||||
> have landed** — `theme`/palette module, `component_geometry` geometry/hit-test helpers,
|
||||
> `draw_kit` shell, GDI `DrawText` retirement in `bank_panel` (L1); `action_bar` pure
|
||||
> task-grouped layout module, full M11-aware button inventory placed by task cluster,
|
||||
> `bank_panel` redesigned through the L1 kit (L2). See `COMPLETED.md`. **L3 remains.**
|
||||
> `bank_panel` redesigned through the L1 kit (L2). See `COMPLETED.md`. **L3 and L4 remain**
|
||||
> — L3 gated on Phase S landing on dev; L4 (dock-panel button layout enhancement) ungated and
|
||||
> extension-side, sequencing after the in-flight palette revision merges to dev.
|
||||
>
|
||||
> **This section is self-contained for a team without Phase S context.** Where a point
|
||||
> touches a Phase S surface (the VST editor, the embed strip, the keyboard strip), the
|
||||
@@ -365,15 +367,86 @@ work.
|
||||
state — never a pulse, per the speed constraint) as the signature surface; VST3 class UID
|
||||
unchanged. (Gated.)
|
||||
|
||||
## L4 — dock-panel button layout enhancement (ungated, extension-side)
|
||||
**Goal:** Re-home the `bank_panel`'s L2 button inventory around *frequency and intent*, so the
|
||||
two acts the tool exists for (capture, placement) sit at the **top** where the eye lands, the
|
||||
Design View organize/switch verbs get a real button home at the **bottom**, and the footer
|
||||
carries the small persistent controls (the Arrange|Design toggle, Tail, Prune) in a coherent
|
||||
left-to-right order. This is a **layout re-home of buttons that fire existing actions** — no new
|
||||
actions, no capture/placement behavior change, no touching the "capture ≠ placement" principle.
|
||||
It is independent of L3 (which stays gated on Phase S); L4 is **ungated, extension-side only**
|
||||
(the dock panel lives on dev). Product framing: `docs/product/visual-design-language.md` §L4
|
||||
(new) + CONTEXT.md §Phase L "L4 dock-panel button layout".
|
||||
|
||||
The four layout moves (Daniel, 2026-07-26):
|
||||
1. **Capture + placement clusters move to a TOP toolbar.** The capture cluster (capture item,
|
||||
capture track, batch items, batch razor, capture RT) and the placement cluster (insert,
|
||||
insert-conform) leave the current bottom L2 action bar and become a **top** toolbar — the
|
||||
first thing the eye meets, matching their frequency and the tool's purpose.
|
||||
2. **The bottom toolbar is repurposed for Design View tagging + switching.** In the space the
|
||||
capture/placement buttons vacate, place the Design View action family as buttons: **tag /
|
||||
untag selected tracks for a mode, activate Arrange, activate Design, toggle active mode,
|
||||
show-both.** These are registered actions today (the Design View action family); L4 gives
|
||||
them a button home in the bottom toolbar.
|
||||
3. **The Arrange|Design segmented toggle shrinks and moves to the footer.** The large top
|
||||
`[ Arrange | Design ]` segmented control shrinks to **just wide enough for its text
|
||||
comfortably** and moves into the **footer, to the LEFT of the Prune button** (see footer
|
||||
order below). The per-mode membership count travels with it (as a compact adjacent label).
|
||||
4. **Tail becomes a real button.** The Tail footer affordance is a **click-zone** today
|
||||
(clicking cycles the tail setting) — inconsistent with the other footer controls. Convert it
|
||||
to a proper **button** drawn through the L1 kit like the others; click still cycles the tail
|
||||
setting, but it now reads and behaves as a button (rest/hover/pressed states).
|
||||
|
||||
**Footer affordance order (left → right):** `[Arrange|Design]` toggle · Tail button · … ·
|
||||
**Prune** (set apart at the right, `warn`). *Rationale:* the two view/session controls (mode
|
||||
toggle, tail) group at the left as the "how this panel/capture behaves" cluster; Prune stays
|
||||
isolated at the far right, visually separated and `warn`-colored, because it is the only
|
||||
byte-deleting affordance and must never sit adjacent to a benign toggle where a mis-click is
|
||||
cheap. Order reads left (benign, frequent) → right (destructive, rare).
|
||||
|
||||
**Verify (in DAW):** the top toolbar fires every capture + placement action; the bottom toolbar
|
||||
tags/untags selected tracks and switches/toggles Arrange/Design/show-both; the footer shows a
|
||||
narrow `[Arrange|Design]` toggle at the left, a Tail button that cycles tail on click with
|
||||
button states, and the Prune button set apart at the right in `warn`; every surface draws
|
||||
through the L1 kit in the DS-2 grey+pastel palette; capture and placement still never
|
||||
auto-insert (the buttons only fire the existing, unchanged actions).
|
||||
|
||||
**Depends on:** L1 (the kit) + L2 (the landed layout + `action_bar` module). **Ungated by Phase
|
||||
S** — extension-side (`bank_panel`) only. **Sequence AFTER the palette revision merges to dev**
|
||||
— the in-flight DS-2 grey+pastel palette branch also reworks `bank_panel` heavily; landing L4
|
||||
concurrently would collide the same file. L4 begins once the palette revision is on dev.
|
||||
**Pure/shell discipline (unchanged):** all new toolbar/footer layout math goes in pure
|
||||
CTest-covered geometry modules — extend/mirror `action_bar` (toolbar row layout) and
|
||||
`mode_switch` (the now-narrow footer toggle); `bank_grid`/`tab_strip` stay owners of their own
|
||||
surfaces' hit-testing. The kit draws; geometry stays pure.
|
||||
|
||||
- [ ] Top toolbar: re-home the capture cluster (item / track / batch items / batch razor /
|
||||
capture RT) + placement cluster (insert / insert-conform) from the bottom L2 bar to a top
|
||||
toolbar (pure row layout in `action_bar`; kit draw). Buttons fire the existing actions
|
||||
unchanged — no auto-insert.
|
||||
- [ ] Bottom toolbar: place the Design View action family as buttons (tag / untag selected for
|
||||
mode, activate Arrange, activate Design, toggle active mode, show-both), firing the existing
|
||||
registered Design View actions.
|
||||
- [ ] Footer: shrink the `[ Arrange | Design ]` segmented toggle to fit-its-text width and move
|
||||
it to the footer left of Prune (narrow-segment geometry in `mode_switch`); carry the per-mode
|
||||
count as a compact adjacent label.
|
||||
- [ ] Footer: convert the Tail click-zone into a proper kit button (rest/hover/pressed states;
|
||||
click cycles the tail setting as today).
|
||||
- [ ] Footer order: `[Arrange|Design]` · Tail · … · Prune (`warn`, set apart at the right);
|
||||
pure footer-strip layout covered by CTest.
|
||||
|
||||
## Phase L — sequencing
|
||||
```
|
||||
L1 (shared kit) ──► L2 (dock-panel layout redesign) [LANDED]
|
||||
└─────────► L3 (VST editor + embed-strip restyle; GATED on Phase S landing on dev)
|
||||
├─────────► L3 (VST editor + embed-strip restyle; GATED on Phase S landing on dev)
|
||||
└─────────► L4 (dock-panel button layout enhancement; ungated, extension-side;
|
||||
sequences AFTER the palette revision merges to dev)
|
||||
|
||||
Phase S (separate team, ungated): S-work builds with current drawing, adopts L1 when it lands.
|
||||
```
|
||||
L1 and L2 have landed. L3 waits for Phase S to reach dev. Phase S feature work runs in
|
||||
parallel, ungated by Phase L.
|
||||
L1 and L2 have landed. L3 waits for Phase S to reach dev. L4 is ungated and extension-side but
|
||||
sequences after the in-flight palette-revision branch merges to dev (both rework `bank_panel`).
|
||||
Phase S feature work runs in parallel, ungated by Phase L.
|
||||
|
||||
## Phase L — must-verify-before-build
|
||||
- **LICE design-kit surfaces (L1)** — `LICE_GradRect`, `LICE_RoundRect`, AA
|
||||
@@ -390,6 +463,11 @@ parallel, ungated by Phase L.
|
||||
useful; keep hit-test geometry pure regardless.
|
||||
- **M11 button inventory (L2)** — resolved at L2 build: inventory taken against dev after
|
||||
M11 merged; all buttons placed by task cluster in the landed `action_bar` module.
|
||||
- **L4 re-home surface (L4)** — resolved at L4 build against the **post-palette-revision**
|
||||
`bank_panel`: confirm the landed `action_bar` row-layout module and the `mode_switch`
|
||||
segmented-toggle geometry extend cleanly to a top toolbar + a narrow footer toggle, and that
|
||||
the Design View action family's command ids are all live for the bottom-toolbar buttons.
|
||||
**Do not build until the palette revision is on dev** (shared-file collision).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user