Description
Stage of #1199, filed by model
claude-opus-5-5via provideranthropic. Already
built onfeat/long-form-media(merged3f8ed222). The authoritative spec is the
plan (docs/superpowers/plans/2026-11-03-long-form-media.md, task named below) and
the design record. If they differ, the design record says what shipped.
Built: chain.duration_seconds (0f075b3, 315bfaf). The segment count and the
last segment's frame snap are derived from the length, and the video and its generated
audio are trimmed to exactly that many seconds. Given beside segments, it overrides
them and logs it (R18). It is refused with match_audio, guide_backoff and
carry_pick. The estimate scales with the derived segment count.
Observe over MCP:
run_workflowtemplates/minimax/chained-segmentswithduration_seconds: 10(not
a whole number of segments).get_jobreports the output's duration and frame count,get_output_framesgives
the last frame, andget_job_eventshas the "segments ignored" line.
Acceptance intent:
- The output's frame count equals round(seconds × fps), and its audio is the same
length. segmentsbesideduration_secondsis ignored, with a log line.- Validate refuses
duration_secondswithmatch_audio,guide_backoffor
carry_pick, naming both keys. - A template that carries both a
segmentsdefault and aduration_seconds
reference resolving to null validates.
Bench evidence: aa80458ab4f7 (duration_seconds 120 through the template), and
the drill's 90 s chain ab7f54f73b2f.
Owes: nothing. Deploy: done at 3f8ed222.
verify: run every pending: #1204 case.
Activity
dkackman commentedon Nov 7, 2026
Verified over MCP against
lemdevelop @ 85bcd33. Tester modelclaude-opus-5-5, provideranthropic.pending: #1204cases: there are none. A grep of everyregression-suite-*.mdfinds nopending: #1204line, so no suite lines needed removing. I checked the issue's acceptance intent directly instead.1. Length → frames + audio.
run_workflow templates/minimax/chained-segments {"duration_seconds": 10, "segments": 3}, jobf5cd7720d9f1, succeeded in 304.8 s.get_gallery_metadata:frame_count: 240(= round(10 × 24)),fps: 24.0,duration_seconds: 10.0,audio_stream_seconds: 10.0,frames: 320000at 32000 Hz (exactly 10.0 s).findings: [].2.
segmentsignored, with a log line.get_job_eventsseq 10:Chain 'segments' (3) ignored: 'duration_seconds' (10) sets the segment count. In this run the derived count happened to equal the 3 I passed. So I also validated{"duration_seconds": 10, "segments": 7}: the estimate was 13.5 mincatalog, the 3-segment price, not scaled to 7. That showssegmentsreally is overridden.3. The estimate scales with the derived count.
{"duration_seconds": 30}gives 31.5 min,derived, withscaled from the curated 13.5 min: segments 7 vs 3.4. Refusals. Each was an inline guide/last_frame chain with
duration_seconds: 10. The control without the extra key isvalid: true.match_audio: trueis refused atsteps[0].pipeline.chain. The message names both keys, but as a raw jsonschema dump (... should not be valid under {'anyOf': [{'required': ['segments', 'match_audio']}, {'required': ['duration_seconds', 'match_audio']}]}). That meets the acceptance, though it reads worse than the other two.guide_backoff: 17is refused:guide_backoff does not combine with match_audio or duration_seconds: ... - use 'segments'.carry_pick: {"sharpest": 6}is refused:carry_pick does not combine with match_audio or duration_seconds: ... - use 'segments'.5. A null
duration_secondsreference beside asegmentsdefault validates. The stock template with{"segments": 3}(duration_secondsresolves to its null default) isvalid: true, at 5.3 minobserved.Everything matches the acceptance intent. Closing as verified.