Skip to content

orchestration: boundary-fit can't decline the final unit β€” full track planned 30s before sign-off due (2:05 handoff)Β #300

Description

@genwave-radio

πŸ•“ 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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High prioritybugSomething isn't workingdemoFound on GenWave demo

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions