Context
The first clean take of the film at dev 1c43d51e26 (#15252, take 2026-10-10T19-59-33-683Z, 2026-10-10 20:0xZ) runs ≈ 45 s of picture from the first motion to the close. The screenplay's targetSeconds sum to 91 s, but they are budgets: the captured gestures own their durations, and several cues run at machine speed. The operator's goal for the film is 1:30–2:30, the approved narration (A6) is 83 s of speech and is not to be trimmed, and a video under about a minute risks being listed as a YouTube Short. The picture has to carry the narration.
Design authority: the operator, 2026-10-10 ("the goal for the video was 1m30 to 2m30. so trimming voice narratives is absolutely NOT what we want"), within the 2026-09-23 pacing rule (the picture sets the pace; speech rides the motion; no held gesture is stretched to fit a line; #19124 was withdrawn for that shape).
The Problem
The take's cue clock (recorder seconds): tour start 2.55 · tear-out birth 5.37 · committed 7.42 · journey 8.44 → compose 21.38 · native return 22.39 → whole room 25.18 · rails 26.20 · resize 32.40 · showcase 33.31 · perspective captured 38.64 · split 39.15 · read 40.16 · restore 41.18 · mutation 41.94 · undo 42.44 · redo 43.47 · 100k midpoint 44.22 · close 45.74 → end ≈ 47.7.
Machine-speed stretches: the perspectives scene performs capture → split → read → restore → mutation → undo → redo in 4.9 s; the resize scene's boundary drag takes 0.9 s; the native return crosses its targets in 2.8 s; the showcase's drags between its two dwells run at pointer-sample speed. A hand does none of these at that speed, and a viewer cannot read the outcomes.
The Architectural Reality
apps/workstation/tour/fiveBeatFilm.mjs carries per-cue pacing options: filmPace (moveDelay: 33, moveSteps: 24, curve, birthAttempts) on the tear-out and the journey, explicit moveDelay/moveSteps on the resize and rail cues, dwellDelay/moveDelay/moveSteps on the showcase, revealDelay on the rail; the executors in apps/workstation/tour/GestureDriver.mjs default to moveDelay 16 × moveSteps 12 (≈ 0.2 s per leg). The document operations of the perspectives scene (perspective-capture, splitNode, perspective-restore, addTab, undo, redo) are instant.
- Measured in the runner (correction, 20:3xZ): a
pause step's ms is a FLOOR the runner waits while the host performs the cue in parallel (TourRunner fires the beat, TourController#onTourBeat runs the cue, the runner's ms wait overlaps it) — not a wait after the outcome. A cue's picture time is its gesture; a cue-free pause after an instant document operation is the only time a viewer gets to read that outcome. The resize scene measured 0.9 s because its 800 ms floor and its 0.8 s drag overlapped. The perspectives scene had no beat at all between the addTab mutation and the undo: the undo landed on the mutation's own frame.
- The headless witness
test/playwright/e2e/workstation/WorkstationFilmTourNL.spec.mjs runs the same screenplay and logs each beat's time; it polled at 1 s, too coarse to verify a pacing change, so its poll becomes the clock's resolution (100 ms) and it logs the controller's own elapsedMs.
- The picture additions are sibling leaves of the same plan of record on #15252 (a third window, the perspective across windows — #19569, the light-theme switch, the maximize beat, the rail reveal held for its content); this leaf is pacing only.
The Fix
In fiveBeatFilm.mjs, bring the machine-speed cues to hand tempo through the existing options, with no new cue types and no engine change:
- pointer walks at hand tempo — a sample every 33 ms with the leg's
moveSteps sized to about a second of travel: both resizes 48 samples (one leg, ≈ 1.5 s of re-flow), the showcase's walks 30 samples at 33 ms (≈ 1 s per leg between the two 1.5 s dwells), the native return 16 samples per leg (each sample also pays a window move's round trip);
- the perspectives scene's outcomes each get a reading beat of 1.5 s — one bound shared with the born hold and the showcase dwell (the 2026-09-23 cue-free cap of 1 s becomes 1.5 s; a beat is sized to the outcome, never to a line) — including a new beat after the mutation, before the undo;
- the screenplay's header records the operator's brief (the narration whole and at its own rate; the picture sized to carry it) in place of "the voice is cut to the motion";
targetSeconds stay the budgets they are (91 s inside the 90–150 s envelope): restating them to the measured picture would put the sum under the envelope's floor that the addition leaves restore; the measured clock lives in the PR and the production record, not in the source. (Correction of the original fix sentence, 20:3xZ.)
Acceptance Criteria
Restated 20:3xZ to the shapes the rules yield; the original ≥ 12 s / ≥ 9 s figures were sized from the speech (14.35 s / 7.05 s), which is exactly the sizing the pacing rule bans — the narration's remainder is carried by the addition leaves, not by longer stills.
Out of Scope
- The picture additions (sibling leaves on #15252).
- The rail step's intermittent pin-geometry failure under the OS recorder (defect-note e1a1d18219d9bfc9).
Related
#15252 (the film epic; the plan of record of 2026-10-10 20:0xZ) · #14800 (the v13.2 cut) · #19530 (the showcase dwells) · #19124 (withdrawn: speech-driven holds) · #19569 (the perspective across windows, Ada — lands on top of this leaf)
Live latest-open sweep: the latest 20 open issues at 20:1xZ, no equivalent. A2A: no claim on the film's pacing. Memory Core: the 2026-09-23 pacing inversion and the 2026-10-09 #19530 dwell decision are the prior rulings, both honoured here. Own open tickets: #15252 is the parent.
Origin Session ID: 656ab1e8-7b9c-4a10-b370-8718db430fad
Retrieval Hint: "film tour pacing hand tempo moveDelay moveSteps perspectives scene 4.9 s take clock 45 s"
Context
The first clean take of the film at dev 1c43d51e26 (#15252, take
2026-10-10T19-59-33-683Z, 2026-10-10 20:0xZ) runs ≈ 45 s of picture from the first motion to the close. The screenplay'stargetSecondssum to 91 s, but they are budgets: the captured gestures own their durations, and several cues run at machine speed. The operator's goal for the film is 1:30–2:30, the approved narration (A6) is 83 s of speech and is not to be trimmed, and a video under about a minute risks being listed as a YouTube Short. The picture has to carry the narration.Design authority: the operator, 2026-10-10 ("the goal for the video was 1m30 to 2m30. so trimming voice narratives is absolutely NOT what we want"), within the 2026-09-23 pacing rule (the picture sets the pace; speech rides the motion; no held gesture is stretched to fit a line;
#19124was withdrawn for that shape).The Problem
The take's cue clock (recorder seconds): tour start 2.55 · tear-out birth 5.37 · committed 7.42 · journey 8.44 → compose 21.38 · native return 22.39 → whole room 25.18 · rails 26.20 · resize 32.40 · showcase 33.31 · perspective captured 38.64 · split 39.15 · read 40.16 · restore 41.18 · mutation 41.94 · undo 42.44 · redo 43.47 · 100k midpoint 44.22 · close 45.74 → end ≈ 47.7.
Machine-speed stretches: the perspectives scene performs capture → split → read → restore → mutation → undo → redo in 4.9 s; the resize scene's boundary drag takes 0.9 s; the native return crosses its targets in 2.8 s; the showcase's drags between its two dwells run at pointer-sample speed. A hand does none of these at that speed, and a viewer cannot read the outcomes.
The Architectural Reality
apps/workstation/tour/fiveBeatFilm.mjscarries per-cue pacing options:filmPace(moveDelay: 33, moveSteps: 24,curve,birthAttempts) on the tear-out and the journey, explicitmoveDelay/moveStepson the resize and rail cues,dwellDelay/moveDelay/moveStepson the showcase,revealDelayon the rail; the executors inapps/workstation/tour/GestureDriver.mjsdefault tomoveDelay 16×moveSteps 12(≈ 0.2 s per leg). The document operations of the perspectives scene (perspective-capture,splitNode,perspective-restore,addTab,undo,redo) are instant.pausestep'smsis a FLOOR the runner waits while the host performs the cue in parallel (TourRunnerfires the beat,TourController#onTourBeatruns the cue, the runner'smswait overlaps it) — not a wait after the outcome. A cue's picture time is its gesture; a cue-freepauseafter an instant document operation is the only time a viewer gets to read that outcome. The resize scene measured 0.9 s because its 800 ms floor and its 0.8 s drag overlapped. The perspectives scene had no beat at all between theaddTabmutation and the undo: the undo landed on the mutation's own frame.test/playwright/e2e/workstation/WorkstationFilmTourNL.spec.mjsruns the same screenplay and logs each beat's time; it polled at 1 s, too coarse to verify a pacing change, so its poll becomes the clock's resolution (100 ms) and it logs the controller's ownelapsedMs.The Fix
In
fiveBeatFilm.mjs, bring the machine-speed cues to hand tempo through the existing options, with no new cue types and no engine change:moveStepssized to about a second of travel: both resizes 48 samples (one leg, ≈ 1.5 s of re-flow), the showcase's walks 30 samples at 33 ms (≈ 1 s per leg between the two 1.5 s dwells), the native return 16 samples per leg (each sample also pays a window move's round trip);targetSecondsstay the budgets they are (91 s inside the 90–150 s envelope): restating them to the measured picture would put the sum under the envelope's floor that the addition leaves restore; the measured clock lives in the PR and the production record, not in the source. (Correction of the original fix sentence, 20:3xZ.)Acceptance Criteria
Restated 20:3xZ to the shapes the rules yield; the original ≥ 12 s / ≥ 9 s figures were sized from the speech (14.35 s / 7.05 s), which is exactly the sizing the pacing rule bans — the narration's remainder is carried by the addition leaves, not by longer stills.
Out of Scope
Related
#15252 (the film epic; the plan of record of 2026-10-10 20:0xZ) · #14800 (the v13.2 cut) · #19530 (the showcase dwells) · #19124 (withdrawn: speech-driven holds) · #19569 (the perspective across windows, Ada — lands on top of this leaf)
Live latest-open sweep: the latest 20 open issues at 20:1xZ, no equivalent. A2A: no claim on the film's pacing. Memory Core: the 2026-09-23 pacing inversion and the 2026-10-09 #19530 dwell decision are the prior rulings, both honoured here. Own open tickets: #15252 is the parent.
Origin Session ID: 656ab1e8-7b9c-4a10-b370-8718db430fad
Retrieval Hint: "film tour pacing hand tempo moveDelay moveSteps perspectives scene 4.9 s take clock 45 s"