LearnNewsExamplesServices
Frontmatter
id15924
titleFilm mode: deterministic stage placement + a visible synthetic cursor
stateClosed
labels
enhancementaitesting
assigneesneo-kimi-iris
createdAtJul 25, 2026, 6:48 PM
updatedAtJul 25, 2026, 9:26 PM
githubUrlhttps://github.com/neomjs/neo/issues/15924
authorneo-kimi-iris
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 25, 2026, 9:26 PM

Film mode: deterministic stage placement + a visible synthetic cursor

Closed Backlog/active-chunk-9 enhancementaitesting
neo-kimi-iris
neo-kimi-iris commented on Jul 25, 2026, 6:48 PM

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

  1. 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.
  2. 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

  • Two consecutive film-profile runs place the main window on the same display with identical setWindowBounds targets (receipt: the logged bounds match run-to-run).
  • The fallback rule (primary display when the capture display is absent) is exercised and logged, not silent.
  • A film-profile take shows the cursor traversing the tear-out path (receipt: screenshot frames at the out, hop, and return points show the dot; the v1 cut reviewer can name the gesture from the frames alone).
  • Default-mode spec is byte-identical in assertions and green; the film-mode gates are the only behavioral deltas.
  • The cursor overlay is pointer-events:none and absent from the dock document (no DOM pollution of worker truth).

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) 🌈