docs: reflect D2-W2 landing in PLAN.md / COMPLETED.md
Remove D2-W2 from PLAN.md; append completed entry to COMPLETED.md. Track-level auto-tag/park live; item-lane DAW verify deferred to post-D2-W3 (lane minting). D2-W3 left open.
This commit is contained in:
@@ -65,39 +65,6 @@ landed milestone.
|
||||
|
||||
---
|
||||
|
||||
# Milestone T — capture tail (rider on the offline render path)
|
||||
|
||||
> **Rider, not a new pillar.** Tail preservation wires into the already-shipped
|
||||
> offline `OfflineRenderBackend` (M3/M7) — no new backend, no new render trigger.
|
||||
> It takes a **T** tag (not an M-number) because it is an enhancement to landed
|
||||
> capture, sequenced independently of M8–M11. Authoritative spec:
|
||||
> **`docs/product/capture-tail.md`** (full `RENDER_*` values, the surgical
|
||||
> `RENDER_NORMALIZE`, the realtime parallel path, invariant interactions,
|
||||
> acceptance criteria, DAW-confirm items). Parameters set by Daniel: auto-trim
|
||||
> threshold **-72 dB**, max-tail cap **8 s**. When a point lands, doc-keeper moves
|
||||
> it to `COMPLETED.md`.
|
||||
|
||||
## T2 — realtime tail (follow-on to T1)
|
||||
**Goal:** The parallel tail path for the M8 realtime backend, which does not drive
|
||||
`RENDER_*`: record an 8 s-capped tail window past the range end, then **trim in a
|
||||
PCM decay-scan** to the -72 dB point (Manual = record fixed tail, skip the scan).
|
||||
See `docs/product/capture-tail.md` §The realtime path.
|
||||
**Verify (in DAW):** A realtime Auto capture of a decaying source records ≥ the range
|
||||
then trims at the -72 dB decay point (± inherent realtime tolerance); realtime tail is
|
||||
**not** asserted bit-identical (documented non-determinism).
|
||||
**Depends on:** T1, M8.
|
||||
|
||||
- [ ] Record `[start, end + clamp(tail, 8 s)]` (extend the record time selection in
|
||||
`capture_realtime.cpp`); Manual skips the scan, Auto proceeds to it.
|
||||
- [ ] Pure decay-scan helper alongside `peaks`: `lastFrameAboveThreshold(interleaved,
|
||||
channels, frames, linearThreshold) -> frameIndex` (backward scan, per-frame max-abs
|
||||
across channels, no fold); unit-tested with a synthetic decaying ramp. (Spec §realtime
|
||||
path option (a) — recommended over bending `computeEnvelope`.)
|
||||
- [ ] Realtime shell: read the recorded wav PCM into a float buffer, find the trim
|
||||
frame, rewrite the file truncated (new I/O the backend does not do today).
|
||||
|
||||
---
|
||||
|
||||
# Phase D2 — Two-canvas (item-level mode projection; additive to D1)
|
||||
|
||||
> **Design View sub-phase.** Extends D1's track-level mode projection to **item
|
||||
@@ -111,36 +78,7 @@ then trims at the -72 dB decay point (± inherent realtime tolerance); realtime
|
||||
> 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-W1 (pure lane extension) and D2-W2 (shell: lane application + new-content detection) have landed** — see `COMPLETED.md`.
|
||||
|
||||
## D2-W3 — actions, persist wiring, panel UI
|
||||
**Goal:** Any new lane/mode-management actions, the persist slice serializing the
|
||||
|
||||
Reference in New Issue
Block a user