Context
From the operator-endorsed film-v1 lane split (Fable's claim-round, lane 3, fit-noted to this seat): the v0 draft cut proved the journey, and exposed two film-mode defects that make the take unreproducible-in-place and hard to read as a human artifact.
Defect 1 — stage roulette. A headed take lands on whichever display the OS happens to place the window. Fable's take-4 receipt: the clean capture display (BenQ) sits at global x≥1728; windows do not reliably open there. The same drive recorded twice can land on different displays, breaking the two-take identity the film's edit depends on.
Defect 2 — the invisible gesture. CDP-dispatched synthetic pointer events move no OS cursor. The tear-out — the film's signature beat — currently reads as UI-moving-itself: the viewer sees a window appear, never the drag that caused it. The executor already logs every coordinate it drives; the cursor is the only missing layer.
The Problem
A take is only derivable-as-evidence if it is reproducible in place and legible as a gesture. Today both fail, and they fail only in film mode (the spec's default-mode assertions are indifferent to display placement and cursor visibility — which is why neither showed up before frames existed).
The Architectural Reality
- The boot already front-runs the headed window via CDP (
page.bringToFront() in WorkstationFiveBeatNL.spec.mjs — chosen over AppleScript precisely because two same-bundle Chrome processes make script addressing flip-flop). CDP Browser.setWindowBounds is the same channel's placement verb — deterministic, instance-addressed, no AppleScript.
- The gesture executor (
Workspace.executeTearOutStep) drives via InteractionService with exact coordinates per move step, already tunable by the film profile (curve, moveDelay, moveSteps). A cursor overlay that rides those coordinates needs no second source of truth.
- Both changes must be gated on the film profile (
NEO_FILM_TAKE=1): the default spec path's geometry contract (two-take beat-log equality) is behavioral, not visual, and must not shift.
The Fix
- Stage determinism (spec boot, film mode only): after connecting CDP, read the display list, pick the capture display by rule (largest work area at
x≥1728, falling back to primary with the choice logged), and pin the window there via Browser.setWindowBounds before the journey starts. The display-choice rule and its fallback are recorded in the spec header.
- Visible synthetic cursor (executor, film mode only): a minimal overlay dot (position:fixed, high z-index, pointer-events:none) injected into each window the gesture traverses, updated per logged move coordinate. The executor's coordinate log is the single source — the overlay never re-derives a position.
Acceptance Criteria
Out of Scope
- #15923 (vessel theme propagation — separate released lane).
- The flicker audit (lane 2) and the showcase beat (lane 4).
- OS-level pointer synthesis (CDP-level only; no robotjs/AppleScript, per the existing boot decision).
Avoided Traps
- AppleScript window placement — two same-bundle Chrome processes make script addressing non-deterministic (the boot's existing ruling).
- Recomputing cursor position from the DOM — the executor's coordinate log is the truth; a second derivation can disagree with what the gesture actually did.
- Letting the overlay touch assertions — it is a presentation layer for the camera; worker truth never sees it.
Related
#15252 (the film) · #15912 (film branch, take-14) · #15906 (stage B) · #15923 (sibling lane) · the v0 glitch-review claim-round.
Live latest-open sweep: checked latest open issues at 2026-07-25T16:50Z; no equivalent. A2A claim sweep: lane claimed 16:47Z, no collision.
Origin Session ID: 3b5c70eb-0622-4bf2-bdbe-bc11f8a140f8
Retrieval Hint: query_raw_memories("film stage determinism setWindowBounds synthetic cursor overlay tear-out take")
Authored by Iris (@neo-kimi-iris, Kimi K3, Kimi Code CLI) 🌈
Context
From the operator-endorsed film-v1 lane split (Fable's claim-round, lane 3, fit-noted to this seat): the v0 draft cut proved the journey, and exposed two film-mode defects that make the take unreproducible-in-place and hard to read as a human artifact.
Defect 1 — stage roulette. A headed take lands on whichever display the OS happens to place the window. Fable's take-4 receipt: the clean capture display (BenQ) sits at global
x≥1728; windows do not reliably open there. The same drive recorded twice can land on different displays, breaking the two-take identity the film's edit depends on.Defect 2 — the invisible gesture. CDP-dispatched synthetic pointer events move no OS cursor. The tear-out — the film's signature beat — currently reads as UI-moving-itself: the viewer sees a window appear, never the drag that caused it. The executor already logs every coordinate it drives; the cursor is the only missing layer.
The Problem
A take is only derivable-as-evidence if it is reproducible in place and legible as a gesture. Today both fail, and they fail only in film mode (the spec's default-mode assertions are indifferent to display placement and cursor visibility — which is why neither showed up before frames existed).
The Architectural Reality
page.bringToFront()inWorkstationFiveBeatNL.spec.mjs— chosen over AppleScript precisely because two same-bundle Chrome processes make script addressing flip-flop). CDPBrowser.setWindowBoundsis the same channel's placement verb — deterministic, instance-addressed, no AppleScript.Workspace.executeTearOutStep) drives viaInteractionServicewith exact coordinates per move step, already tunable by the film profile (curve,moveDelay,moveSteps). A cursor overlay that rides those coordinates needs no second source of truth.NEO_FILM_TAKE=1): the default spec path's geometry contract (two-take beat-log equality) is behavioral, not visual, and must not shift.The Fix
x≥1728, falling back to primary with the choice logged), and pin the window there viaBrowser.setWindowBoundsbefore the journey starts. The display-choice rule and its fallback are recorded in the spec header.Acceptance Criteria
setWindowBoundstargets (receipt: the logged bounds match run-to-run).Out of Scope
Avoided Traps
Related
#15252 (the film) · #15912 (film branch, take-14) · #15906 (stage B) · #15923 (sibling lane) · the v0 glitch-review claim-round.
Live latest-open sweep: checked latest open issues at 2026-07-25T16:50Z; no equivalent. A2A claim sweep: lane claimed 16:47Z, no collision.
Origin Session ID: 3b5c70eb-0622-4bf2-bdbe-bc11f8a140f8
Retrieval Hint:
query_raw_memories("film stage determinism setWindowBounds synthetic cursor overlay tear-out take")Authored by Iris (@neo-kimi-iris, Kimi K3, Kimi Code CLI) 🌈