Repository navigation
t27f: R4f -- mode 5 holds the address for REEL_CTA_MIN_MS on a sped-up voice #10629
Description
Follow-up to R4d (#10614, PR #10627), epic #10560.
In LR_MODE=5, crossfade 1 is centred on cta_from, the moment the address takes over. The address is now kept off the crossfade, so it only comes in after the crossfade ends. On a voice the reel had to speed up, that leaves it on screen for less than REEL_CTA_MIN_MS. A test in PR #10627 measures this cost: it is real, and it is at least MIN_SCENE_FRAMES - 1 frames.
Boundary
specs/t27f/lesson_reel.t27and its seal: the beat cut for the address, or the address window, in mode 5.- Out of scope: modes 3 and 4. If the fix moves crossfade 1 in mode 4 too, that is a decision to name in the PR with its own cmp evidence, not a side effect.
User Scenarios
- A viewer of a mode 5 reel narrated by a fast voice still has at least
REEL_CTA_MIN_MSto read the address before the reel ends.
Requirements
- Mode 5 holds the address for at least
REEL_CTA_MIN_MSon every voice the clock accepts, and it is still never on a crossfade. - The candidate fix is to end crossfade 1 at
cta_frominstead of centring it there. If that is the fix, the change to mode 4's cut is stated and tested. - The test "the cost: on a voice the reel speeds up, mode 5 holds the address for less than REEL_CTA_MIN_MS" is replaced by a test that the hold holds, plus a control showing the old cut fails it.
Success Criteria
- On the Railway lab,
t27c test-reportpasses with 0 vacuous tests, and the seal is saved and verified. - A grid test over every lesson, both languages and every voice the clock accepts shows the mode 5 address hold is at least
REEL_CTA_MIN_MSand is never on a crossfade. - The
cmpregression for mode 3 finds 0 differences. For mode 4, either 0 differences or a counted, explained diff that is limited to crossfade 1.
Requirements
FR-001: Mode 5 MUST hold the address for at least REEL_CTA_MIN_MS on every voice the clock accepts.
FR-002: The address in mode 5 MUST never appear on a crossfade.
FR-003: If the fix ends crossfade 1 at cta_from instead of centring it there, the change to mode 4's cut MUST be stated and tested.
FR-004: The existing test that measures the cost (mode 5 holds address for less than REEL_CTA_MIN_MS on a sped-up voice) MUST be replaced by a test that the hold meets REEL_CTA_MIN_MS, plus a control demonstrating the old cut fails it.
Success Criteria
t27c test-reporton the Railway lab exits 0 with 0 vacuous tests, and the seal forspecs/t27f/lesson_reel.t27is saved and verified.- A grid test over every lesson, both languages, and every voice the clock accepts shows mode 5 address hold ≥
REEL_CTA_MIN_MSand the address is never on a crossfade (measured in frames). cmpregression for mode 3 shows 0 differences. For mode 4, either 0 differences or a counted, explained diff limited to crossfade 1.
Activity
Merge origin/master into claude/t27f-cta-hold
github-actions commentedon Oct 18, 2026
Closed by the issue-shape gate (specs/policy/issue_shape.t27, #7498): an issue must have the template's sections. Edit the body; an edit that passes reopens it.
FR-001: ... MUST ...exit 0, or a backticked commandt27f: R4f -- mode 5 holds the address for REEL_CTA_MIN_MS, cut 1 capp…
t27f: R4e -- mode 5 cards stay inside one scene, token_floor_mux take…