Context
The recorded workstation journey in #15252 now has executable five-beat app mechanics, but the native recorder still has no causal boundary it can use to start on the verified frame before beat one.
At current dev head 62e5669c0fb7d107f3da56a1931c7be8c0e202c2, test/playwright/e2e/workstation/WorkstationFiveBeatNL.spec.mjs:1199-1218 verifies the pristine opening state and immediately invokes the first tour operation. The normalized five-beat log remains local to the test and is only compared/asserted at :1428-1435; it is not exported as a hashable artifact.
A second film-mode defect is independently reproducible at test/playwright/e2e/utils/gpuIntent.mjs:93. A full consumer census also found test/playwright/e2e/workstation/WorkstationNL.spec.mjs:40 independently parsing the same sentinel by truthiness:
NEO_FILM_TAKE=0 ... activeLaunchArgs()
=> {"filmProfile":true,"e2eProfile":false,"hasFrameLimitDisable":false}Live latest-open sweep: checked the latest 20 open issues at 2026-07-27T07:34Z; no equivalent one-PR leaf or in-flight A2A claim exists. Knowledge Base search surfaced only the parent #15252.
The Problem
Starting the native screen recorder before the semantic opening assertions risks recording a wrong topology, dead feed, stale vessel, or wrong stage. Starting it after those assertions currently misses beat one because the test proceeds immediately. A sleep cannot bind the two processes to the same verified state.
The run also lacks an external, canonical receipt proving which normalized five-beat log completed after the recorder acknowledged readiness. A decodable video and a green test can therefore exist without a causal link between their start boundary and semantic witness.
Finally, all three consumers currently parse any non-empty NEO_FILM_TAKE value as enabled, while the intended public contract is the exact sentinel 1.
The Architectural Reality
- The Playwright journey owns semantic truth: opening dock document, pane identities, heartbeat, stage geometry, and normalized beat log.
gpuIntent.mjs:isFilmTake() is the sentinel authority consumed by both WorkstationNL.spec.mjs and WorkstationFiveBeatNL.spec.mjs; the specs do not own parallel parsers.
- The native capture runner owns recorder process timing and cannot infer worker truth from pixels.
- The boundary belongs in the test runner as an explicit file receipt handshake. It does not belong in production app code, AppleScript window heuristics, or a timing delay.
activeLaunchArgs() and WorkstationFiveBeatNL.spec.mjs consume the same film sentinel and must agree on its exact activation semantics.
The Fix
Add a film-only, all-or-none absolute-path control contract:
- The test verifies its existing pristine opening assertions.
- It writes one exclusive canonical
neo.film.take17.ready.v1 receipt and publishes its SHA-256.
- It blocks before the first visual beat until the recorder writes
neo.film.take17.go.v1 bound to that exact ready hash.
- After the journey completes, it attaches a canonical
neo.film.five-beat-semantic-receipt.v1 and, in controlled film mode, writes the same receipt to the runner-owned output path.
- All launch, pacing, video, and pixel-witness consumers select film mode through one shared exact-sentinel helper.
Contract Ledger
| Target surface |
Source of authority |
Proposed behavior |
Fallback |
Docs |
Evidence |
NEO_FILM_TAKE |
gpuIntent.mjs:isFilmTake(), consumed by WorkstationNL.spec.mjs and WorkstationFiveBeatNL.spec.mjs |
Exact string 1 selects film pacing/video/launch profile |
Unset or any other value uses ordinary E2E mode |
Inline runner JSDoc/comments |
Unit falsifier plus focused E2E |
NEO_FILM_READY_FILE, NEO_FILM_GO_FILE, NEO_FILM_RECEIPT_FILE |
WorkstationFiveBeatNL.spec.mjs |
Film-only, absolute, all-or-none control tuple |
Tuple omitted preserves an uncontrolled developer rehearsal; partial/relative declaration fails |
Inline helper JSDoc |
Negative import/list probes |
neo.film.take17.ready.v1 |
verified opening state in Scene 5 |
Canonical, exclusive file containing topology/identity/heartbeat/stage witness |
No stale-file reuse |
Schema name in receipt |
Ready hash independently recomputed |
neo.film.take17.go.v1 |
external native recorder |
Must cite exact ready SHA before beat one proceeds |
60-second fail-closed timeout |
Schema name in receipt |
Controlled headed smoke |
neo.film.five-beat-semantic-receipt.v1 |
normalized Scene 5 beat log |
Playwright attachment on every run; exclusive external file in controlled film mode |
No external file outside controlled mode |
Schema name in receipt |
Attachment/file SHA equality |
Decision Record impact
None. This is a test/capture boundary for the existing five-beat contract and does not amend an ADR.
Acceptance Criteria
Out of Scope
- Starting or stopping
screencapture.
- Recording, editing, promoting, or publishing the final film.
- Display privacy review, OCR, audio, captions, or aesthetic acceptance.
- Changes to production docking mechanics.
- Closing the parent film ticket.
Avoided Traps
- Recorder-first timing: records before semantic admission.
- Test-first timing: loses beat one.
- Fixed sleeps: correlate clocks but do not bind state.
- Pixel-derived readiness: cannot prove worker truth.
- Boolean environment parsing: treats
0 as enabled.
Related
Parent: #15252
Retrieval Hint: take 17 five-beat semantic-ready recorder go receipt
Retrieval Hint: branch codex/15252-five-beat-film, source head 62e5669c0fb7d107f3da56a1931c7be8c0e202c2
Context
The recorded workstation journey in
#15252now has executable five-beat app mechanics, but the native recorder still has no causal boundary it can use to start on the verified frame before beat one.At current
devhead62e5669c0fb7d107f3da56a1931c7be8c0e202c2,test/playwright/e2e/workstation/WorkstationFiveBeatNL.spec.mjs:1199-1218verifies the pristine opening state and immediately invokes the first tour operation. The normalized five-beat log remains local to the test and is only compared/asserted at:1428-1435; it is not exported as a hashable artifact.A second film-mode defect is independently reproducible at
test/playwright/e2e/utils/gpuIntent.mjs:93. A full consumer census also foundtest/playwright/e2e/workstation/WorkstationNL.spec.mjs:40independently parsing the same sentinel by truthiness:NEO_FILM_TAKE=0 ... activeLaunchArgs() => {"filmProfile":true,"e2eProfile":false,"hasFrameLimitDisable":false}Live latest-open sweep: checked the latest 20 open issues at 2026-07-27T07:34Z; no equivalent one-PR leaf or in-flight A2A claim exists. Knowledge Base search surfaced only the parent
#15252.The Problem
Starting the native screen recorder before the semantic opening assertions risks recording a wrong topology, dead feed, stale vessel, or wrong stage. Starting it after those assertions currently misses beat one because the test proceeds immediately. A sleep cannot bind the two processes to the same verified state.
The run also lacks an external, canonical receipt proving which normalized five-beat log completed after the recorder acknowledged readiness. A decodable video and a green test can therefore exist without a causal link between their start boundary and semantic witness.
Finally, all three consumers currently parse any non-empty
NEO_FILM_TAKEvalue as enabled, while the intended public contract is the exact sentinel1.The Architectural Reality
gpuIntent.mjs:isFilmTake()is the sentinel authority consumed by bothWorkstationNL.spec.mjsandWorkstationFiveBeatNL.spec.mjs; the specs do not own parallel parsers.activeLaunchArgs()andWorkstationFiveBeatNL.spec.mjsconsume the same film sentinel and must agree on its exact activation semantics.The Fix
Add a film-only, all-or-none absolute-path control contract:
neo.film.take17.ready.v1receipt and publishes its SHA-256.neo.film.take17.go.v1bound to that exact ready hash.neo.film.five-beat-semantic-receipt.v1and, in controlled film mode, writes the same receipt to the runner-owned output path.Contract Ledger
NEO_FILM_TAKEgpuIntent.mjs:isFilmTake(), consumed byWorkstationNL.spec.mjsandWorkstationFiveBeatNL.spec.mjs1selects film pacing/video/launch profileNEO_FILM_READY_FILE,NEO_FILM_GO_FILE,NEO_FILM_RECEIPT_FILEWorkstationFiveBeatNL.spec.mjsneo.film.take17.ready.v1neo.film.take17.go.v1neo.film.five-beat-semantic-receipt.v1Decision Record impact
None. This is a test/capture boundary for the existing five-beat contract and does not amend an ADR.
Acceptance Criteria
NEO_FILM_TAKE=0and an unset value select ordinary E2E launch behavior; only exact1selects film mode.Out of Scope
screencapture.Avoided Traps
0as enabled.Related
Parent: #15252
Retrieval Hint:
take 17 five-beat semantic-ready recorder go receiptRetrieval Hint: branchcodex/15252-five-beat-film, source head62e5669c0fb7d107f3da56a1931c7be8c0e202c2