Docs: reconcile to two-scope capture model (master removed)

Update the CLAUDE.md FX-scope invariant to item+track only; note master
removal in COMPLETED.md; drop master references from the tail spec and PLAN
Milestone T; realtime now taps the selected track.
This commit is contained in:
2026-07-23 16:42:42 -04:00
parent 2ae4c420c5
commit 92762e2b6c
4 changed files with 15 additions and 16 deletions
+6 -8
View File
@@ -173,7 +173,7 @@ as configurable — noted below — not to let a single request uncap it.)
The request already has `renderTail: bool` + `tailMs: double`. The auto-trim mode
adds a third state, so the wiring is a small enum, not a bool:
- **None** (default for null-test / verify captures, and the current three-scope
- **None** (default for null-test / verify captures, and the current two-scope
action defaults): `RENDER_TAILFLAG = 0`, `RENDER_TAILMS = 0`, normalize =
disable-all. Exact bounds. Byte-identical to today.
- **Auto** (the new user-facing default for tail-on captures): tailFlag `1`,
@@ -194,8 +194,8 @@ applies the returned values.
## The realtime path (parallel, follow-on)
The M8 `RealtimeRecordBackend` (`src/capture_realtime.cpp`) does **not** drive
`RENDER_*` at all — it records the master send into a hidden temp track over a time
selection. So none of the offline tail machinery reaches it. It needs a **parallel**
`RENDER_*` at all — it taps the selected track's own output (post-fader, pre-parent)
into a hidden temp track over a time selection (track scope only). So none of the offline tail machinery reaches it. It needs a **parallel**
tail path, and it is explicitly a **follow-on to the offline tail** (offline lands
first; realtime tail is a later increment).
@@ -260,7 +260,7 @@ held to bit-identical repeats.
dry no-tail capture re-inserted at its source position must null against the
source; a tail would extend the file past the source region and break the null.
**The tail must be OFF for null-test and verification captures** — this is a hard
rule, not a default. (The three-scope capture *actions* may default to a tail once
rule, not a default. (The two capture *actions* may default to a tail once
this ships; the *verify* action never does.)
- **Determinism holds for offline.** The offline auto-trim path is deterministic:
fixed threshold + fixed cap + a boundary-only trim = two identical requests
@@ -270,8 +270,6 @@ held to bit-identical repeats.
The tail render still goes through `FxBypassGuard` for track/item scopes
(`render_settings.h §FxBypassPlan`, `CLAUDE.md §Capture FX scope`). This is
exactly what we want: the tail is the *in-scope FX decay*.
- **Master scope:** whole chain in scope → the tail is the full master-chain
reverb/release decay. Correct.
- **Track scope:** the track's own FX are in scope, ancestors/master bypassed →
the tail is **the track's own reverb/delay decay**, not the parent bus's. A track
with a reverb plugin captures that reverb's tail; a track feeding a folder reverb
@@ -386,8 +384,8 @@ Neither is in scope now; both are single-constant seams so promotion is cheap.
trailing edge, and the tail is appended after `ENDPOS`. But a range that itself
ends in near-silence before a loud transient is the edge case to check the trim
doesn't over-eat.)
- **Auto as the action default?** Should the three shipped capture actions
(`CAPTURE_ITEM` / `CAPTURE_TRACK` / `CAPTURE_MASTER`, currently all TailMode::None
- **Auto as the action default?** Should the two shipped capture actions
(`CAPTURE_ITEM` / `CAPTURE_TRACK`, currently all TailMode::None
per `render_settings.cpp §captureActionTable`) flip to Auto tail by default once
this ships, or should tail be a separate action variant / a modifier? Product call
for Daniel. **Leaning:** a per-action-family toggle or a paired "…​with tail"