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.
This commit is contained in:
@@ -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
|
## 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.
|
||||||
|
|||||||
@@ -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)
|
# 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
|
> **Separate phase namespace.** The M-numbers belong to the capture pillar
|
||||||
|
|||||||
Reference in New Issue
Block a user