feat(version): V4 beta-in-isolation channel via -DREASAMPLER_CHANNEL

Compile-time channel flag forks a fully isolated reaper_reasampler_beta
(namespace, command-id prefix, action names, dock ident, -beta render) from
one auditable app_version definition. Stable identity byte-unchanged.
This commit is contained in:
2026-07-26 16:06:24 -04:00
parent 0a9d8200c7
commit 5c0e3a8ccf
13 changed files with 648 additions and 224 deletions
+16 -11
View File
@@ -252,11 +252,15 @@ static void testTableHasBothScopes() {
std::set<std::string> ids;
int item = 0, track = 0;
for (const auto& def : table) {
// Every id is a non-empty CEREBELLUM_REASAMPLER_ string and is UNIQUE
// (duplicate ids would collide on registration).
std::string id = def.commandString;
CHECK(id.rfind("CEREBELLUM_REASAMPLER_", 0) == 0);
CHECK(ids.insert(id).second); // false if duplicate
// Every command SUFFIX (Phase V, V4 — the channel prefix is prepended by the shell)
// is a non-empty, UNIQUE string (duplicate suffixes would collide once composed).
std::string suffix = def.commandSuffix;
CHECK(!suffix.empty());
// The suffix is NOT prefixed with the channel family here — that is composed at
// register time. A leftover "CEREBELLUM_REASAMPLER_" in the table would be a
// double-prefix bug, so assert its ABSENCE.
CHECK(suffix.rfind("CEREBELLUM_REASAMPLER_", 0) != 0);
CHECK(ids.insert(suffix).second); // false if duplicate
// Every scope resolves to a supported offline source.
CHECK(renderSettingsFor(sourceModeForScope(def.scope), 1.0).supported);
@@ -269,16 +273,17 @@ static void testTableHasBothScopes() {
}
static void testScopeActionIdsAreTheShippedStrings() {
// Pin the shipped CAPTURE_ITEM / CAPTURE_TRACK ids so a future edit that silently
// changes them (breaking user keybindings) fails the gate.
// Pin the shipped CAPTURE_ITEM / CAPTURE_TRACK SUFFIXES so a future edit that silently
// changes them (breaking user keybindings once composed with the channel prefix) fails
// the gate. The full stable id is prefix + suffix ("CEREBELLUM_REASAMPLER_CAPTURE_ITEM").
const auto& table = captureActionTable();
std::string itemId, trackId;
for (const auto& def : table) {
if (def.scope == CaptureScope::Item) itemId = def.commandString;
if (def.scope == CaptureScope::Track) trackId = def.commandString;
if (def.scope == CaptureScope::Item) itemId = def.commandSuffix;
if (def.scope == CaptureScope::Track) trackId = def.commandSuffix;
}
CHECK(itemId == "CEREBELLUM_REASAMPLER_CAPTURE_ITEM");
CHECK(trackId == "CEREBELLUM_REASAMPLER_CAPTURE_TRACK");
CHECK(itemId == "CAPTURE_ITEM");
CHECK(trackId == "CAPTURE_TRACK");
}
int main() {