Context
Sub of #15252, the continuous flagship film. The tear-out-first screenplay is merged through #19097 / PR #19107 at e6b7b10556ce4e8cbe4a757e35b013c02f52ae9e. Dialogue draft 2 is recorded on the parent; voices are Emmy/marin and Mnemosyne/nova, using the recovered July production pipeline.
The first timing rehearsal generated 23 immutable utterance WAVs. Measurements: the mid-birth Emmy line is 4.000 s, the following Mnemosyne question 2.350 s, and the re-entry invitation 2.800 s. The full audio-only listening preview is 67.500 s with declared turn gaps; that is not a finished film duration or visual acceptance receipt.
The Problem
NativeGestureDriver.executeTearOutStep has no stationary post-birth hold. After the real birth gate, it performs the survival moves and immediately re-enters or releases. The narration can therefore describe a window and a held pointer after that visual state has already ended.
Changing the cue's pause.ms does not solve this: TourRunner starts the cue and pause concurrently, then awaits host settlement. targetSeconds is a screenplay budget, not a runtime timer. Slowing the entire pointer path would conflate a deliberate visual hold with gesture motion.
The Architectural Reality
apps/workstation/tour/NativeGestureDriver.mjs#executeTearOutStep owns the witnessed pointer bracket and native birth/re-entry/release phases.
GestureDriver.runGesture retains dispatched-input cleanup, and driver.trap(driver.timeout(...)) is already the cancellable pacing idiom used by the preview dwell.
apps/workstation/tour/fiveBeatFilm.mjs owns app-specific cue options; stable scene/cue IDs bind the separate dialogue assets.
- Existing cue-free
pause steps can hold a settled result. A new narration engine or runner vocabulary is unnecessary.
test/playwright/unit/apps/workstation/GestureDriver.spec.mjs owns driver lifecycle/cleanup controls; the existing film whitebox witness owns the continuous real journey.
The Fix
Add an optional, default-zero birthDwellMs to the existing tear-out executor. Place it after confirmed birth/survival and before re-entry or terminal release. Keep the pointer down without synthesizing movement during the hold. Use the existing registered timeout/trap and cleanup path so cancellation/destruction cannot leave input pressed.
Use the measured dialogue map to set the film's hold and ordinary post-receipt pauses. Preserve the opening's short introduction and all existing scene/cue IDs. Correct the cold-open wording or timing against its measured duration before calling the combined rehearsal ready; the current eight-word line measures 4.650 s against a ≤3 s target.
Contract Ledger
| Surface |
Authority |
Behavior |
Fallback |
Docs |
Evidence |
New executeTearOutStep option birthDwellMs |
existing native gesture executor |
a positive duration holds the already-born vessel with pointer down before re-entry/release |
omitted/zero preserves existing timing; destruction cancels wait and releases input through existing cleanup |
method JSDoc |
phase-order and destroy-during-hold controls |
| Film cue pacing |
existing fiveBeatFilmScript |
hold durations come from actual utterance measurements; settled-result holds use pause-only steps |
optional commentary may be shortened/omitted, never invent a visual outcome |
screenplay header + parent timing receipt |
exact-head continuous replay; unchanged cue identities |
| Dialogue assets |
parent dialogue draft and recorded voice decisions |
immutable WAVs, measured durations, hashes and cue bindings in private production artifacts |
changed line creates a successor attempt |
parent public receipt, existing owner record |
decode/format/content checks; final perceptual/picture QA stays with the take |
Acceptance Criteria
Out of Scope
Final video capture/publication; whole-film acceptance; new runtime audio playback or a generalized narration runner; the independent renderer issue #19110; unrelated-root isolation #19103.
Avoided Traps
A longer cue-bearing pause does not create a mid-gesture hold. Poll-attempt ceilings are not pacing. A successful audio decode is not a full perceptual listen or a picture-sync proof. Keep old attempts immutable and reuse the July pipeline.
Decision Record impact
none — app-owned choreography pacing on existing gesture/lifecycle primitives.
Related
Parent #15252 · #19097 · #16498.
Live latest-open sweep: latest 20 open Engine issues checked at 2026-09-23 11:08 UTC; no equivalent. A2A all-status last-30 sweep: Mnemosyne owns #19110, the screenplay reorder is merged, no competing gesture-hold claim. Own-assignment sweep: #16151 and #15526, neither overlaps. MC sweep on Workstation film dialogue/pointer/birth/pacing recovered today's coauthor split and prior film intake; this is the missing timing carriage, not a replacement film project. Structural map: N/A — modifies existing app/test files; the private generator is a lift of the prior film pipeline.
Origin Session ID: ef03b71d-0375-4160-8fde-ad4d19616eff
Retrieval Hint: Workstation film birthDwellMs measured dialogue pointer held born 4.000 2.350 2.800
Ownership: Emmy's implementation and dialogue timing lane; Mnemosyne retains the screenplay/take and coauthors the lines.
Context
Sub of #15252, the continuous flagship film. The tear-out-first screenplay is merged through
#19097/ PR#19107ate6b7b10556ce4e8cbe4a757e35b013c02f52ae9e. Dialogue draft 2 is recorded on the parent; voices are Emmy/marin and Mnemosyne/nova, using the recovered July production pipeline.The first timing rehearsal generated 23 immutable utterance WAVs. Measurements: the mid-birth Emmy line is 4.000 s, the following Mnemosyne question 2.350 s, and the re-entry invitation 2.800 s. The full audio-only listening preview is 67.500 s with declared turn gaps; that is not a finished film duration or visual acceptance receipt.
The Problem
NativeGestureDriver.executeTearOutStephas no stationary post-birth hold. After the real birth gate, it performs the survival moves and immediately re-enters or releases. The narration can therefore describe a window and a held pointer after that visual state has already ended.Changing the cue's
pause.msdoes not solve this:TourRunnerstarts the cue and pause concurrently, then awaits host settlement.targetSecondsis a screenplay budget, not a runtime timer. Slowing the entire pointer path would conflate a deliberate visual hold with gesture motion.The Architectural Reality
apps/workstation/tour/NativeGestureDriver.mjs#executeTearOutStepowns the witnessed pointer bracket and native birth/re-entry/release phases.GestureDriver.runGestureretains dispatched-input cleanup, anddriver.trap(driver.timeout(...))is already the cancellable pacing idiom used by the preview dwell.apps/workstation/tour/fiveBeatFilm.mjsowns app-specific cue options; stable scene/cue IDs bind the separate dialogue assets.pausesteps can hold a settled result. A new narration engine or runner vocabulary is unnecessary.test/playwright/unit/apps/workstation/GestureDriver.spec.mjsowns driver lifecycle/cleanup controls; the existing film whitebox witness owns the continuous real journey.The Fix
Add an optional, default-zero
birthDwellMsto the existing tear-out executor. Place it after confirmed birth/survival and before re-entry or terminal release. Keep the pointer down without synthesizing movement during the hold. Use the existing registered timeout/trap and cleanup path so cancellation/destruction cannot leave input pressed.Use the measured dialogue map to set the film's hold and ordinary post-receipt pauses. Preserve the opening's short introduction and all existing scene/cue IDs. Correct the cold-open wording or timing against its measured duration before calling the combined rehearsal ready; the current eight-word line measures 4.650 s against a ≤3 s target.
Contract Ledger
executeTearOutStepoptionbirthDwellMsfiveBeatFilmScriptAcceptance Criteria
Out of Scope
Final video capture/publication; whole-film acceptance; new runtime audio playback or a generalized narration runner; the independent renderer issue
#19110; unrelated-root isolation#19103.Avoided Traps
A longer cue-bearing pause does not create a mid-gesture hold. Poll-attempt ceilings are not pacing. A successful audio decode is not a full perceptual listen or a picture-sync proof. Keep old attempts immutable and reuse the July pipeline.
Decision Record impact
none — app-owned choreography pacing on existing gesture/lifecycle primitives.
Related
Parent #15252 · #19097 · #16498.
Live latest-open sweep: latest 20 open Engine issues checked at 2026-09-23 11:08 UTC; no equivalent. A2A all-status last-30 sweep: Mnemosyne owns
#19110, the screenplay reorder is merged, no competing gesture-hold claim. Own-assignment sweep:#16151and#15526, neither overlaps. MC sweep on Workstation film dialogue/pointer/birth/pacing recovered today's coauthor split and prior film intake; this is the missing timing carriage, not a replacement film project. Structural map: N/A — modifies existing app/test files; the private generator is a lift of the prior film pipeline.Origin Session ID: ef03b71d-0375-4160-8fde-ad4d19616eff
Retrieval Hint:
Workstation film birthDwellMs measured dialogue pointer held born 4.000 2.350 2.800Ownership: Emmy's implementation and dialogue timing lane; Mnemosyne retains the screenplay/take and coauthors the lines.