Archive Milestone 3 in docs

Move completed M3 (offline capture spike) from PLAN.md to COMPLETED.md; close
the render-command and bank-format open questions; add capture_paths_tests to
the CLAUDE.md targets table and note M8 is dialog-free.
This commit is contained in:
2026-07-22 18:54:43 -04:00
parent 60379c06b6
commit a9ba532f07
3 changed files with 33 additions and 25 deletions
+2 -23
View File
@@ -14,26 +14,6 @@ it here and appends it to `COMPLETED.md`.
---
## Milestone 3 — Offline capture spike (REAPER shell)
**Goal:** Offline-render the time-selection master mix to a wav in the project
bank folder, add a `Sample`, log it. The render-driving spike. CONTEXT.md
§REAPER API surface (offline render), Build order 3.
**Verify (in DAW):** Headless (no-dialog) render runs; file lands in the
project-relative bank folder; a `Sample` is added to the in-memory `BankIndex`.
**Bit-identical repeats:** two identical requests produce byte-identical files.
**Exact bounds:** rendered length matches the requested range (no rounding, no
added silence without an explicit tail).
- [ ] `ICaptureBackend` interface + `CaptureRequest` (source mode, time range,
wet/dry, tail, SR/bit-depth/channels, output path). CONTEXT.md §capture.
- [ ] `OfflineRenderBackend`: drive `GetSetProjectInfo` render settings +
`GetSetProjectInfo_String` file/pattern/format; **verify every flag against
`vendor/reaper-sdk/sdk/reaper_plugin_functions.h`.**
- [ ] Resolve the no-dialog render command/flag on the current REAPER build
(open question) and confirm it runs headless.
- [ ] Populate a `Sample` from the finished file; hand to `bank_model`; console-log.
- [ ] Verify bit-identical repeats and exact-bounds by hand on a known range.
## Milestone 4 — persist (index ↔ project ext state)
**Goal:** Write the `BankIndex` JSON to project ext state, reload on project open;
project-relative path resolution. CONTEXT.md §persist, §Persistence & paths.
@@ -89,6 +69,8 @@ bank entries. CONTEXT.md §capture (realtime), §Precision invariants.
into the bank; **non-destructive** — temp track removed cleanly, source routing
and user monitoring restored unchanged.
**Note (from M3):** The realtime backend captures during playback and does NOT invoke the offline-render path, so it is inherently dialog-free (no render-progress window) — a secondary benefit beyond hardware/performed-FX capture.
- [ ] Hidden-track resample recipe (`I_RECMODE`/`I_RECINPUT`/`I_RECARM`,
`CSurf_OnRecord`/`CSurf_OnStop`); verify record-mode values against SDK.
- [ ] Resolve wet-master routing that does not alter user monitoring (open
@@ -136,11 +118,8 @@ invariants; drag-out places a valid file in the OS target.
Carried from CONTEXT.md §Open questions — keep visible until each is closed by a
landed milestone.
- **No-dialog render command/flag** on the current REAPER build. (blocks M3)
- **Realtime wet-master routing** that captures master output without altering the
user's monitoring. (blocks M8)
- **Bank audio format:** wav bit-depth default; allow float for wavetable
fidelity. (touches M3, informs M1 `Sample` fields)
- **Thumbnail cache:** recompute peaks vs store peak bins alongside the index.
(touches M2/M4/M5)
- **`parseInt` narrowing hardening:** `src/bank_model.cpp` `parseInt` casts