docs(multi-bank): settle fork 5 — LICE tabs + both move affordances (Phase B closed)

5a: named-banks tab strip is LICE-drawn (matching M5 grid + Design View
segmented switch), with overflow/scroll in scope from B4 start.
5b: move ships as both a bindable "move to bank" menu and drag-between-regions;
copy stays the deliberate secondary act. Drag mis-drop mitigated by drop-target
highlighting and recoverable by design (index-only, reversible).

Phase B now fully settled (all five forks resolved), ready to scope into
implementation waves; only the active-bank indicator placement polish remains.
This commit is contained in:
2026-07-23 13:13:04 -04:00
parent dcbe5d7bdc
commit 2c468bb40c
3 changed files with 113 additions and 42 deletions
+62 -11
View File
@@ -6,9 +6,10 @@ detail in `CONTEXT.md` (§Multi-bank). This doc holds the *why* — the workflow
narrative, the pool-privilege reasoning, the movement semantics, and the
design-direction recommendations — so those don't clutter the build docs.
Status: framed by product-designer (2026-07-23). Forks 14 settled by Daniel
(2026-07-23); fork 5 (tab rendering + move affordance) still open — options
analysis at the bottom. Settled forks are folded into the prose below.
Status: framed by product-designer (2026-07-23). All five forks settled by Daniel
(2026-07-23) fork 5 (tab rendering + move affordance) is now closed; the record at
the bottom carries the decision and rationale. Settled forks are folded into the prose
below. Only the active-bank indicator *placement* remains an open B4 polish detail.
---
@@ -382,9 +383,9 @@ the M5 LICE grid render loop per region.
## Settled forks (Daniel, 2026-07-23)
Four of the five open forks are now decided; their implications are folded into the
prose above. Recorded here as a scan-line so the decisions don't have to be
reconstructed from the body text.
All five forks are now decided; their implications are folded into the prose above.
Recorded here as a scan-line so the decisions don't have to be reconstructed from the
body text.
1. **Persistence key — (a), retire `bank_index`.** The pool folds into the `banks`
blob as bank-zero; the legacy `bank_index` key is retired after a one-way,
@@ -403,14 +404,60 @@ reconstructed from the body text.
indicator.** Browsing never retargets capture; the "visually unmistakable"
requirement is a settled constraint (placement remains a B4 detail). (See
*design-direction → active bank and shown tab stay distinct*.)
5. **Named-banks tabs are LICE-drawn; move ships as both menu and drag.** (5a) The
tab strip is LICE-drawn to match the M5 grid and the Design View segmented switch —
not a SWELL-native tab control — with an overflow/scroll affordance built in from
the start so the strip scales past the ~812-tab breakdown point. (5b) Move ships as
*both* a "move to bank" / "send to bank" menu on the current selection (the precise,
MIDI-bindable front-end for the B3 move action) *and* drag-between-regions (the
direct-manipulation accelerator); copy stays the deliberate secondary act via the
menu. Drag mis-drop is mitigated by clear drop-target highlighting and is recoverable
by design (move is index-only and reversible). (See *Fork 5 — settled* below.)
---
## Fork 5 — options for discussion, decision pending
## Fork 5 — settled (Daniel, 2026-07-23)
The one fork Daniel wants to weigh before deciding. Two sub-questions, both B4
panel-build mechanics, neither phase-defining but both shaping the panel's feel.
Nothing below is decided; the recommendations at the end are *pending Daniel's call*.
Two sub-questions, both B4 panel-build mechanics — neither phase-defining, both
shaping the panel's feel. The full options analysis that produced these calls is
retained below the decision for the record; the *decision* is what governs B4.
**Decision.**
- **5a — LICE-drawn custom tabs**, matching the M5 grid aesthetic and the Design View
`[ Arrange | Design ]` segmented-switch precedent. **Overflow/scroll is in scope from
the start** (chevron or scroll affordance), not deferred — a naive fixed-width LICE
strip breaks down at ~812 tabs, so the panel must scale from B4 onward.
- **5b — both a "move to bank" menu and drag-between-regions.** The menu is the precise,
MIDI-bindable front-end for the B3 move action; drag is the direct-manipulation
accelerator. Copy remains available as the deliberate secondary act, offered on the
menu. **Drag mis-drop is a designed-for property, not an afterthought:** the
destination region/tab shows clear drop-target highlighting during a drag, and because
move is index-only and move-is-default, a mis-drop is *recoverable* (the user moves the
sample back) rather than destructive — state this as the safety net, not a hope.
**Rationale (brief).** 5a: visual consistency across one coherent custom-drawn surface
plus full cross-platform certainty (we own every pixel, no SWELL tab-parity risk) beats
buying keyboard-nav/overflow from an inconsistent native widget; the segmented switch is
a partial precedent to extend. Overflow is pulled forward because banks routinely running
past a handful is plausible and a backfill after the naive strip ships would be a visible
cliff. 5b: the menu carries the precise/bindable path (and is the natural front-end for
the already-bindable B3 action, consistent with how the M5 grid and Design View act on
the current selection); drag serves users who prefer direct manipulation — the pattern
every media manager (Finder, Lightroom, Ableton browser) ships. The mis-drop hazard that
argued against drag-only is defused by highlighting + reversibility, so drag is safe as
the accelerator.
**Verify before building.** LICE tab drawing and any SWELL surface used for the
menu/drag hit-testing must be verified against the M5 reference and the SWELL/SDK headers
before use — even having chosen LICE, confirm what a native fallback would offer, and
confirm the drag hit-test doesn't collide with the M5 grid's existing multi-select drag.
---
## Fork 5 — options analysis (retained for the record)
The analysis that produced the decision above. Kept so the reasoning behind the
LICE-tabs / both-affordances calls doesn't have to be reconstructed.
### 5a — Named-banks tab rendering: SWELL-native tabs vs. LICE-drawn custom tabs
@@ -500,7 +547,11 @@ primary; drag as the direct-manipulation accelerator for users who prefer it.
- **Cons:** most implementation cost (build both, and make them agree); drag still
carries its mis-drop risk even as a secondary path.
### Recommendations (pending Daniel's decision)
### Recommendations that fed the decision (now settled above)
These were the product-designer recommendations Daniel weighed; the settled record at
the top of Fork 5 is authoritative where it differs (notably 5b, which Daniel took all
the way to "both" with overflow and drop-highlighting pulled forward).
- **5a — recommend LICE-drawn custom tabs (Option B).** Visual consistency with the
M5 grid and the Design View segmented switch is worth the hand-rolled keyboard-nav