Repository navigation
Recording #1030 follow-up: outputs-drill judge excuses only real held frames - #1038
Merged
Merged
Conversation
Held pictures during a video stall would have turned a passing drill into a failing one (iso-pixel-verdict counted them as repeats) although no output identity was lost. - Snapshot: every recording stream reports heldFrames (and ISOs framesPlacedAtHold), published through publishIsoTrack / the Program session like framesWritten. - iso-pixel-verdict.py: a repeat is excused only when it repeats the immediately preceding picture >= 1 s (minus one frame period) after it, using sorted packet PTS, AND the excused count equals the writer's heldFrames; any other repeat, or a count mismatch, fails. - outputs-drill-judge.py passes heldFrames through and reports "held=N, source stalled (longest arrival gap ...)" on a passing row. - The writer now triggers a hold 1.5 s behind and places it 0.5 s behind the audio, so every hold is >= 1 s after the frame before it. - Review nits: last video PTS/end come from the sample's placed time; videoFramesBehindHold is reported (drain line behind_hold=, snapshot framesPlacedAtHold). - Pinned: a source stall without holds never counted as missing arrivals (the trace only expects offered arrivals); documented in docs/qa/outputs-drill.md. Native suite (COREVIDEO_CAPTURE_TESTS=1): 1888 passed, 0 failed. scripts/qa test_iso_pixels + test_outputs_drill: 37 passed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- The close-time tail hold (reconcileTail) is published per ISO as tailFrames; iso-pixel-verdict excuses exactly one trailing repeat when it is the file's last frame repeating the one before it and tailFrames==1. A stall that runs through Stop no longer fails as repeated=1 or as "writer reported N, file shows N+1". - The hold tolerance is the median packet interval clamped to 1/frameRate (snapshot frameRate, 1/24 s without one): on a mostly-stalled file the median approached 1 s and collapsed the threshold. - Fixtures: stall through Stop (tail closer and further than 1 s, and without tailFrames it fails), a mostly-holds file, and the first hold moved one frame period past the threshold. - Docs: iso-recording.md carries the 1.5 s-trigger re-measurement (+490 KB, 3,840 B, 27-28 holds); outputs-drill.md no longer says the pass rule is unchanged, states the repeated column excludes excused repeats, and names the accepted stale-duplicate-in-a-hold-slot hole; the drill rule string says excused holds pass as held=N. - CI runs test_iso_pixels and test_outputs_drill. Judge tests: 39 passed. MF recording tests: 38 passed. Native suite (COREVIDEO_CAPTURE_TESTS=1): 1888 passed, 0 failed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…y gate (#1030) Dated amendment beside the 2026-10-22 outputs-only gate ruling in CLAUDE.md and docs/qa/outputs-drill.md, plus the README gate sentence: a writer-reported held frame during a source stall passes as a labelled, counted, source-caused repeat under the three #1038 conditions; zero tolerance remains for anything the pipeline loses or duplicates; the row must read "held=N, source stalled". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.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.
Follow-up to #1035 (#1030), which merged at f06ac63 before this commit was pushed.
PR #1035 holds the last picture while a source's video is stalled. A held picture decodes to the previous identity, so
iso-pixel-verdict.pycounted it as a repeat. A stalled source would therefore have turned a passing outputs drill into a failing one, even though no output identity was lost. This PR teaches the judge to recognise those holds, without tagging anything in the file.heldFrames, and each ISO also reportsframesPlacedAtHold. Both are published throughpublishIsoTrackand the Program session, likeframesWritten.iso-pixel-verdict.pyexcuses a repeat only when all of these hold; any other repeat, or a count mismatch, fails:heldFrames.outputs-drill-judge.pypassesheldFramesthrough, and a passing row reportsheld=N, source stalled (longest arrival gap ...), so the stall is never a silent pass.videoFramesBehindHoldis reported:behind_hold=on the drain line andframesPlacedAtHoldin the snapshot.docs/qa/outputs-drill.mdand pinned bytest_iso_pixels.test_a_source_stall_without_holds_loses_no_arrival.Tests:
COREVIDEO_CAPTURE_TESTS=1, Windows dev build): 1888 passed, 0 failed.test_iso_pixelsandtest_outputs_drill: 37 passed. The new cases are a healthy file withheld=0, a stall matching the hold pattern that passes and reportsheld, an adjacent duplicate that fails, an earlier-identity repeat that fails, hold-count mismatches that fail, and untimed repeats that are never excused.scripts/qadiscovery: 130 tests. The one error is intest_monitor_evidence, which refuses to run under the packaged Microsoft Store Python on this machine; it fails the same way without this change.Review round (0b752cb)
Close-time tail hold.
reconcileTail's final repeat is now published per ISO astailFrames. The judge excuses exactly one trailing repeat, and only when it is the file's last frame, it repeats the frame before it, andtailFrames == 1. Before this, a stall that ran through Stop failed withrepeated=1, or with "writer reported N, file shows N+1". There is now a fixture for a stall that runs through Stop, with the tail closer than 1 s and further than 1 s after the last hold; withouttailFramesthe same file fails.Tolerance clamp. The hold tolerance is the median packet interval clamped to
1/frameRate, using the snapshotframeRate(1/24 s when there is none). On a mostly-stalled file the median approached 1 s, which collapsed the threshold toward zero. There is now a fixture for a file that is mostly holds, and the first hold in the hold-pattern fixture now sits one frame period past the threshold instead of exactly on it.Re-measurement with the 1.5 s hold trigger (30 s audio-only phase, 640x360 MF test file):
queued_bytesat Finalizestall_max_queued_bytes)iso-recording.mdnow carries these numbers.Docs:
outputs-drill.mdno longer says the pass rule is unchanged. It now states that therepeated=column excludes excused repeats by design, and names the accepted narrow hole: a stale-stamped upstream duplicate that lands in a hold's slot is pixel-identical to the hold and passes.held=N.CI:
.github/workflows/ci.ymlnow runstest_iso_pixels.pyandtest_outputs_drill.py.Tests:
EncoderRecordingSession.*): 38 passed.COREVIDEO_CAPTURE_TESTS=1): 1888 passed, 0 failed.Gate amendment (a92daf5)
The owner's ruling of 2026-10-23, 23:27 EDT, is now recorded as a dated amendment next to the 2026-10-22 outputs-only gate ruling, in
CLAUDE.mdanddocs/qa/outputs-drill.md. The README's gate sentence links to it.heldFrames.tailFramesis 1.held=N, source stalled.Not verified: the judge has not been run on a real drill with an actual source stall. The QA identity stamps were not available in the MF test files.
🤖 Generated with Claude Code