Ξ-W2-T1 remediation: print master gain into the bake, derive the window from the dialed sound, reset play mode to Trigger

This commit is contained in:
2026-08-01 17:05:28 -04:00
parent 60308a3655
commit 39c2d1cdb4
31 changed files with 679 additions and 201 deletions
+3 -2
View File
@@ -44,8 +44,9 @@ This directory owns two cross-artifact contracts specifically:
namespace via `reaper_bridge::writeUsageExtState` — an entry point that is
**prefix-guarded** (accepts only `rsusage_`-prefixed keys, refuses all others), so the
read-only-bank invariant is structurally enforced. Direction: the instrument writes
usage keys; the extension reads them — the one sanctioned instrument→ext-state write,
a deliberate exception analogous to `assignment_request` on the other wire.
usage keys; the extension reads them — one of the two sanctioned instrument→ext-state
writes (`bake_wire`'s `rsbake_` request key is the other), a deliberate exception
analogous to `assignment_request` on the other wire.
Usage records are **never cleared by the instrument at teardown** (REAPER destroys the
plugin instance when an FX chain is set offline, including Design View's CPU-park, so a
terminate-time clear would strip a still-live instance's record); liveness is decided
+1
View File
@@ -26,6 +26,7 @@ BakeStatus statusFromWire(int raw) {
case BakeStatus::StagedMissing:
case BakeStatus::NoSource:
case BakeStatus::IndexRejected:
case BakeStatus::WrongProject:
return static_cast<BakeStatus>(raw);
}
return BakeStatus::Failed;
+5 -8
View File
@@ -2,14 +2,10 @@
// bake_wire — the resample bake's request/outcome pair, on ONE per-instance ext-state key
// ("rsbake_<instanceGuid>"). Pure: no REAPER/VST3/SWELL/vendor includes.
//
// The instrument writes a BakeRequest, invokes the extension's bake action synchronously,
// and reads the BakeOutcome the action wrote back over the same key. That is a call and a
// return in one UI tick — deliberately NOT the poller/nonce handshake this seam once
// spiked; nothing here may grow a claim protocol.
//
// `generation` exists for the same reason it does on assignment_request: a repeat bake of
// the same source is otherwise indistinguishable from a stale value, and an outcome whose
// generation does not echo the request is a leftover, not an answer.
// A call and a return in one UI tick — deliberately NOT the poller/nonce handshake this
// seam once spiked; nothing here may grow a claim protocol. `generation` is a wall-clock
// stamp: it distinguishes a repeat bake from a leftover, and dates a request the extension
// must refuse rather than answer to nobody.
#include <cstdint>
#include <optional>
@@ -52,6 +48,7 @@ enum class BakeStatus : int {
StagedMissing = 3, // the staged file was gone or unreadable
NoSource = 4, // the source capture is not in any bank
IndexRejected = 5, // the bank refused the add
WrongProject = 6, // the request belongs to a project tab this extension has not loaded
};
// What the extension did. On Ok the four sample fields describe the landed entry, so the
+5 -5
View File
@@ -11,11 +11,11 @@
// decisions (what to write on publish, which records count at prune time) are
// pure and provable without a DAW; shells only move strings.
//
// The INSTRUMENT writes usage keys, the EXTENSION only reads them — the one
// sanctioned instrument->ext-state write. It does not weaken the
// read-only-bank invariant: the instrument publishes only its own
// per-instance key, never banks/view/tail/assign; the bridge's write entry
// point structurally accepts only "rsusage_"-prefixed keys.
// The INSTRUMENT writes usage keys, the EXTENSION only reads them — one of the
// two sanctioned instrument->ext-state writes (bake_wire's request key is the
// other). It does not weaken the read-only-bank invariant: the instrument
// publishes only its own per-instance key, never banks/view/tail/assign; the
// bridge's write entry point structurally accepts only "rsusage_"-prefixed keys.
//
// Every failure, ambiguity, or uncertainty here fails safe toward PROTECT (the
// territory-wide asymmetry, stated in core/tracking/CLAUDE.md). Three folds enforce