Repository navigation
C-F020: dissolve-between-shots warns on identical-rate shots due to template's pinned sample_rate (likely stale suite expectation post-#287) #453
Description
Case: C-F020 (regression-suite-complete.md), run as regression agent, model sonnet via provider anthropic, workspace regression-complete.
Call:
validate_workflow(name="templates/dissolve-between-shots", arguments={"match_levels": "rms", "shots": ["asset:qa-cast/ep4-shot1-amnesty.mp4", "asset:qa-cast/ep6-shot1-priya.mp4", "asset:qa-cast/ep7-shot1-ledger.mp4"], "score": "asset:qa-cast/ep11-bed.wav", "total_frames": 348})
→ valid, fingerprint sha256:64b6c146028ac6f6ebd41e3d3671b08f820ca739e887bd9d9c26ccc14edb5f10, then:
run_workflow(same args, acknowledged_cost={...})
→ job fd577a3209cb, succeeded in 9s.
Expected (per case text): warnings: [] — the absence of any level-spread warning is meant to prove match_levels: "rms" reaches the dissolve_videos task rather than only being accepted at validation.
Actual: warnings held one entry, not the level-spread warning:
"edit: dissolve_videos: videos carry audio at different sample rates (video 1: 32000 Hz, video 2: 32000 Hz, video 3: 32000 Hz) - resampling them all to 44100 Hz. Pass 'sample_rate' to pin a different target, or resample ahead of this step with the 'resample_audio' task."
The three qa-cast shots (ep4/ep6/ep7) are all 32000 Hz — identical to each other — but the template pins sample_rate: 44100 by default and passes it straight through to the dissolve_videos step's sample_rate argument, so the step resamples all three against that target and warns, even though the inputs don't actually disagree with each other. The message text ("different sample rates") is misleading here since it lists three identical rates.
Why this looks like schema/behavior drift, not a fresh regression: C-F020's warnings: [] expectation was verified 2026-09-13 (#128, dw 0.4.0-beta.3). The sample-rate-mismatch resampling warning was added later, by #287 (verified 2026-09-21, C-F057), which gave dissolve_videos/concat_videos the "pick highest rate or caller's sample_rate, resample the rest, warn" behavior. C-F057 itself confirms two same-rate 32 kHz shots draw no warning when the task is called directly with no sample_rate override — but templates/dissolve-between-shots always pins sample_rate: 44100 explicitly, so any all-32kHz shot set run through the template (rather than the bare task) will always trigger this warning post-#287, regardless of match_levels. That combination looks like it was never re-checked against C-F020 after #287 landed.
The C-F020 assertion itself (match_levels reaching the task) can't currently be cleanly proven with these particular fixtures at the template's default sample_rate, since the resample warning always fires first. Flagging this as suite drift rather than a new implementer bug — please confirm whether the resample warning is expected here (in which case the case needs updating, e.g. by pinning sample_rate: 32000 to match the fixtures) or whether the template's sample_rate variable descending into dissolve_videos unconditionally (even when all shots already agree) is itself a bug worth fixing.
Workspace: regression-complete. Job fd577a3209cb was cleaned up (delete_output) after this finding was recorded.
Activity
fix: #453 #454 stock joins warn only on something a caller can act on
dkackman commentedon Sep 25, 2026
Fixed in 0d3a6c9 (on develop, deployed to lem as part of e86fc20, in release PR #461): a joined-track pad or post-mux residual under one frame is now logged rather than warned, and concat_videos/dissolve_videos warn about sample rates only when the inputs disagree (converting agreeing inputs to a pinned rate is logged). Checked live on e86fc20 over REST: templates/assemble-and-score (C-F029 args) and templates/dissolve-between-shots (C-F020 args) both succeeded with warnings: [], the event log carrying the padded/resampling lines instead. Hand-off by Claude Opus 5.5 (claude-opus-5-5) via anthropic, working with Don outside the loop.