From af5f7ee9121a74211af7c1fa0e28b019338b9466 Mon Sep 17 00:00:00 2001 From: daniel-c-harvey Date: Thu, 23 Jul 2026 17:14:01 -0400 Subject: [PATCH] docs(plan): record Phase D2 two-canvas waves; archive landed D2-W1 Add a Phase D2 (two-canvas) section to PLAN.md with the open D2-W2 (shell) and D2-W3 (actions, persist, UI) waves in house style. Archive the landed D2-W1 pure view_mode_model lane extension in COMPLETED.md. --- COMPLETED.md | 23 ++++++++++++++++++++ PLAN.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/COMPLETED.md b/COMPLETED.md index dcc69d0..d92030f 100644 --- a/COMPLETED.md +++ b/COMPLETED.md @@ -261,6 +261,29 @@ membership count visible, offlined-FX caveat surfaced as a tooltip. --- +## D2-W1 — view_mode_model lane extension (pure) +**Goal:** Extend D1's pure planner to item level for the two-canvas sub-phase: +lane↔mode mapping, a managed-vs-manual lane-ownership index, managed-only item-lane +ops in the toggle planner, the "which lanes may this toggle touch" query, the +auto-tag decision (manual-lane items exempt; pre-existing ⇒ Arrange), and JSON +round-trip of the lane index. REAPER-free, unit-tested; mirror of D1. CONTEXT.md +§Two-canvas sub-phase (Module architecture — pure). +**Verify:** CTest green; D1 behavior and tests unchanged. + +- [x] Lane↔mode mapping: which lane maps to which mode, which `C_LANEPLAYS` value + per mode. +- [x] Lane-ownership index: per (track GUID, lane) managed-which-mode vs manual; + managed-only item-lane op family alongside the existing track-flag op family. +- [x] "Which lanes may this toggle touch" query (managed only) — planner emits lane + ops for managed lanes only, never for manual lanes. +- [x] Auto-tag decision (pure): new track/item GUIDs + active mode ⇒ membership + writes; manual-lane items exempt; pre-existing ⇒ Arrange. +- [x] JSON round-trip of the lane-ownership index. +- [x] Tests: managed/manual partition; toggle-touches-managed-only; auto-tag + exemption for manual-lane items; JSON lossless; D1 behavior/tests unchanged. + +--- + ## Milestone 7 — capture action family **Goal:** Bindable capture actions for master / selected tracks / selected items / razor area, each with wet-dry + tail options. CONTEXT.md §actions, Build order 7. diff --git a/PLAN.md b/PLAN.md index f47c8c6..fb4682d 100644 --- a/PLAN.md +++ b/PLAN.md @@ -151,6 +151,67 @@ then trims at the -72 dB decay point (± inherent realtime tolerance); realtime --- +# Phase D2 — Two-canvas (item-level mode projection; additive to D1) + +> **Design View sub-phase.** Extends D1's track-level mode projection to **item +> level** via REAPER 7 fixed lanes: on a track present in both stances, each mode +> owns a fixed lane — the active mode's lane shows and plays, the inactive mode's is +> hidden and silenced — so a Design take and an Arrange take can share the same +> track and time position without colliding on the view. Nothing in D1 changes. +> Runtime floor rises to **REAPER 7** for this sub-phase (no version-gate branch; +> below v7 it is simply unavailable). Authoritative spec: **CONTEXT.md §Two-canvas +> sub-phase (Phase D2 / Phase E)** and the surrounding §Design View — additive phase +> spec. Product framing: `docs/product/design-view.md` §Two-canvas direction. When a +> point lands, doc-keeper moves it to `COMPLETED.md`. +> +> **D2-W1 (pure lane extension) has landed** — see `COMPLETED.md`. + +## D2-W2 — shell: lane application + new-content detection +**Goal:** The view shell applies the planner's managed-lane ops in the DAW and the +bank_panel timer detects new content and auto-tags it to the active mode. Resolves +the two flagged implementation design points (I_FIXEDLANE reorder/renumber +fragility; the auto-tag / manual-lane detection heuristic). See CONTEXT.md +§Two-canvas sub-phase (Module architecture — shell; New-content detection). +**Verify (in DAW):** Toggling a mode shows + plays only the active mode's managed +lane, hides + silences the inactive-mode lane, and **never touches a manual lane** +(its `C_LANEPLAYS` stays exactly as the user set it); new content created while a +mode is active is tagged to that mode; pre-existing content stays Arrange (no +mass-tag on the first poll after open). +**Depends on:** D2-W1. + +- [ ] Apply managed-lane ops in the view shell (`I_FREEMODE`/`I_FIXEDLANE`/ + `C_LANEPLAYS`/`B_FIXEDLANE_HIDDEN` via the item/track info setters; + `UpdateTimeline()` after `I_FREEMODE`); **managed lanes only, never manual**. + Verify every flag name/signature against the SDK header. +- [ ] New-content detection on the bank_panel timer: diff the live track/item GUID + set against the previous poll; tag any GUID new since the last poll to the + then-active mode, with a **first-poll-after-open guard** (pre-existing ⇒ Arrange, + no mass-tag) and the **manual-lane exemption** (items in a manual lane not tagged). +- [ ] Resolve the manual-lane detection heuristic (which new items are exempt) and + the `I_FIXEDLANE` lane-identity fragility (index survival across lane + reorder/renumber/deletion) — the two open design points from CONTEXT.md. +- [ ] D2-W1 review polish: document the one-managed-lane-per-mode-per-track + exclusivity assumption in `laneModeState` (comment / debug-guard); clarify the + `serialize()` one-line style note; optional round-trip tests for the + last-writer-wins lane-replace contract. + +## D2-W3 — actions, persist wiring, panel UI +**Goal:** Any new lane/mode-management actions, the persist slice serializing the +lane-ownership index alongside the membership index, and any panel UI indicator. +See CONTEXT.md §Two-canvas sub-phase (Module architecture — persistence). +**Verify (in DAW):** The lane-ownership index survives Save / Save As / reopen +(rides in the `"reasampler"` `view_state` alongside the membership index); +lane/mode-management actions are registered and bindable. +**Depends on:** D2-W2. + +- [ ] Any new lane/mode-management actions (`command_id`/`gaccel`/`hookcommand`); + bindable in the Actions list. +- [ ] Persist slice: serialize/deserialize the lane-ownership index in the + `"reasampler"` `view_state` section, alongside the membership index. +- [ ] Any panel UI indicator for lane/mode state. + +--- + # Phase B — Multi-bank (parallel to the M0–M11 capture roadmap and Phase D) > **Separate phase namespace.** The M-numbers belong to the capture pillar