docs(product): spec Phase L L5 — dock-panel button refinements

Top-toolbar overflow menu for rare capture variants; short button faces + full-name tooltips (drop ReaSampler: prefix); Item/Track x Arrange/Design tag buttons enabled only for the opposite of active mode; remove redundant Toggle; semantic-grouping spacing. Item-level tagging confirmed existing — layout wiring, not feature work. Ungated; sequences after L4; L3 gate intact.
This commit is contained in:
2026-07-26 23:33:13 -04:00
parent 52ac9b5eea
commit 0c7b871d8d
2 changed files with 191 additions and 3 deletions
+99 -2
View File
@@ -291,7 +291,10 @@ build:** the `IReaperUIEmbedInterface` contract + embed message/lifecycle agains
> inventory placed by task cluster, `bank_panel` redesigned through the L1 kit (L2); three-zone
> layout (top capture/placement/maintenance toolbar, bottom Design-View toolbar, footer toggle +
> Tail button + Prune), `footer_bar` pure module, `ActionCluster::Tagging`/`Switching` in
> `action_bar` (L4). See `COMPLETED.md`. **L3 remains** — L3 gated on Phase S landing on dev.
> `action_bar` (L4). See `COMPLETED.md`. **L5 (dock-panel button refinements — overflow menu,
short-face+tooltip labels, opposite-mode Item/Track tag buttons, Toggle removal, grouping
spacing) is the live forward point** — ungated by Phase S, sequences after L4. **L3 remains**
L3 gated on Phase S landing on 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
@@ -368,15 +371,101 @@ work.
state — never a pulse, per the speed constraint) as the signature surface; VST3 class UID
unchanged. (Gated.)
## L5 — dock-panel button refinements (ungated; sequences after L4)
**Goal:** Refine the L4 three-zone toolbar so the button faces read cleanly and group
legibly — an overflow menu for the rare capture variants, short faces with full-name
tooltips (no `ReaSampler:` prefix), an opposite-mode tag-button set, removal of the now-
redundant Toggle, and semantic-grouping spacing. **No new capture/placement behavior**;
every button fires an existing registered action (the "capture ≠ placement" principle is
untouched). **Ungated by Phase S** (the dock panel is on dev) and **independent of the L3
gate.** Drawn through the L1 kit in the DS-2 grey-neutral + three-accent-pastel palette
(prune stays `warn`); **no palette or font decision is re-opened here.** Authoritative
contract: CONTEXT.md §L5.
**The five refinements:**
1. **Top-toolbar overflow menu.** The three less-frequent capture variants — **Batch Items,
Batch Razor, Capture RT** — move OFF the visible top bar into a **"⋯ / More" menu button
at the far right of the top toolbar** (a REAPER `TrackPopupMenu` popup listing the three,
each firing its existing command id). The frequent acts stay on the bar: **Capture Item,
Capture Track** (Capture), **Insert, Insert Conform** (Placement), **Re-capture, Cancel RT**
(Maintenance). This is a re-home of existing rows into a menu — no action changes.
2. **Short faces + full-name tooltips; drop the `ReaSampler:` prefix.** Button *faces*
already carry a terse label (`ActionBarRow.shortLabel`) — this formalizes them and adds a
**hover tooltip carrying the FULL action name** (without the `ReaSampler:` display prefix,
which `actionDisplayPrefix()` bakes into the registered gaccel name — the tooltip strips
it). The keybinding stays on the existing `micro` sub-row. Tooltip *mechanism* is an
implementation choice flagged for staff-engineer (see the sub-item below).
3. **Bottom-toolbar tag buttons — Item/Track × Arrange/Design, opposite-mode-only.** Replace
the current `Tag Design` / `Untag` pair with **four buttons: "Item: Arrange", "Item:
Design", "Track: Arrange", "Track: Design".** Each is **live only for the OPPOSITE of the
active mode** and drawn `Disabled` otherwise: when **Design is active**, only the "…:
Arrange" buttons are live (they send the selection to Arrange) and the "…: Design" buttons
are disabled; when **Arrange is active**, the reverse. Item buttons fire the existing
item-move actions (`VIEW_MOVE_ITEMS_ARRANGE` / a Design item-move); Track buttons fire the
existing track-tag actions (`VIEW_TAG_ARRANGE` (= untag) / `VIEW_TAG_DESIGN`). **Both action
families already exist** (research confirmed) — this is layout + enablement wiring, not new
feature work.
4. **Remove the redundant Toggle button.** `VIEW_TOGGLE_MODE` leaves the bottom toolbar — the
footer's `[Arrange|Design]` toggle switch (landed in L4) already covers it. The action stays
registered (keybinding-bound); only its button home is removed. **Fate of Activate-Arrange /
Activate-Design / Show-Both is a FORK for Daniel** (see below) — recommended resolution
captured in CONTEXT.md §L5.
5. **Semantic-grouping spacing.** Inter-cluster gaps must read visibly wider than intra-cluster
gaps so clusters parse as groups. Current `kBarSpec` is `buttonGap=4` / `clusterGap=16`
(a 4:1 ratio). With the bottom bar's cluster boundaries now more meaningful (four tag
buttons vs. the switching remnant), widen the ratio if the groups still don't read — target
`buttonGap=4` / `clusterGap=24` (6:1) as the starting point, tuned in-DAW.
**Verify (in DAW):** the top bar shows only frequent capture/placement/maintenance buttons +
a right-anchored More menu that fires Batch Items / Batch Razor / Capture RT; button faces
are short with no `ReaSampler:` prefix and a hover tooltip shows the full action name; the
bottom bar shows four Item/Track × Arrange/Design tag buttons with only the opposite-mode
pair live (disabled pair visibly greyed via the kit `Disabled` state) and no Toggle button;
cluster groups read as groups. All buttons fire the same actions their keybindings do.
**Depends on:** L1 (the kit — `Disabled` interaction state, `kitText`) **AND** L4 (the
`action_bar` two-toolbar + `footer_bar` layout this refines). **Sequences after L4.** Ungated
by Phase S; independent of the L3 gate.
- [ ] Top-toolbar overflow: pull Batch Items / Batch Razor / Capture RT off the visible bar
into a right-anchored **More menu button** (kit-drawn button + `TrackPopupMenu` popup);
each entry fires its existing command id. Pure layout owns the menu-button rect + hit-test
(extend/mirror `action_bar` / `prune_button`); the popup + dispatch is shell.
- [ ] Short faces + drop `ReaSampler:` prefix on the button *face*; keep the keybinding micro
sub-row. Define/confirm the terse face label per button.
- [ ] **Hover tooltip carrying the full action name (prefix stripped).** *Mechanism is a
build-time choice for staff-engineer* — SWELL tooltip API vs. a custom hover-delay kit
tooltip draw. **Recommend: a custom hover-delay kit tooltip** (owns its own timing + draw,
consistent with the LICE kit and DS-1's "keep drawing in the kit"; SWELL's tooltip control
is awkward to attach to non-child LICE rects). Final call at build.
- [ ] Bottom-toolbar four tag buttons: **Item: Arrange / Item: Design / Track: Arrange /
Track: Design**, wired to the existing item-move + track-tag actions (no new actions).
- [ ] **Opposite-mode enablement rule:** a button is live iff its target mode ≠ the active
mode; otherwise drawn `Disabled` (kit disabled state, `TextDim`) and its click is a no-op.
Pure predicate (active mode → per-button live/disabled) unit-tested; shell reads the active
mode and applies. (Layout over existing actions — NOT flagged feature work; item-level
tagging already exists in the model.)
- [ ] Remove the `VIEW_TOGGLE_MODE` button from the bottom toolbar (action stays registered).
- [ ] Resolve the **Activate-Arrange / Activate-Design / Show-Both** fate per Daniel's call
(FORK — see §Handoff / CONTEXT.md §L5); apply the chosen bottom-toolbar inventory.
- [ ] Semantic-grouping spacing: widen `clusterGap` relative to `buttonGap` so clusters read
as groups (start ≈ 24 / 4; tune in-DAW).
## 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)
└─────────► L4 (dock-panel button layout enhancement) [LANDED]
└────► L5 (dock-panel button refinements; ungated, after L4)
Phase S (separate team, ungated): S-work builds with current drawing, adopts L1 when it lands.
```
L1, L2, and L4 have landed. L3 waits for Phase S to reach dev.
L1, L2, and L4 have landed. L5 sequences after L4 (ungated). L3 waits for Phase S to reach dev.
Phase S feature work runs in parallel, ungated by Phase L.
## Phase L — must-verify-before-build
@@ -397,6 +486,14 @@ Phase S feature work runs in parallel, ungated by Phase L.
- **L4 re-home surface (L4)** — resolved at L4 build: three-zone layout confirmed against the
post-palette-revision `bank_panel`; `action_bar` extended with `ActionCluster::Tagging` +
`Switching`; new pure `footer_bar` module covers footer layout/hit-test.
- **L5 refinement surface (L5)** — resolve at L5 build: (a) confirm `TrackPopupMenu` popup +
right-anchored menu-button geometry for the top-bar overflow; (b) **tooltip mechanism**
(SWELL tooltip vs. custom hover-delay kit tooltip — recommended custom) — pick and confirm
the hover-timer + LICE overlay draw at build; (c) confirm the item-move action ids the four
tag buttons fire (`VIEW_MOVE_ITEMS_ARRANGE` + the Design item-move; `VIEW_TAG_ARRANGE` /
`VIEW_TAG_DESIGN` for track) resolve on this channel; (d) confirm the active-mode read the
opposite-mode enablement predicate consumes is the same `view().activeModeId()` the footer
toggle reads (one source of truth for "which mode is active").
---