HAC-336: assemble the final cut, and gate it against the evidence it shows - #37
Open
qmarcelle wants to merge 2 commits into
Open
HAC-336: assemble the final cut, and gate it against the evidence it shows#37qmarcelle wants to merge 2 commits into
qmarcelle wants to merge 2 commits into
Conversation
…shows The judge-facing video, as a repository-native contract. HAC-336 owns the edit and no facts: every number on screen was frozen by HAC-330, HAC-343 or HAC-324 before this package existed, and each of the six new boards reads those files rather than restating them. 3:49.5 against the 4:00 ceiling. 1920x1080, H.264, no audio track. The cut is twenty-one still holds joined by a 0.4s crossfade, so the only motion in four minutes is a state change between two frozen frames. Two proof classes, separated by HAC-333's SB-06 reset at B09 and kept apart mechanically. Before it: the HAC-330 counterfactual and the HAC-343 bounded four-arm evaluation, on paper. After it: the HAC-324 authoritative filmed run -- correlation ilk-hac340-cloud-1787536029323, five frames captured while a real gemini-3.5-flash agent traversed Google ADK 1.35.1 on Cloud Run through the Interlock MCP proxy -- on ink. The gate refuses class-B material before the reset, class-A material after it, and the frozen HAC-340 reference run's correlation id anywhere in judge-facing copy. Three decisions worth naming. The architecture board is new rather than reused. IL-DIAG-011 and IL-DIAG-012 already explain this topology, and they also name proxy-00002-wzf and correlation ...1786730369123, which belong to the frozen reference run. Putting either beside filmed footage would place two run identities in one act, which is the collapse HAC-324 exists to prevent. IL-DIAG-020 is bound to the filmed run and to nothing else. The only operation applied to filmed evidence is a crop: a rectangle of the original pixels, scaled uniformly, with chrome drawn around it. A 1920x1080 terminal capture with its content in the top third is unreadable at video bitrates. Every crop rectangle is declared in the cut and compared by the gate, so a crop that quietly excluded an inconvenient line shows up as a rectangle that moved. There is no audio, and the gate fails if one appears. HAC-333 froze this cut as muted. The captions carry the narration text so a voice-over is later a matter of reading them aloud; synthetic speech was not generated, because a channel no gate can check and no human spoke is not an accessibility feature. The gate is Node builtins only -- it reads the committed MP4's own moov boxes rather than shelling out to ffprobe -- because a gate that needs a tool CI does not have is a gate that gets skipped, and a skipped gate reads as a pass. Twenty eight cases in test/hac-336-film-gates.test.mjs prove it fails on the defects it exists to catch. The cold read has not been run. media/hac-341/cold-read/ is the protocol for this cut too, and until three real readers complete it nothing here describes the media as frozen.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
SonarCloud flagged javascript:S4036 twice on build-video.mjs: invoking a bare `ffmpeg` through execFileSync resolves it through PATH, so whatever the first writable directory on PATH offers is what encodes the submission video. The finding is right, and not only about substitution. The binary that produced the final cut should be something the render manifest can state, not whatever the shell found that afternoon. `resolveFfmpeg()` searches a fixed list of absolute locations, honours an FFMPEG override that must itself be absolute, and fails with the list it looked in rather than falling back to a name lookup. The resolved path is now recorded as `encoderPath`. The re-encode produced byte-identical output, so only the manifest moved.
|
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.



Closes the HAC-336 assembly. 3:49.5 against the 4:00 ceiling, 1920×1080 H.264, no audio track, 21 beats.
media/hac-336/exports/IL-MOT-020-interlock-final-cut-1920x1080.mp4What this owns
The edit, and no facts. Every number on screen was frozen by HAC-330, HAC-343 or HAC-324 before this package existed; the six new boards read those files rather than restating them.
evidence/cut.jsonis the one authored file — beats, holds, sources, proof classes, narration, claim citations — and everything else undermedia/hac-336derives from it plus frozen evidence.Two proof classes, one reset
HAC-333's SB-06 lands at B09, and the separation is mechanical, not editorial.
140 > 130→WITHHOLD_SERIALIZE→120 <= 130, checks 24/24, perturbed evidence →ALLOW_PARALLEL→140 > 130) and HAC-343's bounded four-arm evaluation. Paper field.ilk-hac340-cloud-1787536029323: five frames captured while a realgemini-3.5-flashagent traversed Google ADK 1.35.1 on Cloud Run through the Interlock MCP proxy, producingALLOW+ receipt, anEXECUTEDmutation at105 <= 130, an independently authenticatedOBSERVEDread-back atalpha=45, and Cloud Logging correlation. Ink field.The gate refuses class-B material before the reset, class-A material after it, a filmed capture presented under any class but B, and the frozen HAC-340 reference run's correlation id anywhere in judge-facing copy.
Three decisions worth review
The architecture board is new rather than reused.
IL-DIAG-011andIL-DIAG-012already explain this topology — and they nameinterlock-hac340-proxy-00002-wzfand correlation…1786730369123, which belong to the frozen reference run. Beside filmed footage that would put two run identities in one act, the collapse HAC-324 exists to prevent.IL-DIAG-020is bound to the filmed run and nothing else.The only operation applied to filmed evidence is a crop. A rectangle of the original pixels, scaled uniformly, chrome around it. No recolouring, no redaction, no compositing, no text inside the stage. Every crop rectangle is declared in the cut and compared by the gate, so a crop that quietly excluded an inconvenient line reads as a rectangle that moved. All five promoted scenes appear; the gate fails if one is dropped.
There is no audio track, and the gate fails if one appears. HAC-333 froze this cut as muted. The captions carry the narration so a voice-over later is a matter of reading them aloud; synthetic speech was not generated, because a channel no gate can check and no human spoke is not an accessibility feature.
The gate
pnpm run check:film— Node builtins only. It reads the committed MP4's ownmoovboxes rather than shelling out toffprobe, because a gate that needs a tool CI does not have is a gate that gets skipped, and a skipped gate reads as a pass.It fails on: a cut over four minutes; an encoded duration that disagrees with the derived one; a frame rebuilt after the encode; a filmed frame whose bytes do not hash to the digest the HAC-324 capture manifest promoted; a promoted scene dropped without record; a crop that moved; a claim citation with no ledger row; a filmed-run row whose JSON pointer stopped resolving; a forbidden phrasing asserted without negation; a missing boundary statement; the HAC-343 ablation control separated from its comparison; a beat in the opening thirty seconds with no muted reading; a caption drifted from its narration; an audio track; a declared input whose bytes moved; a declared revision the evidence no longer carries.
28 cases in
test/hac-336-film-gates.test.mjsprove it fails on each.Gates run locally
pnpm run check(12 gates, now includingcheck:film)pnpm run typecheckpnpm run buildpnpm run testCold read — not run
media/hac-341/cold-read/is the protocol for this cut too: three technically competent readers unfamiliar with the build, one at a time, no pre-explanation. No result is claimed. Until three real readers complete it, this package staysREADY_FOR_HUMAN_TEST, nothing describes the media as frozen, and HAC-337 does not start.Known, and deliberately not reopened
The HAC-335 freshness audit's gate gap — the package freshness gate does not independently assert
capturedFromShaequals the capture manifest's capture revision — is untouched. Final assembly demonstrated no concrete correctness problem arising from it, so expanding HAC-336 into gate engineering would be scope the issue does not authorise.