Report audio that outlives the video; scope the cover family to the delivered opening - #24
Merged
Merged
Conversation
… cover family to the delivered opening
Sync of the two remaining delivery-QA gaps from Orkas release_1.6.5
(f7668adb6 adapted, 274678ccf/bafbdcda8 cover scoping), each reshaped
to what OSS's pipeline actually does:
- mix A/V mismatch: upstream hard-fails on TRUNCATED narration because
its mix uses -shortest. OSS's mix has no -shortest and amix runs to
the longest input, so the failure shape here is the opposite — the
written file carries audio past the video's end (sound over a frozen
or absent picture). mix() now probes its own OUTPUT and reports
av_mismatch {video/audio/overrun} past 0.3s, appends a plain-language
warning, and the coverage 'over' message stops claiming a truncation
that never happens. stage-assemble tier 3 names the rule: never
deliver a file whose sound outlives its picture.
- Cover family scoped to the delivered opening: cover semantics are a
whole-video property — frame 0 of the DELIVERED video is its poster —
yet every AUTO middle segment was cover-blocked over a poster it will
never be. `ovs draft --not-opening` (MCP not_opening) skips the cover
contract in designContractIssues, the rendered cover checks in
runContractHtmlQa, and downgrades the first-frame label from
EMPTY_HOOK_FRAME to BLANK_SAMPLE_FRAME — still an error, because a
blank first frame on a middle segment is a visible gap at the cut.
stage-assemble passes the flag for every non-opening compose child.
Deliberately NOT ported (again, with the reason recorded): the
narration-map audio-coverage check (D22) — narration-map.json has no
writer anywhere in OSS, so a check against fields nobody produces would
be dead code; it needs the map writer first.
Verified: full OVS_E2E=1 suite 287/288. Real-ffmpeg case proves the
overrun file is written and reported ('over' + av_mismatch, no
"truncated" claim); unit cases pin cover-family skip vs non-cover gaps
for non-opening segments; a draft integration shows the middle segment
moving past E_DESIGN_CONTRACT_BLOCKED to the next real gate while the
opening posture still blocks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL7mRpmEphLAbcH7YmABnV
Bumps the pinned render backend (packages/tools dependency, the npx
fallback spec in DEFAULT_HYPERFRAMES_SPEC, and the README mentions).
Compatibility verified against everything OSS actually invokes:
- Full OVS_E2E=1 suite 287/288 green, including the real hyperframes
render e2e and the draft pipeline.
- Real `ovs snapshot` end-to-end on 0.7.106: the frame naming contract
(`frame-<NN>-at-<T>s.png`, index-ordered), contact-sheet.jpg, multi
`--at`, and `--describe false` all behave as the preview-evidence
code assumes.
- Every flag OSS passes still exists (snapshot --at/--describe/
--output, render --output/--quality, check --json, lint); the
check --json section shape is unchanged, so the draft disposition
parser keeps working.
Capability probe (the reason this upgrade was tried first): 0.7.106
still exposes NO deterministic per-element visibility evidence. The
pinned-scene fixture (`#scene-hook{opacity:1!important}` overlaying
every later scene) passes `check --json` with ok:true and zero
findings, exactly as on 0.7.60; `inspect` is a deprecated overflow
checker; `snapshot --describe` remains Gemini-vision (non-deterministic,
needs GEMINI_API_KEY). Building the INACTIVE_SCENE_VISIBLE-class
checks therefore still requires a headless-browser DOM sampler — a
separate dependency decision, not part of this bump.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VL7mRpmEphLAbcH7YmABnV
Upgrade hyperframes 0.7.60 → 0.7.106
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.
Batch 11 of the release_1.6.5 sync. Stacked on #23. Re-mapped from Orkas
f7668adb6(adapted — see below) and the cover-scoping half of274678ccf/bafbdcda8.1. The mix's A/V mismatch, reported honestly
Upstream hard-fails a mix that TRUNCATES narration — its filter uses
-shortest, so an over-long track really loses audio. Porting that verbatim would assert a falsehood here: OSS's mix has no-shortestandamixruns to the longest input, so the failure shape is the opposite — the written file carries audio past the video's end, playing over a frozen or absent picture. Now:mix()probes its own output and reportsav_mismatch { video_duration_sec, audio_duration_sec, audio_overrun_sec }past 0.3s, with a plain-language warning appended to the coverage report.overmessage stops claiming "will be truncated" — a claim the real-ffmpeg test proves false.2. The cover family belongs to the delivered opening
Cover semantics are a whole-video property — frame 0 of the delivered video is its poster — yet every AUTO middle segment was cover-blocked (
COVER_CONTRACT_INCOMPLETE, rendered cover checks,EMPTY_HOOK_FRAME) over a poster it will never be.ovs draft --not-opening(MCPnot_opening):designContractIssuesand the rendered cover checks inrunContractHtmlQa;EMPTY_HOOK_FRAMEtoBLANK_SAMPLE_FRAMEbut stays an error — a blank first frame on a middle segment is a visible gap at the cut;Deliberately not ported
The narration-map audio-coverage check (upstream
NARRATION_MAP_AUDIO_COVERAGE_INCOMPLETE):narration-map.jsonhas no writer anywhere in OSS — a check against fields nobody produces is dead code. It needs the map writer first; recorded as the follow-on.Verification
Full
OVS_E2E=1suite 287/288. Real ffmpeg: a 4s tone on a 2s base →over+av_mismatch.audio_overrun_sec > 1, warning says "outlives its video", and no "truncated" claim. Unit: cover family skipped for non-opening while non-cover gaps still block. Draft integration: the same missing-cover contract blocks as the opening and moves past the design gate as a middle segment.🤖 Generated with Claude Code
https://claude.ai/code/session_01VL7mRpmEphLAbcH7YmABnV