From 845255e40436f68750814d28c61da9e29abee768 Mon Sep 17 00:00:00 2001 From: OmikronApex <45161725+OmikronApex@users.noreply.github.com> Date: Thu, 9 Jul 2026 22:17:57 +0200 Subject: [PATCH] fix(audio-effects): accept pre-rebrand chain plan schema as alias (#816) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(playback): throttle legacy bridge-hit recording; emit loop-set for manual A/B window.feedBack.getLoop() is a read surface plugins legitimately poll (note_detect HUD ticked it at ~30 Hz), but every call recorded a playback.loop-api bridge hit: compat-shim bookkeeping, a playback:bridge-hit event, and a diagnostics snapshot rebuild + stringify per call — real main-thread cost and a saturated hitCount in the capability inspector, even with no song playing. - _recordPlaybackBridge now throttles per bridgeId|surface (5 s window). Bridge hits are a 'surface still in use' signal, not a call counter. - setLoopEnd() (manual A/B buttons) now emits the same loop-set transport event as setLoop(), so event-driven consumers no longer need to poll getLoop() to see button-armed loops. Co-Authored-By: Claude Fable 5 * docs(changelog): note loop-api bridge throttle fix Co-Authored-By: Claude Fable 5 * fix(audio-effects): accept pre-rebrand chain plan schema as alias The rebrand renamed PLAN_SCHEMA to 'feedBack.audio_effects.chain_plan.v1' but shipped plugin bundles (rig_builder <= 2.9.x) still send the slopsmith-era id, so _validatePlan rejected every plan and providers fell back to their heavyweight legacy load paths (full chain rebuild per poll cycle — audible as continuous distortion during songs). Accept the old id as an explicit alias. Co-Authored-By: Claude Fable 5 --------- Co-authored-by: Claude Fable 5 --- static/capabilities/audio-effects.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static/capabilities/audio-effects.js b/static/capabilities/audio-effects.js index 467e09c..4d0d915 100644 --- a/static/capabilities/audio-effects.js +++ b/static/capabilities/audio-effects.js @@ -9,6 +9,8 @@ const SCHEMA = 'feedBack.audio_effects.diagnostics.v1'; const PLAN_SCHEMA = 'feedBack.audio_effects.chain_plan.v1'; +// Pre-rebrand plugins (rig_builder <= 2.9.x) still send the old schema id — accept it as an alias. +const LEGACY_PLAN_SCHEMA = 'slopsmith.audio_effects.chain_plan.v1'; const OWNER_ID = 'core.audio.effects'; const DEFAULT_ROUTE_KEY = 'desktop-main'; const DEFAULT_TIMEOUT_MS = 2000; @@ -734,7 +736,7 @@ const errors = []; const source = _plainObject(rawPlan); const schema = _string(source.schema || source.version, PLAN_SCHEMA); - if (schema !== PLAN_SCHEMA && schema !== '1') errors.push('Unsupported chain plan schema'); + if (schema !== PLAN_SCHEMA && schema !== LEGACY_PLAN_SCHEMA && schema !== '1') errors.push('Unsupported chain plan schema'); const planRoute = _safeRoute(source.routeKey || source.route || routeKey); if (planRoute !== routeKey) errors.push('Chain plan route does not match selected route'); const providerId = _safeId(source.providerId || provider.providerId, provider.providerId);