Skip to content
GoodTakes SpecificationsKnomee protocol ↗
GoodTakes / Specifications
Markdown ↓Source ↗
Source fingerprint4e29b931728124926bd48cb31319736ed1174cce19111ec3950e7cb3271e147c

Television catalog

MobLand and Chernobyl have source-backed episode imports. Series pages group episodes by season. Each episode has its own page, summary when the provider supplies one, review subject, independently resolved identity address and native rating target. Main discovery lists series, not their individual episodes. The review chooser groups episode options under the series.

Catalog filters and pagination update native browser history on the current pathname. They do not request a server-rendered query variant of a static export. The Next.js router observes those local query changes through useSearchParams.

Canonical keys stay film:tt… for both films and television, preserving the open target protocol and IMDb identity. Episode URLs contain the series name and SxxExx before the episode title and IMDb suffix. Parent relationships never redirect an episode take to the series or pool their spending or takes.

Source-backed imports

tools/import-television.main.kts accepts a frozen TVmaze show response with embedded episodes and a matching slice of IMDb's official title.episode.tsv. It joins only exact parent-series, season and episode numbers. Missing or duplicate IMDb mappings stop the import. The public, read-only Knomee resolver supplies each address; importing never mints, activates, signs or posts a review.

The frozen source JSON, its SHA256 and CC BY-SA attribution are published under public/data/television/. Summaries are plain-text adaptations of TVmaze data; the original bytes remain available. A missing summary remains absent, rather than copying the series description or inventing an episode plot. Artwork is copyrighted promotional media, separately recorded as non-free editorial use; the data license is not an artwork license.

Run the importer from the repository root:

kotlin tools/import-television.main.kts .goodtakes/show-source.json .goodtakes/show-imdb-episodes.tsv

The first input is https://api.tvmaze.com/shows/{showId}?embed=episodes. Extract the matching parent IMDb ID from the official title.episode.tsv.gz using gzip and rg, retaining the four original TSV columns and source bytes. The importer freezes the selected mapping rows alongside the original TVmaze JSON and hashes both. It caches public address lookups and the poster in the ignored .goodtakes/television-identities/ directory.

The durable television projection is merged into catalog.json. Oracle sync retains imported targets and season relationships. Runtime live catalog refreshes also retain snapshot-only titles. Source-backed TV pages do not invoke the film-specific Wikidata hydration lane. Existing oracle films continue using it.

Upgrading an existing series

Run the same importer with the existing series IMDb identifier. It validates the resolved address against the catalog and enriches the existing row. Original oracle provenance, reviews, immutable history, graph, poster and title/year routing remain intact. A miniseries stays a miniseries. Each episode receives its own canonical key and address. Catalog refresh and opened-title metadata preserve the imported television classification and episode relationship.

Series classification does not imply episode coverage. Run kotlin tools/television-coverage.main.kts to identify catalog series that still need an episode import and verify imported counts against frozen source data. Chernobyl has five episodes. Other unimported series must not be described as episode-complete merely because they appear in the Series filter.

Verification

Use TypeScript, lint, paired static export and the anonymous television acceptance harness. Check series-to-episode navigation, both seasons, distinct exact review subjects, summary text, direct routes and mobile overflow. No participant review or authenticated signing is part of this catalog verification. Unit tests are deferred under RAPID POC. Firebase is the current deployment scope.

Use kotlin tools/accept-television.main.kts <origin> film:tt7366338 for Chernobyl. Without a subject argument, the harness checks MobLand. It supports one or several seasons and checks preserved legacy series as well as newly imported ones.