Docs: reflect Phase D5 landing; close out Phase D

Archive D5 (mode switch) to COMPLETED.md and remove the completed Phase D
section from PLAN.md; add mode_switch to CLAUDE.md architecture + targets.
This commit is contained in:
2026-07-23 12:47:13 -04:00
parent 4700415fb6
commit 43ca5e4069
3 changed files with 25 additions and 33 deletions
+3 -1
View File
@@ -22,7 +22,7 @@ Vendors two submodules (see `.gitmodules`):
cmake --build build cmake --build build
ctest --test-dir build ctest --test-dir build
Six targets: Seven targets:
| Target | Kind | Purpose | | Target | Kind | Purpose |
|---|---|---| |---|---|---|
@@ -31,6 +31,7 @@ Six targets:
| `capture_paths_tests` | executable | Pure unit tests for `capture_paths` — no REAPER, no DAW. | | `capture_paths_tests` | executable | Pure unit tests for `capture_paths` — no REAPER, no DAW. |
| `view_mode_model_tests` | executable | Pure unit tests for `view_mode_model` — no REAPER, no DAW. | | `view_mode_model_tests` | executable | Pure unit tests for `view_mode_model` — no REAPER, no DAW. |
| `view_tree_tests` | executable | Pure unit tests for `view_tree` — no REAPER, no DAW. | | `view_tree_tests` | executable | Pure unit tests for `view_tree` — no REAPER, no DAW. |
| `mode_switch_tests` | executable | Pure unit tests for `mode_switch` — no REAPER, no DAW. |
| `reaper_reasampler` | loadable module | The actual extension binary (`.dll` / `.dylib` / `.so`). | | `reaper_reasampler` | loadable module | The actual extension binary (`.dll` / `.dylib` / `.so`). |
### macOS / Linux: SWELL dialog resources ### macOS / Linux: SWELL dialog resources
@@ -52,6 +53,7 @@ There is no hot-reload. Copy the built binary into REAPER's `UserPlugins/` folde
- `peaks` — waveform min/max bin computation from raw PCM. Fed a known signal, asserts envelope. Does not depend on REAPER's peak API. - `peaks` — waveform min/max bin computation from raw PCM. Fed a known signal, asserts envelope. Does not depend on REAPER's peak API.
- `view_mode_model` — Design View mode system: mode registry, GUID-keyed membership, folder-tree-aware visibility derivation, snapshot-based park/restore planner, JSON round-trip. Mirror of `bank_model` for the Design View phase. - `view_mode_model` — Design View mode system: mode registry, GUID-keyed membership, folder-tree-aware visibility derivation, snapshot-based park/restore planner, JSON round-trip. Mirror of `bank_model` for the Design View phase.
- `view_tree` — pure `I_FOLDERDEPTH`→FolderTree helper for the Design View shell; no REAPER types at the boundary. - `view_tree` — pure `I_FOLDERDEPTH`→FolderTree helper for the Design View shell; no REAPER types at the boundary.
- `mode_switch` — REAPER-free segment layout + hit-test math for the bank_panel's Design View mode switch; divides a header rectangle into N equal segments and hit-tests a point to a segment. Mirror of `bank_grid`.
**REAPER-facing shells:** **REAPER-facing shells:**
- `capture``ICaptureBackend` interface; `OfflineRenderBackend` (deterministic default) and `RealtimeRecordBackend`. Input: `CaptureRequest`. Output: finished file + populated `Sample` handed to `bank_model`. - `capture``ICaptureBackend` interface; `OfflineRenderBackend` (deterministic default) and `RealtimeRecordBackend`. Input: `CaptureRequest`. Output: finished file + populated `Sample` handed to `bank_model`.
+22
View File
@@ -239,6 +239,28 @@ toggle + mode-jumps MIDI-bindable; tag/untag acts on the current track selection
--- ---
## D5 — in-window toggle affordance (UI)
**Goal:** The segmented mode switch in the ReaSampler / bank_panel window header.
CONTEXT.md §Design View (UI). **Verify (in DAW):** Segmented control shows current
mode (lit segment), one click flips modes via the D4 toggle action, per-mode
membership count visible, offlined-FX caveat surfaced as a tooltip.
- [x] Segmented mode switch `[ Arrange | Design ]` in the window header; active lit.
- [x] Wire the switch to the toggle/activate actions from D4.
- [x] Per-mode membership count display.
- [x] Offlined-FX re-init caveat as a tooltip on the switch.
**Notes/decisions:**
- New PURE module `src/mode_switch.{h,cpp}` — REAPER-free layout math for the
Design View mode switch: divides a header rectangle into N equal segments (one per
registered mode) and hit-tests a point to a segment. Unit-tested via a new
`mode_switch_tests` CTest target. Mirror of `bank_grid`.
- `src/bank_panel.cpp` — segmented `[ Arrange | Design ]` control drawn in the panel
header (one lit segment per registered mode, click activates that mode via
`view::applyMode`), with the grid offset below the header.
---
## Milestone 7 — capture action family ## Milestone 7 — capture action family
**Goal:** Bindable capture actions for master / selected tracks / selected items / **Goal:** Bindable capture actions for master / selected tracks / selected items /
razor area, each with wet-dry + tail options. CONTEXT.md §actions, Build order 7. razor area, each with wet-dry + tail options. CONTEXT.md §actions, Build order 7.
-32
View File
@@ -79,35 +79,3 @@ landed milestone.
in int64 but exceed `INT_MAX` are implementation-defined. Hardening candidate in int64 but exceed `INT_MAX` are implementation-defined. Hardening candidate
— add bounds check before the cast when integer-field validation is in scope. — add bounds check before the cast when integer-field validation is in scope.
---
# Phase D — Design View (parallel to the M0M11 capture roadmap)
> **Separate phase namespace.** The M-numbers belong to the capture pillar
> (M0M11, M4 in flight). Design View is an orthogonal feature on its own track,
> so it uses a **lettered** namespace (D1, D2, …) rather than extending the M-line.
> This keeps the two roadmaps from colliding on numbering and reads correctly:
> Phase D is not "the twelfth capture step," it's a different pillar. Authoritative
> spec: **CONTEXT.md §Design View**. Product framing: `docs/product/design-view.md`.
> When a point lands, doc-keeper moves it to `COMPLETED.md`.
## D5 — in-window toggle affordance (UI)
**Goal:** The segmented mode switch in the ReaSampler / bank_panel window header.
CONTEXT.md §Design View (UI). **Verify (in DAW):** Segmented control shows current
mode (lit segment), one click flips modes via the D4 toggle action, per-mode
membership count visible, offlined-FX caveat surfaced as a tooltip.
- [ ] Segmented mode switch `[ Arrange | Design ]` in the window header; active lit.
- [ ] Wire the switch to the toggle/activate actions from D4.
- [ ] Per-mode membership count display.
- [ ] Offlined-FX re-init caveat as a tooltip on the switch.
## Phase D open questions
- **Snapshot durability across save-while-parked** — persisted here by decision;
lean alternative is force-restore-to-Arrange on save (product notes item 4).
(touches D3)
- **Reconcile on delete/restructure** — tagged leaf deleted or folder restructured
while parked leaves a stale GUID; ignore-and-prune on next toggle/open.
(touches D1/D2)
- **Screenset coexistence** — Design View drives the same flags a screenset recall
would; confirm last-writer-wins is not surprising. (touches D2)