fix(sfx): un intent_id distinto por clip en queue_sfx_pack - #285
Merged
IAnMove merged 1 commit intoSep 9, 2026
Merged
Conversation
Wizard queue_sfx_pack reused one capability commandId as every clip's generation.sfx intent_id. Distinct prompts then 409'd after the first clip; identical prompts silently replayed the first receipt. Co-authored-by: ignaciodelcano+dcl <ignaciodelcano+dcl@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumen ejecutivo
Qué cambia
queue_sfx_packya no reutiliza elcommandIddel Wizard comointent_iddegeneration.sfxpara todos los clips. Cada clip admite su propia intención.Para qué sirve
Un pack de 2+ efectos fallaba o repetía el primer recibo porque el contrato cerrado trata
intent_idcomo idempotencia de un solo trabajo.Impacto para el usuario
En Wizard, «genera estos 3 SFX» encola tres trabajos distintos. El segundo clip ya no recibe 409 ni reproduce el primero.
Riesgo
Estado
Summary
Wizard
runRegisteredCapabilitymints onecommandIdfor thequeue_sfx_packcapability. That same id was forwarded asGenerationSubmissionContext.commandIdinto everystartGenerationcall.prepareStudioSfxSubmissionthen used it asgeneration.sfxintent_id.Backend admission (
TaskCommandConflict/intent_conflict) treats a reusedintent_idas:Concrete trigger: Wizard «genera un pack de SFX: hit, whoosh, coin» with
confirm=true. Clip 1 queues. Clip 2+ 409s or replays clip 1.The pack-level Wizard envelope keeps its own command id. Each clip now gets a fresh
generation.sfxintent vianewSfxGenerationIntentId().Overview
queueSfxPackstill opens Studio → Audio → SFX and applies each clip.startGenerationnow receives a uniquecommandId.Detailed changes
Backend
No server contract change. Admission already required unique intents for distinct payloads.
UI and Wizard
actions.ts:sfxClipSubmissionContextreplaces the packcommandIdper clip and keeps actor/capability/workflow provenance.Data, provenance and compatibility
Wizard pack envelope
commandIdis unchanged. Clip provenancecommand_idis now the per-clip intent, which matches the durable receipt.Files and ownership
ui/src/features/studio/actions.ts— mint onegeneration.sfxintent per clipui/tests/studioSfxAction.test.mjs— 3-clip pack with a shared Wizard commandIdMMAudio_prompt ?? prompt), Speech ACE residue (inverse of fix(studio): no enviar residuos de Speech en generation.music #283), legacy/api/v1/tools/upscalescope checkValidation
Date (UTC): 2026-09-09
Base SHA: 0220c80 (
feat/shared-tool-commands)Head SHA: abccd28
Validation scope: focused
python scripts/verify_clean_repo.pypython -m compileallFocused Python tests: N/A (UI-only change)
cd ui && npm run i18n:checkUI tests:
npx tsx --tsconfig tsconfig.app.json --import ./tests/setupI18n.ts --test tests/studioSfxAction.test.mjs— 7 passedcd ui && npm run lint -- --max-warnings=0cd ui && npm run buildgit diff --check— cleanE2E/smoke checks: N/A (no live GPU pack run)
Code quality
main: pending CICI and review
CI of this HEAD: pending
Independent agent review of this HEAD: pending
Human merge click (operational, not code review): pending
Reviewed at current HEAD
Earlier review; HEAD has changed since (stale)
Pending
Unavailable
Coste de la tarea
Notes and limitations
The Wizard pack remains one capability with one envelope. Only the durable
generation.sfxintent is unique per clip. Direct Studio Generate (single clip) is unchanged.Follow-up work
audio_guideas a TTS clone (inverse of fix(studio): no enviar residuos de Speech en generation.music #283)prompt(MMAudio_prompt ?? prompt)/api/v1/tools/upscalestill skips_check_asset_scopeChecklist