Skip to content

feat: Dayparting PR 3/5 — on the air (ceremony, flavor line, show idents, spectator) - #457

Merged
genwave-radio merged 5 commits into
mainfrom
feat/dp3-onair
Aug 11, 2026
Merged

feat: Dayparting PR 3/5 — on the air (ceremony, flavor line, show idents, spectator)#457
genwave-radio merged 5 commits into
mainfrom
feat/dp3-onair

Conversation

@genwave-radio

Copy link
Copy Markdown
Collaborator

📛 Dayparting epic — PR 3 of 5 (stacked on #456 · PLAN T248–T252)

The audible slice — shows reach the ear and the public face:

  • 🎙️ Show-aware ceremony (T248): sign-on carries the incoming show's name + flavor; sign-off may name both shows; same-persona different-show = ONE transition piece (the F92.4 incoming-welcome rung as designed behavior); F92.3 dedupe = persona AND show; the arm-once key widened to show ids (closes a latent show-only-edit swallow); showless ceremony prompts byte-identical to the Story243 goldens.
  • 🗣️ The flavor line (T249): shares F107.5's single extra-line slot — context wins, the show gate stays open ("never even ask" semantics so a lost slot never burns cadence); ShowFlavorLineGate per-show cadence (Station:Shows:PatterCadenceMinutes, Live, default 0 — the demo opts in); flavor rides unfenced (owner-config, the Soul precedent) with the T254 imported-flavor constraint recorded at the injection site; preview never consults the seam (pinned).
  • 📻 Show idents (T250): one-query scoped-first pool (F95.4 inherited structurally; scoped rows never air outside their show); templated show-line floor ("You're listening to {show} on {station}." — zero LLM, forever-cached, rename re-keys by construction); ladder RATIFIED (Dean 2026-08-10): authored beats template — F117.2 amended in SPEC; estimator Exact memo re-keyed (voice, show) so mixed-show durations never corrupt boundary-fit; IMediaCatalog/IPatterDurationEstimator evolved via genuinely-additive DIM overloads (3-arg members byte-identical — no published-contract break).
  • 🌐 Spectator (T251): now-playing show {name, tagline} | null + upNext.show (name-only by type shape); the same-persona collapse widened to persona AND show (the demo's single-DJ seed makes every flip that shape); flavor absent structurally AND value-level (distinct-string fixtures asserted absent from raw payloads); the dj-vs-show boundary-skew caveat documented (gh-spectator: DJ attribution lags a schedule change while queued patters drain #259 lineage).
  • 🔌 T252 wire (orchestrator-run, engine-less local stack): PG→repository→resolver show identity live; spectator serves with honest standby; zero flavor bytes across all five public routes (grep-proven). The on-air behaviors were proven through the real production chain in specs (60-pull simulated drains through the real Orchestrator/resolver).

✅ Gates

Every task opus-review-gated (T248 ×2, T249 ×2, T250 ×2, T251 ×2 — catches included a boundary-fit estimator corruption, a published-DIM binary break, an upNext erasure at ruled-real boundaries, and a renderer whitespace bug found by a review-demanded fact). Suites: non-Integration 0 failed (Host 1554, Tts 474, Orchestration 267, Architecture 95/95), MediaLibrary Integration 671/0, -warnaserror 0/0, SEAMS green.

🖐️ Live checklist for the pinned deploy (the T229/T233 pattern)

  • A same-DJ show flip airs exactly ONE transition piece naming the incoming show (booth: one SignOn row, no SignOff)
  • With Station:Shows:PatterCadenceMinutes > 0: a flavor-colored line appears in a break within the cadence; never two extra lines in one break (weather on = context wins)
  • Top-of-hour during a show with no scoped idents: an authored station ident airs (show-stamped row); with the pool empty: "You're listening to ⟨show⟩ on ⟨station⟩."
  • Spectator card shows show name+tagline while airing, upNext.show before a flip — including the same-DJ flip
  • 👁️ The documented dj-vs-show boundary skew (outgoing DJ beside incoming show during a straddle's crossing track) — eye-check it reads acceptably (gh-spectator: DJ attribution lags a schedule change while queued patters drain #259 lineage; a full track window, not a flicker)
  • Showless station: byte-identical sound and payloads (no shows configured = nothing changes)

…avor, one-piece transition at same-DJ show flips, dedupe = persona AND show (F92.3 amended); arm-once key widened to show ids; immutable enqueue-time capture
… gate stays open), ShowFlavorLineGate per-show cadence (Station:Shows:PatterCadenceMinutes, Live), unfenced-owner-flavor posture + T254 constraint recorded
…95.4 inherited), templated show-line floor (zero LLM, rename re-keys), ladder RATIFIED authored-beats-template (F117.2 amended); estimator Exact memo keyed (voice, show); additive 4-arg DIMs (no published-contract break)
…upNext.show (name-only by type), collapse widened to persona AND show (F116.2-coherent), flavor structurally+value-level absent, boundary-skew caveat documented
Base automatically changed from feat/dp2-authoring to main August 11, 2026 20:42
@genwave-radio
genwave-radio merged commit c9d91d9 into main Aug 11, 2026
11 checks passed
@genwave-radio
genwave-radio deleted the feat/dp3-onair branch August 11, 2026 20:45
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant