feat: Dayparting PR 4/5 — the catalog show kind (import shell, shelf, soft hire offer) - #458
Merged
Conversation
…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
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📛 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:
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 —suggestedPersonarides the detail route only, never the shelf listing. Cross-repo golden parity pinned (golden.show.json, byte-identical, commit-hash recorded). 28 route facts.DialogShellextraction (one copy of the Radix chrome). 13 jest specs.suggestedPersonawired — shipped per Dean's ruling as 12 one-entry PRs (perf: run enrichment ffmpeg at low process priority #38–feat(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.til-sunrise · 2026-08-11in 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,
-warnaserror0/0, seam index green.🖐️ Live checklist (pinned deploy)