refactor(capture): expose offline tail as docked-panel toggle

Replace the ...-with-tail variant actions with a pure tail_control module +
a docked-panel footer toggle (Off/Auto/Manual) read by CAPTURE_ITEM/TRACK.
Default None (byte-identical); Manual fixed 2s, in-memory session lifetime.
Tail mechanism unchanged; retired the variant ids.
This commit is contained in:
2026-07-23 17:32:19 -04:00
parent 2d225258b4
commit 9a9339b90b
11 changed files with 363 additions and 90 deletions
+13 -9
View File
@@ -384,14 +384,18 @@ 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 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"
variant rather than silently changing the existing actions' behavior — the current
exact-bounds default is a documented contract and some captures (chops, wavetable
grabs) want no tail. Not blocking the offline implementation; the request-level
contract (three tail states) is independent of which action sets which.
- **Auto as the action default? — DECIDED (2026-07-23).** The two shipped capture
actions (`CAPTURE_ITEM` / `CAPTURE_TRACK`) stay `TailMode::None` by default; the
tail mode is exposed as a **settings toggle in the docked bank panel** (None / Auto
/ Manual — the footer strip, `bank_panel.cpp` + pure `tail_control`), and the plain
capture actions READ that toggle when building the `CaptureRequest`. Chosen over the
earlier "…with tail" paired-action lean: one toggle covers all three states without
doubling the action count, and the exact-bounds contract still holds because the
toggle defaults to None. The setting is an extension-session setting (default None;
persists across project loads and panel open/close within a REAPER session; resets to
None only on extension unload — i.e. fresh REAPER session; project persistence across
REAPER restarts is a follow-on). Manual ships a fixed 2 s default; a
fine-adjust affordance (+/- click zones or scroll) is a follow-on. The verify /
null-test capture still always runs `TailMode::None` regardless of the toggle.
- **Realtime tail sequencing.** Confirmed a **follow-on** to the offline tail — do
not block offline on it. Filed as a separate PLAN point.