Skip to content

feat: Dayparting PR 4/5 — the catalog show kind (import shell, shelf, soft hire offer) - #458

Merged
genwave-radio merged 3 commits into
mainfrom
feat/dp4-catalog
Aug 11, 2026
Merged

feat: Dayparting PR 4/5 — the catalog show kind (import shell, shelf, soft hire offer)#458
genwave-radio merged 3 commits into
mainfrom
feat/dp4-catalog

Conversation

@genwave-radio

Copy link
Copy Markdown
Collaborator

📛 Dayparting epic — PR 4 of 5 (stacked on #457 · PLAN T253–T257 · pairs with catalog #37 + entries #38#49)

Shows become the catalog's third community kind:

  • 📥 Import (T254): POST /api/shows/{slug}/import?catalogSlug=… through the F79 shell — size caps, schema-major reject naming both versions, deserialisation-as-validation, atomic gh-save-as-own provenance guard is read-then-write (TOCTOU) — make it a conditional upsert #394 conditional upsert (ON CONFLICT … WHERE imported_from IS NOT NULL — an authored show's slug survives an import byte-for-byte, live-PG proven; no read-then-write anywhere on the path), provenance stamps. Name + Flavor sanitized at the parser seam (control chars flattened, fence runs collapsed — imported text can't open prompt lines or forge fence delimiters; Tagline deliberately untouched, pinned both directions); the F90 full-card confirm remains the ruled primary gate. Kind "show" joins the index/meta projection — suggestedPersona rides the detail route only, never the shelf listing. Cross-repo golden parity pinned (golden.show.json, byte-identical, commit-hash recorded). 28 route facts.
  • 🛍️ Shelf (T255): show cards (bestFor chips, honest provenance chips — authored-colliding slugs never lie "Imported"); a combined full-card review modal with flavor explicitly labeled "(feeds the DJ's prompt)"; the soft "also hire ⟨persona⟩" offer — only when on-shelf and un-hired, and accepting opens the persona's own F90 review modal (no silent second import; the review-intent state carries its slug, so a failed/superseded load can never open the modal unrequested). DialogShell extraction (one copy of the Radix chrome). 13 jest specs.
  • 🌱 Seed (T256): 12 first-party show cards — one per demo DJ, suggestedPersona wired — shipped per Dean's ruling as 12 one-entry PRs (perf: run enrichment ffmpeg at low process priority #38feat(tts): kokoro-fastapi v0.6.0 + memory cap (fixes demo RSS leak) #49) stacked on catalog tools: Need a tools/test-pronunciation.sh script #37 (the persona-seed precedent; the diff-scope guard enforces it). Content reviewed against each persona's card; zero lint WARNs.
  • 🔌 T257 wire, orchestrator-run against a REAL catalog origin (the seed tree served locally, hash-verified fetch through the production proxy): shelf listed all 12, the modal rendered the full card, confirm imported with provenance (til-sunrise · 2026-08-11 in Postgres), the offer fired for un-hired Midnight Mabel with honest copy, and declining hired nothing.

✅ Gates

Every task opus-review-gated (T253 ×2 + docs rider, T254 ×2, T255 ×2, T256 content ×2 — catches included an unconstrained slug field on the public contribution surface, a non-atomic import gate, a stale-flag modal bug, and a lying provenance chip). Suites: non-Integration 0 failed, MediaLibrary Integration 675/0 (Docker), jest 99 suites/944/0, catalog selftest 99/0, -warnaserror 0/0, seam index green.

🖐️ Live checklist (pinned deploy)

  • After catalog tools: Need a tools/test-pronunciation.sh script #37 + at least one entry PR merge: the public shelf lists the show card(s); import through the modal on the demo box; provenance renders on the Shows page
  • The also-hire offer against the real public catalog (a show whose DJ you haven't hired)

…ditional upsert, authored rows survive; Name+Flavor sanitized at the parser seam, Tagline deliberately not), kind 'show' catalog projection (suggestedPersona detail-only), golden parity pinned; 28 route facts
…odal (flavor labeled as prompt-feeding), soft also-hire offer via the real persona review flow (slug-carried gate), honest provenance chips; DialogShell extraction
Base automatically changed from feat/dp3-onair to main August 11, 2026 20:45
Comment thread src/GenWave.Host/Api/ShowsController.cs Dismissed
@genwave-radio
genwave-radio merged commit 610fdd2 into main Aug 11, 2026
11 checks passed
@genwave-radio
genwave-radio deleted the feat/dp4-catalog branch August 11, 2026 20:55
@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.

2 participants