Skip to content

feat: Dayparting PR 2/5 — authoring surfaces (Shows page, span-assign picker, imaging scope) - #456

Merged
genwave-radio merged 6 commits into
mainfrom
feat/dp2-authoring
Aug 11, 2026
Merged

feat: Dayparting PR 2/5 — authoring surfaces (Shows page, span-assign picker, imaging scope)#456
genwave-radio merged 6 commits into
mainfrom
feat/dp2-authoring

Conversation

@genwave-radio

Copy link
Copy Markdown
Collaborator

📛 Dayparting epic — PR 2 of 5 (stacked on #455 · PLAN T243–T247)

The authoring layer — you can name your station's hours before anything airs differently:

  • 🗓️ Schedule show assignment (T243): POST /api/schedule/assign-show — transactional run-span (single SELECT snapshot, UPDATE … RETURNING honesty, response carries the fresh week fingerprint); ScheduleSegment.ShowId is the write-authoritative field (Show stays the load projection, duality pinned); the grid PUT round-trips showId end-to-end (wire + serializer + jest — the gh-schedule: a block spanning the whole week fails to save #255 wipe-on-repaint class killed at three layers); fingerprint hashes ShowId (rename never 409s an editor). Ruling recorded: music-only runs SPAN (Dean 2026-08-10) — one click names the overnight stretch.
  • 📺 Shows page (T244): list/create/edit with 60/120/400 budget maxlengths + counters, provenance line, guarded-delete rendering the block-naming 409; nav entry beside Schedule; zero coverage nudges (F119.3).
  • 🎚️ Grid side-panel picker (T245): server-owned run computation (client sends only the clicked block id); union-typed target/shows states — the armed-while-unloaded window is structurally unrepresentable; narrow-mode auto-disables on runs merging >1 stored row; roster server-loaded once, projected to {id,name,tagline} (flavor never enters client state).
  • 🎙️ Imaging show scope (T246): kind-agnostic write seam; station_id-gated picker (RATIFIED Dean 2026-08-10); Scope column with honest orphan label; TOCTOU window documented.
  • 🔌 T247 wire, orchestrator-run on a real stack (Kestrel + Next dev + Postgres + Playwright): created "Night Moves" through the page, run-span assigned onto a merged two-stored-row music-only run — both rows landed, the Monday block held the day boundary, narrow-disable rendered. The wire caught a real bug: server re-syncs ran the merge-reconciliation over freshly-loaded overrides, so merged named runs displayed "Current: None" (write correct, display wrong, jest green) — fixed + regression-pinned through the real derivation (1457efb).

✅ Gates

Every task opus-review-gated (T243 ×3 rounds, T244 first-round PASS, T245 ×2, T246 ×2, wire-fix ×1 — all catches probe- or stash-proven). Suites: solution non-Integration 0 failed, MediaLibrary Integration 668/0, jest 99 suites/931/0, tsc clean, Architecture 95/95, -warnaserror 0/0.

🖐️ Live checklist for the pinned deploy (the T229/T233 pattern — the on-air half)

  • Assign a show to a block covering now → next airing's booth rows carry show_id (query: select kind, segment_kind, show_id from station.booth_log order by id desc limit 10)
  • Showless hours stamp NULL (unchanged sound everywhere — no shows configured = byte-identical station)

…gn-show (run-span, transactional, RETURNING-honest), ShowId write-authoritative on ScheduleSegment, wire+grid round-trip preserves show_id, fingerprint covers it; music-only-runs-span RATIFIED (Dean 2026-08-10)
…ngths, provenance line, guarded-delete rendering the block-naming 409); nav entry; 7 jest specs + 401 knob fact
…span, union-typed target/shows states (armed-while-unloaded unrepresentable), narrow-disable on merged stored rows, server-loaded roster, sad-path specs 15/15
…ation_id-gated picker (RATIFIED Dean 2026-08-10), scope column w/ orphan label, allSettled page load; shared FakeShowStore dedup
…ed overrides as operator merges (Current: line now honest for merged named runs); regression pin through the real derivation
Base automatically changed from feat/dp1-foundation to main August 11, 2026 20:36
@genwave-radio
genwave-radio merged commit bf9f8ea into main Aug 11, 2026
11 checks passed
@genwave-radio
genwave-radio deleted the feat/dp2-authoring branch August 11, 2026 20:42
@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