π Field report (Dean, 2026-07-30): the 2PM handoff aired at 2:05 on v2.8.11 β pre-gh-#254 magnitude β and the incoming DJ announced "it's Thursday two o'clock" at 2:05.
Timeline (kokoro render lines, UTC; boundary 20:00Z)
- 19:55β19:56 β fit-window pick: 'Cemetery' (~4 min) planned at untilDue β 4 min
- 19:59:29 β LeadIn for 'Good Old Times' rendered: a FULL extra music unit planned while the SignOff's due was ~30 s away (due = boundary β 15 s lead time)
- 20:03:34 β Dusty's SignOff renders; 20:04:02 β Big Tony's SignOn ("it's Thursday two o'clock!"); aired ~20:05
Root cause
The gh-#254 fit biases which track fills a unit β it has no move for "don't plan another unit at all." At the final feeder pull before the ceremony's due, desired effective length is deeply negative (queued audio already covers past the boundary), and the design's overshot branch still answers with a full least-late track. One extra ~3.5-min unit inside the last minute = the entire slip. The 15 s SignOffLeadTime guarantees this race window exists on every boundary whose last pull lands in [dueβlookahead-tail, due).
Secondary: whether the 19:55 in-window pick actually fitted within tolerance is unknowable from Loki β BuildBoundaryFit logs nothing. On a demo pool of mostly 3β5 min tracks, desired β 1.5β2.5 min may have been unfittable (soft preference, correctly never a filter) β but we can't see it.
Fix directions
- The last unit before a due ceremony is the ceremony: when
untilDue β queuedAheadMs β ceremonyEstimate < a floor (shortest plausible track / configurable), the pull serves the deferral path early instead of planning more music. Never-silent holds β the already-queued audio covers to the (slightly early) ceremony; radio tradition prefers a hair early over five late.
- Log every fit decision (window state, untilDue, queuedAhead, desired, sampled durations, chosen diff, engaged/declined/overshot) β this incident was undiagnosable beyond render archaeology; the next one shouldn't be.
- Consider whether
SignOffLeadTime (15 s) and the pull cadence need a relationship β e.g., the final music pull gates at due β typical unit length, not due β 15 s.
Cosmetic rider: the SignOn's "it's two o'clock" claim at 2:05 self-heals once handoffs land near the boundary; no separate fix needed unless slips persist.
Relates: gh-#254 (shipped fit β the WHICH-track half), gh-#253 (estimator), gh-#288 (duration persistence).
π Field report (Dean, 2026-07-30): the 2PM handoff aired at 2:05 on v2.8.11 β pre-gh-#254 magnitude β and the incoming DJ announced "it's Thursday two o'clock" at 2:05.
Timeline (kokoro render lines, UTC; boundary 20:00Z)
Root cause
The gh-#254 fit biases which track fills a unit β it has no move for "don't plan another unit at all." At the final feeder pull before the ceremony's due, desired effective length is deeply negative (queued audio already covers past the boundary), and the design's overshot branch still answers with a full least-late track. One extra ~3.5-min unit inside the last minute = the entire slip. The 15 s
SignOffLeadTimeguarantees this race window exists on every boundary whose last pull lands in [dueβlookahead-tail, due).Secondary: whether the 19:55 in-window pick actually fitted within tolerance is unknowable from Loki β
BuildBoundaryFitlogs nothing. On a demo pool of mostly 3β5 min tracks, desired β 1.5β2.5 min may have been unfittable (soft preference, correctly never a filter) β but we can't see it.Fix directions
untilDue β queuedAheadMs β ceremonyEstimate< a floor (shortest plausible track / configurable), the pull serves the deferral path early instead of planning more music. Never-silent holds β the already-queued audio covers to the (slightly early) ceremony; radio tradition prefers a hair early over five late.SignOffLeadTime(15 s) and the pull cadence need a relationship β e.g., the final music pull gates atdue β typical unit length, notdue β 15 s.Cosmetic rider: the SignOn's "it's two o'clock" claim at 2:05 self-heals once handoffs land near the boundary; no separate fix needed unless slips persist.
Relates: gh-#254 (shipped fit β the WHICH-track half), gh-#253 (estimator), gh-#288 (duration persistence).