{"schemaVersion":1,"artifactId":"catalog-transformation-method","preparedAt":"2026-09-12T00:20:53Z","repositoryRevision":"1397d3f1d1f6924468032a28854837520f6f5b5c","publicPath":"/catalog/catalog-transformation-method.json","publicationStatus":"method-and-source-offer","notice":"Machine-readable method and source record for the selection, normalization, rounding, suppression, override precedence and membership algorithms used to serve this catalog. Source contributions retain the licenses identified below. The AOD-derived selection is offered with its transformation method and additional contents under ODbL/DbCL; TVmaze contributions and adaptations retain CC BY-SA 4.0. This document does not assert a blanket license over the combined contents or underlying artwork. Images are linked from the TVmaze CDN. No private user data or credentials are included.","classification":{"status":"source-specific-terms-selected","decisionRecord":"docs/research/catalog-licensing-decision.md","odbl46":{"entireDerivativeDatabase":"not-offered-by-this-artifact","completeAlterationsMethodPlusAdditionalContents":"method-and-additional-contents-offer"},"scope":"AOD-derived selection: ODbL-1.0 and DbCL-1.0; TVmaze contributions and adaptations: CC-BY-SA-4.0; remaining contributions retain their stated source terms. No blanket artwork license or separate provider grant is asserted."},"inputs":[{"id":"manami-facts","path":"public/catalog/manami-facts.json","publicPath":"/catalog/manami-facts.json","runtime":true,"role":"selected metadata facts (titles, type, episodes, status, year, season, duration, studios, genres, score, synonyms)","source":"Anime Offline Database release 2026-27, lastUpdate 2026-07-04","sourceUrl":"https://github.com/manami-project/anime-offline-database","license":"ODbL-1.0 + DbCL-1.0","licenseUrl":"https://opendatacommons.org/licenses/odbl/1-0/","sha256":"08ed33b4ce947c1f79e339e4001a26fc3f19dd6ea5d5231c52e776859b4c705d"},{"id":"tvmaze-episode-facts","path":"public/catalog/tvmaze-episode-facts.json","publicPath":"/catalog/tvmaze-episode-facts.json","runtime":true,"role":"dated episode export: reviewed episode selection, numbering, titles and air dates; airborne rebroadcast-date policy","source":"TVmaze API show and episode payloads captured by operator import","sourceUrl":"https://www.tvmaze.com/api","license":"CC-BY-SA-4.0","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"b041ed917589f4814b91d3ab146cf40ee9efc13e901cc216f7dcdf9b50971396"},{"id":"tvmaze-descriptions","path":"public/catalog/tvmaze-descriptions.json","publicPath":"/catalog/tvmaze-descriptions.json","runtime":true,"role":"251 condensed show-description adaptations","source":"TVmaze show summaries, condensed by MyAnimeTracker","sourceUrl":"https://www.tvmaze.com/api","license":"CC-BY-SA-4.0","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"92e987088a117c7c6483d381d337cfbac0014cd4ad8493362454401cff57b8fd"},{"id":"tvmaze-poster-delivery","path":"public/catalog/tvmaze-poster-delivery.json","publicPath":"/catalog/tvmaze-poster-delivery.json","runtime":true,"role":"316-entry exact poster delivery allowlist","source":"TVmaze image CDN URLs selected by MyAnimeTracker","sourceUrl":"https://www.tvmaze.com/api#images","license":"CC-BY-SA-4.0 (selection and attribution); underlying artwork belongs to its rights holders","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"5ff817952a2960cecd9b33a6d04dad45488801c7a8e5ff8f4cfdf67e0620eca0"},{"id":"tvmaze-background-delivery","path":"public/catalog/tvmaze-background-delivery.json","publicPath":"/catalog/tvmaze-background-delivery.json","runtime":true,"role":"23-entry exact background delivery allowlist","source":"TVmaze image CDN URLs selected by MyAnimeTracker","sourceUrl":"https://www.tvmaze.com/api#images","license":"CC-BY-SA-4.0 (selection and attribution); underlying artwork belongs to its rights holders","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"3592aeff5927a0c61a3deac0bb1099afb786137d72ee6a424136421d51a6930e"},{"id":"tvmaze-episode-delivery","path":"public/catalog/tvmaze-episode-delivery.json","publicPath":"/catalog/tvmaze-episode-delivery.json","runtime":true,"role":"26-entry exact episode-image delivery allowlist","source":"TVmaze image CDN URLs selected by MyAnimeTracker","sourceUrl":"https://www.tvmaze.com/api#images","license":"CC-BY-SA-4.0 (selection and attribution); underlying artwork belongs to its rights holders","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"d45c8ef02b2c48ef66c5419667aa60f1961f9ff32439fe15e650df24bfac9d8f"},{"id":"reviewed-title-facts","path":"public/catalog/reviewed-title-facts.json","publicPath":"/catalog/reviewed-title-facts.json","runtime":true,"role":"5 reviewed post-snapshot title fact overrides (title, english title, type, status, year, season, episodes, aired_from, aired_to)","source":"individually cited official production announcements","sourceUrl":"https://myanimetracker.com/data-sources","license":"official-fact-reviewed (no open-license claim for source sites' prose or art)","licenseUrl":"","sha256":"2aa0eb40fe56a436b1049a68d9ec2cd58315dc4f912909c0255edd60ffa4ad93"},{"id":"reviewed-film-facts","path":"public/catalog/reviewed-film-facts.json","publicPath":"/catalog/reviewed-film-facts.json","runtime":true,"role":"14 reviewed film premiere and runtime facts used as display overrides","source":"Wikidata structured data with separately identified primary-source corrections","sourceUrl":"https://www.wikidata.org/","license":"CC0-1.0 (Wikidata claims); primary-source correction values are individually cited facts","licenseUrl":"https://creativecommons.org/publicdomain/zero/1.0/","sha256":"9ce10b0f481a8e9a60442b307c2e6009255aadcf0e59a8c319c9bd1a37111824"},{"id":"wikidata-series-membership","path":"public/catalog/wikidata-series-membership.json","publicPath":"/catalog/wikidata-series-membership.json","runtime":true,"role":"95 reviewed Wikidata series-membership groups (memberMalIds feed the relation union)","source":"Wikidata explicit P179 membership statements","sourceUrl":"https://www.wikidata.org/","license":"CC0-1.0","licenseUrl":"https://creativecommons.org/publicdomain/zero/1.0/","sha256":"6ab72fc14da36730128cca9697b0a6c05376d380ddeda632beb3f0281266febb"},{"id":"official-series-membership","path":"public/catalog/official-series-membership.json","publicPath":"/catalog/official-series-membership.json","runtime":true,"role":"reviewed Naruto/Boruto named-animation-family group","source":"primary publisher and animation studio factual review","sourceUrl":"https://myanimetracker.com/data-sources","license":"official-fact-reviewed (identity labels retain ODbL-1.0 + DbCL-1.0)","licenseUrl":"","sha256":"6b4e59831346899dd0bb1348c17caa169ca1db6a6ca81b1a86f1a18df4fed8ba"},{"id":"official-continuity-membership","path":"public/catalog/official-continuity-membership.json","publicPath":"/catalog/official-continuity-membership.json","runtime":true,"role":"102 reviewed official animation-family groups","source":"primary publisher and animation studio factual review","sourceUrl":"https://myanimetracker.com/data-sources","license":"official-fact-reviewed (identity labels retain ODbL-1.0 + DbCL-1.0)","licenseUrl":"","sha256":"5e73688ae9c947148f2e3b5650487b0817e913936f0821025c7b9ea14f6e5ca1"},{"id":"official-one-piece-membership","path":"public/catalog/official-one-piece-membership.json","publicPath":"/catalog/official-one-piece-membership.json","runtime":true,"role":"reviewed One Piece named-animation-family group","source":"official One Piece release history and Toei Animation factual review","sourceUrl":"https://myanimetracker.com/data-sources","license":"official-fact-reviewed (identity labels retain ODbL-1.0 + DbCL-1.0)","licenseUrl":"","sha256":"c14c47f5ea15a8b2c1c30fc7cd1da1a49d0172dfbf613aff29fe10c72866529e"},{"id":"tvmaze-series-membership","path":"public/catalog/tvmaze-series-membership.json","publicPath":"/catalog/tvmaze-series-membership.json","runtime":true,"role":"16 reviewed TVmaze season groups (memberMalIds feed the relation union)","source":"TVmaze show/season/episode identity mapping reviewed by MyAnimeTracker","sourceUrl":"https://www.tvmaze.com/api","license":"CC-BY-SA-4.0 (membership); identity labels retain their separately stated source terms","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"d01795f44e0cc60463f1e8a3480fbcc982c72c58619d552bcb12a6fef3297c8c"},{"id":"tvmaze-posters","path":"public/catalog/tvmaze-posters.json","publicPath":"/catalog/tvmaze-posters.json","runtime":false,"role":"published poster source/attribution list (public evidence, not a runtime input)","source":"TVmaze show pages and image CDN","sourceUrl":"https://www.tvmaze.com/api#images","license":"CC-BY-SA-4.0 (selection and attribution); underlying artwork belongs to its rights holders","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"ca94807dd5eecd3cd54cb0fdcf8a789390c8fecfe64262918387158247e8df92"},{"id":"tvmaze-backgrounds","path":"public/catalog/tvmaze-backgrounds.json","publicPath":"/catalog/tvmaze-backgrounds.json","runtime":false,"role":"published background source/attribution list","source":"TVmaze show pages and image CDN","sourceUrl":"https://www.tvmaze.com/api#images","license":"CC-BY-SA-4.0 (selection and attribution); underlying artwork belongs to its rights holders","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"d637afa678232bd7d4f616b5881488745d3e6f31d1ffdb861880ffe5914435d2"},{"id":"tvmaze-episodes","path":"public/catalog/tvmaze-episodes.json","publicPath":"/catalog/tvmaze-episodes.json","runtime":false,"role":"published episode-image source/attribution list","source":"TVmaze episode pages and image CDN","sourceUrl":"https://www.tvmaze.com/api#images","license":"CC-BY-SA-4.0 (selection and attribution); underlying artwork belongs to its rights holders","licenseUrl":"https://creativecommons.org/licenses/by-sa/4.0/","sha256":"5d1c59e61d52ea35557dbca154658c9bc3af8a4f14b06d508fb482ff838e5020"},{"id":"catalog-transformation-method","path":"public/catalog/catalog-transformation-method.json","publicPath":"/catalog/catalog-transformation-method.json","runtime":false,"self":true,"role":"this method document","source":"MyAnimeTracker application code","sourceUrl":"https://myanimetracker.com/data-sources","license":"documentation of the application method; not a licensed source contribution","licenseUrl":""}],"codeInputs":[{"path":"app/catalog/episode-sources/[id]/route.ts","role":"public per-title episode source download route","sha256":"20a6070e6da96a9dfc71cebc99635d4b1c48fc112ea87b5f56ea9f6300622beb"},{"path":"app/api/anime/query/route.ts","role":"public list/search/batch catalog route","sha256":"f00c0ef2aa37425a0122b82f24feabf702abc2565073a18f09f841c4102b4d94"},{"path":"app/api/anime/details/route.ts","role":"public detail route","sha256":"a3799edebb1238cd8c29084b089d1aae6ed97e2746da959ac2f24698711d2c68"},{"path":"app/api/user/anime-library/route.ts","role":"authenticated library list join","sha256":"d70b2aa62804ef0119014adcc2559d7628946f8f4196e2777cafc155edc00a8b"},{"path":"app/api/user/anime-library/[id]/route.ts","role":"authenticated library entry join","sha256":"451b9bf594727ac8e59d7c2bbbc5237f418e06a3dc4ebc28ac1e2ac9c885db17"},{"path":"lib/seo/catalog.ts","role":"public sitemap/SEO catalog read","sha256":"48e681d6b95b699e9f4a84e6ab47ea822a756b4f4949a1f00fe1222cdb019d4c"},{"path":"lib/catalog/local-query.ts","role":"index selection, filtering, sort, pagination","sha256":"3ab9884436988e1a293e3df2e5b615f348f69bd14cdc4d025488fadd74c7ab51"},{"path":"lib/catalog/local-index.ts","role":"visibility and published-facts index projection","sha256":"077e665f77abfafee44e8411f935984e98192800722ba999d6347b12ddd40e46"},{"path":"lib/catalog/local-details.ts","role":"detail composition, episode windowing, knownEpisodeCount","sha256":"75cd6f6787f7348c0d272d413e5049eb3a819849b92aada15646ab80a978ebe1"},{"path":"lib/catalog/fact-delivery.ts","role":"metadata fact projection and score rounding","sha256":"15e9a45b5214584f18112bee32b3b873467bac900fdf4a45fd9c7eb750a7cb1c"},{"path":"lib/catalog/metadata-entity.ts","role":"metadata row to AnimeEntity mapping","sha256":"3e93c10a79e5a550dcb51f3971d219ce9e74748f74034a6d2824b5ba848b631c"},{"path":"lib/catalog/content-delivery.ts","role":"description and image allowlist projection","sha256":"f08d72a61f7e816f1440ea07b80b547cd01ab2495375dc90626e844efb943382"},{"path":"lib/catalog/poster-delivery.ts","role":"poster/background exact allowlist resolution","sha256":"781cdcca89738a22d0d204391870dec63e62a7c4b42c285b20b3a41e0b5e5b08"},{"path":"lib/catalog/episode-delivery.ts","role":"episode image exact allowlist resolution","sha256":"5cd7a46c68dccef0e304390a8d95d7bbda5587dec95962b009a759ebacfd4e41"},{"path":"lib/catalog/artwork-attribution.ts","role":"artwork source URL derivation","sha256":"c6afff91e754e25abac880145cbda2811f23e8c6999814d16f7faaa65c25d8a4"},{"path":"lib/catalog/episode-facts.ts","role":"validated episode fact projection and source download","sha256":"f5e3903143730c07e5870877a65e262a8af1b11df2039c00fd855454cd5bcbd1"},{"path":"lib/catalog/episode-sync.ts","role":"episode row to AnimeEpisode mapping and verified-length windowing","sha256":"c35591f7b4b264f0f906c9c68a4d051ad40639bb1d87be6c72118c273551a1cc"},{"path":"lib/catalog/tvmaze-import.ts","role":"TVmaze mapping validation and episode numbering","sha256":"24682e978d047831e61708e0c4e4d253f0e39b92a8a479250ac955b8b419f0c5"},{"path":"lib/catalog/series-membership.ts","role":"membership union and relation construction","sha256":"670c1d5e4fe53437b5504f3207f139a7304f544c3349023c433434226d8d8767"},{"path":"lib/catalog/duration.ts","role":"duration text to minutes parser","sha256":"573f210f7592754ee5f4846145f91bcbaf8c3dd01ea881efd976fb13066b911a"},{"path":"lib/catalog/mode.ts","role":"catalog mode gate","sha256":"0f60b1f56998781d26bca3dc56a0ebbce712734fc6898cda6ae399b8d9ecc77e"},{"path":"lib/catalog/tvmaze-image-url.ts","role":"TVmaze image URL validator","sha256":"52adbc5ee75c58031ad059915403169da5be323548a8318063cfa1eaaaa4f932"},{"path":"lib/providers/tvmaze.ts","role":"TVmaze show/episode schemas and import bounds","sha256":"6db4cef815e93993e02e2d4b17ed843a3b40f2ecc4a5db11d750037f27c8e1aa"},{"path":"packages/core/src/popularity.ts","role":"popularity ranking evidence validator","sha256":"4565587b3e0f28d60214f1e2ecc3a86759d03d9a10b799bffeb390d9cc32b44e"},{"path":"packages/core/src/anime-genres.ts","role":"mature genre name policy","sha256":"7a86e43d6a9cf004efeff8f206037635adaea383b6cc15004e66d7baa2b6fb6b"},{"path":"packages/core/src/native-content-policy.ts","role":"native audience visibility policy","sha256":"4bde8e5f39eb02c61d6d769ad8590336bec45d393300e3adf0fcdf35e774a152"},{"path":"packages/core/src/types/anime.ts","role":"AnimeEntity/AnimeStatus/MediaFormat value enums","sha256":"833bf4e8654cfd6c0ab5185c86c0239835c63f54f01c6832a85d873b45c9d56f"}],"closureExclusions":[{"from":"app/api/anime/query/route.ts","to":"lib/catalog/metadata-sync.ts","reason":"local-mode branch returns before any metadata-sync call; only the re-exported mapAnimeMetadataRowToEntity is used and it is defined in metadata-entity.ts"},{"from":"app/api/anime/details/route.ts","to":"lib/catalog/metadata-sync.ts","reason":"local-mode branch returns before the legacy provider path; the entity mapper is re-exported from metadata-entity.ts"},{"from":"lib/catalog/local-details.ts","to":"lib/catalog/metadata-sync.ts","reason":"imports only the mapAnimeMetadataRowToEntity re-export defined in metadata-entity.ts; no metadata-sync provider or cache path runs in local mode"},{"from":"lib/catalog/episode-sync.ts","to":"packages/core/src/logger.ts","reason":"diagnostic logging only; contributes no served field or transformation"},{"from":"app/api/user/anime-library/route.ts","to":"lib/catalog/metadata-sync.ts","reason":"authenticated library reads use the catalog display projection only; metadata-sync is imported for legacy write-through paths that local mode never calls"},{"from":"app/api/anime/details/route.ts","to":"lib/catalog/episode-heal.ts","reason":"legacy provider episode heal; the local-mode branch returns before it"},{"from":"app/api/anime/details/route.ts","to":"lib/catalog/detail-slice-sync.ts","reason":"legacy provider detail slices; local mode never reads or writes them"},{"from":"lib/seo/catalog.ts","to":"packages/core/src/logger.ts","reason":"diagnostic logging only; contributes no served field"},{"from":"app/api/anime/query/route.ts","to":"packages/core/src/logger.ts","reason":"diagnostic logging only; contributes no served field"},{"from":"app/api/anime/details/route.ts","to":"packages/core/src/logger.ts","reason":"diagnostic logging only; contributes no served field"},{"from":"app/api/user/anime-library/route.ts","to":"packages/core/src/validation/tracking.ts","reason":"library write payload validation, not catalog display projection"},{"from":"app/api/user/anime-library/[id]/route.ts","to":"packages/core/src/validation/tracking.ts","reason":"library write payload validation, not catalog display projection"}],"externalImports":[{"specifier":"@/lib/api/schedule-background","resolvedPath":"lib/api/schedule-background.ts","reason":"request-lifecycle scheduling helper; no catalog value"},{"specifier":"@/lib/anime","resolvedPath":"lib/anime.ts","reason":"legacy provider service; unreachable in the local catalog branch"},{"specifier":"@/lib/api/native-catalog-audience","resolvedPath":"lib/api/native-catalog-audience.ts","reason":"native audience gating around the route handlers; no catalog value"},{"specifier":"@/lib/api/request-security","resolvedPath":"lib/api/request-security.ts","reason":"authentication for library routes; no catalog value"},{"specifier":"@/lib/api/resolve-within","resolvedPath":"lib/api/resolve-within.ts","reason":"bounded-read timeout helper for the legacy branch; no catalog value"},{"specifier":"@/lib/seo","resolvedPath":"lib/seo","reason":"catalog id parsing for sitemap routes; identity validation only"},{"specifier":"@/lib/supabase/admin","resolvedPath":"lib/supabase/admin.ts","reason":"service-role database client factory; storage access only"},{"specifier":"@/lib/api/route-helpers","resolvedPath":"lib/api/route-helpers.ts","reason":"PR126 extraction of existing audience/error/client plumbing and library SELECT columns. Coordinator inspected that catalog value projections remain in the declared catalog code; personal audience preferences are excluded from licensed contributions."}],"dynamicInputs":[{"id":"request-utc-date","kind":"clock","detect":[{"file":"lib/catalog/fact-delivery.ts","pattern":"new Date\\(\\)\\.toISOString\\(\\)\\.slice\\(0,10\\)"},{"file":"lib/catalog/local-query.ts","pattern":"now = new Date\\(\\)"}],"usedBy":["status-as-of-clock"],"semantics":"UTC calendar date at request time. Used only to downgrade a NOT_YET_RELEASED fact to UNKNOWN once any selected episode air date is not after today. Never used to invent dates.","asOf":"request time"},{"id":"request-utc-season","kind":"clock","detect":[{"file":"lib/catalog/local-query.ts","pattern":"now\\.getUTCMonth\\(\\)"},{"file":"lib/catalog/local-query.ts","pattern":"now\\.getUTCFullYear\\(\\)"}],"usedBy":["select-local-index-rows"],"semantics":"Current UTC year and quarter-derived season used only by the `seasonal` list filter; callers may pass an explicit `now`.","asOf":"request time"},{"id":"ranking-recorded-at-clock","kind":"clock","detect":[{"file":"packages/core/src/popularity.ts","pattern":"Date\\.now\\(\\)"}],"usedBy":["suppress-unmapped-fields"],"semantics":"Rejects a popularity ranking whose recordedAt is in the future. Local projection clears mal_popularity_evidence to null, so the observed served value is always null.","asOf":"request time"},{"id":"legacy-episode-write-clock","kind":"clock","detect":[{"file":"lib/catalog/episode-sync.ts","pattern":"new Date\\(\\)\\.toISOString\\(\\)"},{"file":"lib/catalog/episode-sync.ts","pattern":"Date\\.now\\(\\)"}],"usedBy":[],"semantics":"Write/refresh-path timestamps and legacy staleness comparison inside episode-sync. Local mode maps stored rows through mapEpisodeRowsToEntities and never writes or calls catalogEpisodesByMalId; declared so a future activation cannot become an unaccounted input.","asOf":"not exercised by the local served projection"},{"id":"catalog-mode-environment","kind":"environment","detect":[{"file":"lib/catalog/mode.ts","pattern":"process\\.env"}],"usedBy":["catalog-mode-gate"],"semantics":"usesLocalCatalog() is true unless NODE_ENV=test and CATALOG_MODE=legacy-test. All public served behavior reviewed here is the local-catalog branch.","asOf":"process start"},{"id":"catalog-provider-record-snapshot","kind":"database","detect":[{"file":"lib/catalog/episode-facts.ts","pattern":"catalog_provider_records"}],"usedBy":["validate-episode-source-identity","project-episode-source-download"],"semantics":"Live catalog_provider_records row per malId/provider=tvmaze (mapping, snapshot show/episodes, source_url, license, fetched_at). The served episode fields are re-derived from this committed snapshot on every request; the downloaded record carries its own fetched_at as the as-of marker.","asOf":"last committed provider import (fetched_at)"},{"id":"catalog-metadata-row","kind":"database","detect":[{"file":"lib/catalog/local-index.ts","pattern":"from\\('anime_metadata'\\)"},{"file":"lib/catalog/local-query.ts","pattern":"from\\('anime_metadata'\\)"},{"file":"lib/catalog/local-details.ts","pattern":"from\\('anime_metadata'\\)"},{"file":"lib/seo/catalog.ts","pattern":"from\\(\"anime_metadata\"\\)"}],"usedBy":["catalog-mode-gate","select-local-index-rows","preserve-safety-classification"],"semantics":"Stored anime_metadata supplies mal_id identity, retained safety classification (is_explicit/rating, served as isAdult/contentRating), and URLs used for exact allowlist matching. Other display facts are replaced by published contributions. Account preferences and user data are excluded from the offer.","asOf":"last catalog write; display facts are independent of it"},{"id":"catalog-episode-row","kind":"database","detect":[{"file":"lib/catalog/local-details.ts","pattern":"from\\('anime_episodes'\\)"}],"usedBy":["filter-episodes-to-verified-through"],"semantics":"Stored anime_episodes rows supply the episode ordinals that exist for a title and the legacy thumbnail/date columns that are replaced or suppressed; the served episode list is windowed to the verified-through bound.","asOf":"last catalog write"},{"id":"legacy-episode-table-access","kind":"database","detect":[{"file":"lib/catalog/episode-sync.ts","pattern":"from\\(.anime_episodes.\\)"}],"usedBy":[],"semantics":"Legacy episode refresh/read helpers in episode-sync. Local mode maps stored rows through mapEpisodeRowsToEntities and reads rows directly in local-details, so these accesses are not exercised by the served projection; declared so a future activation cannot become an unaccounted input.","asOf":"not exercised by the local served projection"}],"constants":[{"id":"manami-source-sha256","value":"8a63189782176fe19e00eca275288ba855ce54d6cb4d7ae97ec71450f861b1aa","notes":"pinned upstream release hash required before facts are prepared"},{"id":"manami-release","value":"2026-27 (lastUpdate 2026-07-04)","notes":"source snapshot version"},{"id":"manami-status-map","value":{"FINISHED":"FINISHED","ONGOING":"RELEASING","UPCOMING":"NOT_YET_RELEASED","other":"UNKNOWN"}},{"id":"manami-duration-rule","value":"unit SECONDS and value > 0 => `${value/60} min per ep`; otherwise null"},{"id":"manami-episode-zero-rule","value":"episodes <= 0 => null"},{"id":"manami-season-undefined-rule","value":"season UNDEFINED or absent => null"},{"id":"manami-score-range","value":"0 <= arithmeticMean <= 10, else null"},{"id":"manami-genre-tags","value":{"action":"Action","adventure":"Adventure","comedy":"Comedy","drama":"Drama","fantasy":"Fantasy","horror":"Horror","mystery":"Mystery","romance":"Romance","sci-fi":"Sci-Fi","science fiction":"Sci-Fi","slice of life":"Slice of Life","sports":"Sports","supernatural":"Supernatural","thriller":"Thriller"},"notes":"only these exact coarse tags map to a served genre; deduplicated and sorted"},{"id":"catalog-id-bound","value":"1..10000000 (positive integer)"},{"id":"score-round-2dp","value":"Math.round(score * 100) / 100"},{"id":"entity-score-scale","value":"Math.round(score10 * 10) => 0..100 integer"},{"id":"episode-total-gate","value":"status === FINISHED && facts.episodes >= max(mapped episode numbers)"},{"id":"episode-end-gate","value":"status === FINISHED && facts.episodes === mapped episode count && numbers are 1..n with non-decreasing air dates"},{"id":"episode-start-compat","value":"episode-derived premiere is used only when (!facts.year || facts.year === episodeYear) && (!facts.season || facts.season === episodeSeason)"},{"id":"episode-season-map","value":"['WINTER','SPRING','SUMMER','FALL'] indexed by floor((month-1)/3) from the first episode month"},{"id":"status-suppression-rule","value":"facts.status NOT_YET_RELEASED && any selected airDate <= current UTC date => UNKNOWN"},{"id":"series-member-label","value":"SERIES_MEMBER","notes":"constant label; no chronology is inferred"},{"id":"membership-manifests","value":["wikidata-series-membership","official-series-membership","official-continuity-membership","official-one-piece-membership","tvmaze-series-membership"]},{"id":"verified-through-rule","value":"max(served episodes ?? 0, highest published episode number)"},{"id":"known-episode-count-rule","value":"set to verifiedThrough when the served episode total is falsy"},{"id":"description-match-rule","value":"stored synopsis is served only when it is identical to the published description text for that malId; otherwise null"},{"id":"image-delivery-rule","value":"exact [malId, sourceUrl] (or [malId, number, sourceUrl]) allowlist match, deliveryUrl === sourceUrl and a static.tvmaze.com original_untouched URL; otherwise empty string/null (client placeholder)"},{"id":"episode-source-license","value":"CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)"},{"id":"episode-source-attribution","value":"TVmaze contributors; episode selection, numbering and cited corrections by MyAnimeTracker"},{"id":"episode-source-changes","value":["Episodes are selected and numbered for the corresponding anime release.","Provider dates are omitted for this release. (only when airDatePolicy=omit-provider-dates)","Selected episode titles are corrected using the cited sources. (only when titleCorrections exist)"]},{"id":"legacy-test-mode","value":"NODE_ENV=test && CATALOG_MODE=legacy-test (only then is legacy provider behavior reachable)"},{"id":"index-bounds","value":"MAX 60000 rows, 500-row keyset pages; query page 1..1000, limit 1..50, q <= 100 chars"},{"id":"query-sort-fields","value":["TITLE_ASC","TITLE_DESC","SCORE_ASC","SCORE_DESC","START_DATE_ASC","START_DATE_DESC","POPULARITY_ASC","POPULARITY_DESC"]},{"id":"search-normalization","value":"value.normalize('NFKC').toLowerCase(); substring match over title, title_english, title_japanese and synonyms"},{"id":"sort-null-rule","value":"null/undefined sort values last in both directions; mal_id ascending is the stable tie-break"},{"id":"seasonal-rule","value":"type=seasonal requires facts year === current UTC year and season === current UTC quarter season"},{"id":"mature-genre-rule","value":"a mature genre filter matches is_explicit === true; other genre filters match the published genres array"},{"id":"native-visibility-rule","value":"native audience hides prohibited genres (hentai, erotica, pornography) and unknown ratings; R/R+ are not treated as pornography"},{"id":"sfw-visibility-rule","value":"allowAdult=false requires is_explicit === false; allowAdult=true keeps every classified row"},{"id":"positional-id-rule","value":"genre and studio ids are the 1-based array positions, not source identifiers"},{"id":"public-catalog-file-set","value":"every *.json in public/catalog is part of the reviewed publication fingerprint (publicationSourceFiles)"}],"transforms":[{"id":"catalog-mode-gate","algorithm":"usesLocalCatalog() returns true unless NODE_ENV=test and CATALOG_MODE=legacy-test. Public served fields reviewed here are the local branch; the legacy provider branch is deliberately excluded.","constants":["legacy-test-mode"],"fields":["*"],"probe":"catalog-mode-gate"},{"id":"select-manami-records","algorithm":"Parse the pinned JSONL release; keep only entries with exactly one https://myanimelist.net/anime/<id> source URL matching the record id; keep only ids present in the local catalog; sort by mal_id; reject duplicates; publish selected fields and the original source_urls. related_ids are deduplicated and sorted but never served as relations.","constants":["manami-source-sha256","manami-release"],"fields":["title.romaji","synonyms","format","episodes","status","seasonYear","season","duration","studios","genres","averageScore"],"probe":"select-manami-records"},{"id":"normalize-manami-facts","algorithm":"status mapping, episodes<=0 to null, season UNDEFINED to null, duration seconds/60 to `${n} min per ep`, score range check, genre tag whitelist (dedupe+sort).","constants":["manami-status-map","manami-duration-rule","manami-episode-zero-rule","manami-season-undefined-rule","manami-score-range","manami-genre-tags"],"fields":["format","episodes","status","seasonYear","season","duration","genres","averageScore"],"probe":"normalize-manami-facts"},{"id":"select-tvmaze-episodes","algorithm":"Use only explicitly mapped TVmazeEpisodeIds; require a regular-type episode with a non-null provider number and a non-placeholder name (reject /^episode \\d+(\\(season finale\\))?$/i and TBD); renumber to the reviewed mapping number; reject duplicate ids or numbers; validate each air date as an exact ISO yyyy-mm-dd calendar date.","constants":["catalog-id-bound"],"fields":["episodes[].number","episodes[].tvmazeEpisodeId","episodes[].title"],"probe":"select-tvmaze-episodes"},{"id":"suppress-tvmaze-rebroadcast-dates","algorithm":"When mapping.airDatePolicy === 'omit-provider-dates', every projected episode airDate is null and the download changes list gains the omission sentence. Names and ids are retained.","constants":["episode-source-changes"],"fields":["episodes[].airDate"],"probe":"suppress-tvmaze-rebroadcast-dates"},{"id":"apply-tvmaze-title-corrections","algorithm":"A reviewed correction replaces the provider episode name only while the provider name is still either the recorded expectedTitle or the correction title; the corrected list is exported separately with its cited source URLs.","constants":[],"fields":["episodes[].title","corrections[].sourceUrls"],"probe":"apply-tvmaze-title-corrections"},{"id":"validate-episode-source-identity","algorithm":"Validate the stored record with the strict schema, then require mal_id match, mapping/provider/show identities, show.type === Animation, show.language === Japanese, show.name === expectedTitle, show.premiered === expectedPremiere and source_url === https://www.tvmaze.com/shows/<id>; otherwise the read fails.","constants":[],"fields":["tvmazeId","sourceUrl"],"probe":"validate-episode-source-identity"},{"id":"project-episode-source-download","algorithm":"Build schemaVersion 1 record: identity + source URL + constant license/attribution/changes + fetched_at + sorted episodes + sorted corrections resolved to projected episode numbers.","constants":["episode-source-license","episode-source-attribution","episode-source-changes"],"fields":["schemaVersion","malId","tvmazeId","sourceUrl","license.name","license.url","attribution","changes","fetchedAt","episodes[].malId","episodes[].number","episodes[].tvmazeEpisodeId","episodes[].title","episodes[].airDate","corrections[].number","corrections[].tvmazeEpisodeId","corrections[].sourceUrls"],"probe":"project-episode-source-download"},{"id":"override-precedence-title","algorithm":"For the 5 reviewed post-snapshot malIds, reviewed-title-facts values win over the manami snapshot: title, title_english, type, status, year, season, episodes, aired_from, aired_to. Otherwise the manami snapshot value is used; title_english stays null because the snapshot publishes no English title.","constants":[],"fields":["title.romaji","title.english","format","status","seasonYear","season","episodes","startDate.year","startDate.month","startDate.day","endDate.year","endDate.month","endDate.day"],"probe":"override-precedence-title"},{"id":"override-film-facts","algorithm":"For the 14 reviewed film records, durationMinutes (value in minutes) becomes `${value} min per ep` and premiere becomes aired_from. The film premiere is used only when no reviewed-title override supplies aired_from. Records with only a premiere keep the snapshot duration.","constants":[],"fields":["duration","startDate.year","startDate.month","startDate.day"],"probe":"override-film-facts"},{"id":"round-score-to-2dp","algorithm":"Math.round(facts.score * 100) / 100; null score stays null.","constants":["score-round-2dp"],"fields":["averageScore"],"probe":"round-score-to-2dp"},{"id":"scale-score-to-100","algorithm":"AnimeEntity.averageScore = Math.round(projected score * 10); null stays null. The served scale is 0..100 while the source snapshot and every download keep the 0..10 value.","constants":["entity-score-scale"],"fields":["averageScore"],"probe":"scale-score-to-100"},{"id":"parse-duration-minutes","algorithm":"Trim; a bare number means minutes; otherwise parse optional hours/minutes/seconds with optional trailing 'per ep'; convert to minutes as h*60 + m + s/60; return null unless finite and > 0.","constants":[],"fields":["duration"],"probe":"parse-duration-minutes"},{"id":"gate-episode-total","algorithm":"A FINISHED title exposes facts.episodes only when it is >= the highest mapped episode number; otherwise the total is suppressed to null. Non-FINISHED titles always expose null. The entity maps null to 0.","constants":["episode-total-gate"],"fields":["episodes"],"probe":"gate-episode-total"},{"id":"derive-episode-start-date","algorithm":"Take the first episode only when its number is 1. Use its air date as the premiere only when it agrees with the snapshot year and season (a missing snapshot year/season is treated as compatible). Conflicts are suppressed rather than relabelled.","constants":["episode-start-compat","episode-season-map"],"fields":["startDate.year","startDate.month","startDate.day"],"probe":"derive-episode-start-date"},{"id":"derive-episode-end-date","algorithm":"Expose the last air date as the end date only when status is FINISHED, the snapshot total exists, the mapped episode count equals that total, and mapped numbers are exactly 1..n with non-decreasing air dates.","constants":["episode-end-gate"],"fields":["endDate.year","endDate.month","endDate.day"],"probe":"derive-episode-end-date"},{"id":"status-as-of-clock","algorithm":"A NOT_YET_RELEASED snapshot/override status is downgraded to UNKNOWN when any selected episode air date is today or earlier in UTC. Future-dated or date-less records keep NOT_YET_RELEASED.","constants":["status-suppression-rule"],"fields":["status"],"probe":"status-as-of-clock"},{"id":"iso-date-to-utc-parts","algorithm":"Parse an ISO timestamp with Date and expose UTC getUTCFullYear/getUTCMonth+1/getUTCDate; null or unparseable input yields {year:null,month:null,day:null}.","constants":[],"fields":["startDate.year","startDate.month","startDate.day","endDate.year","endDate.month","endDate.day"],"probe":"iso-date-to-utc-parts"},{"id":"union-series-membership","algorithm":"Build a neighbor set per malId from the memberMalIds of all five membership manifests (Wikidata, official series, official continuity, official One Piece, TVmaze). Union, drop self, sort ascending, and label every edge with the constant SERIES_MEMBER. No chronology, prefix or shared-studio inference.","constants":["membership-manifests","series-member-label"],"fields":["relations"],"probe":"union-series-membership"},{"id":"exact-match-poster-allowlist","algorithm":"Look up JSON.stringify([malId, sourceUrl]) in the reviewed poster allowlist; in local mode an unlisted or changed source resolves to '' so the client placeholder is used. Every allowlist entry must be a static.tvmaze.com original_untouched URL with deliveryUrl === sourceUrl and no duplicate identity.","constants":["image-delivery-rule"],"fields":["coverImage.large","coverImage.medium"],"probe":"exact-match-poster-allowlist"},{"id":"exact-match-background-allowlist","algorithm":"Same exact-match rule for backgrounds; unlisted or changed source resolves to null.","constants":["image-delivery-rule"],"fields":["bannerImage"],"probe":"exact-match-background-allowlist"},{"id":"exact-match-episode-image-allowlist","algorithm":"Look up JSON.stringify([malId, number, sourceUrl]); unlisted source resolves to '' and is mapped to null. A shared image still needs a separate entry per episode.","constants":["image-delivery-rule"],"fields":["thumbnail"],"probe":"exact-match-episode-image-allowlist"},{"id":"derive-artwork-source-url","algorithm":"Return the reviewed TVmaze show URL only when the served poster or background is allowlisted for the title and a reviewed tvmaze-episode-facts record exists whose sourceUrl equals https://www.tvmaze.com/shows/<tvmazeId>; otherwise undefined. This is attribution for the selected image, not an image license.","constants":[],"fields":["artworkSourceUrl"],"probe":"derive-artwork-source-url"},{"id":"exact-match-description","algorithm":"In local mode serve the stored synopsis only when it is identical to the published adapted text for that malId; a changed or unpublished stored value resolves to null. Duplicate manifest identities are rejected at module load.","constants":["description-match-rule"],"fields":["description"],"probe":"exact-match-description"},{"id":"suppress-unpublished-episode-values","algorithm":"In local mode the stored episode title_japanese, synopsis and air_date_disputed are never served: titleJapanese=null, synopsis=null, airDateDisputed=false; title and airDate come from the published episode facts; thumbnail only from the exact allowlist; length is always null.","constants":[],"fields":["titleJapanese","synopsis","airDateDisputed","title","airDate","length"],"probe":"suppress-unpublished-episode-values"},{"id":"episode-placeholder-title","algorithm":"When the episode ordinal has no published fact, the served title is `Episode ${number}`.","constants":[],"fields":["title"],"probe":"episode-placeholder-title"},{"id":"filter-episodes-to-verified-through","algorithm":"Verified-through = max(served episode total ?? 0, highest published episode number). Stored episode rows above that bound are omitted from the detail response. When the served total is falsy the entity gains knownEpisodeCount = verifiedThrough instead of a fabricated total.","constants":["verified-through-rule","known-episode-count-rule"],"fields":["episodes","knownEpisodeCount"],"probe":"filter-episodes-to-verified-through"},{"id":"derive-relations-array","algorithm":"The entity relations array is the membership union; the detail `related` list is the same entries with non-null malId, and relatedDegraded is true when that list is empty. Legacy stored typed edges are never used in local mode.","constants":[],"fields":["relations","related","relatedDegraded"],"probe":"derive-relations-array"},{"id":"placeholder-title","algorithm":"When neither a reviewed override nor a published fact exists, the served title is `Title ${mal_id}`. Such ids are still excluded from public lists by the published-facts gate.","constants":[],"fields":["title.romaji"],"probe":"placeholder-title"},{"id":"positional-genre-studio-ids","algorithm":"Genres and studios are served as {id: 1-based array index, name}; the ids are presentation positions, not source identifiers.","constants":["positional-id-rule"],"fields":["genres","studios"],"probe":"positional-genre-studio-ids"},{"id":"suppress-unmapped-fields","algorithm":"popularity, mal_popularity_rank, mal_popularity_evidence, trailer_id/site/thumbnail and source are forced to null/'' so no legacy provider value can be served; AnimeEntity therefore serves popularity=null, popularityRanking=null, trailer=null, source='', externalLinks=[] and rankings=[].","constants":[],"fields":["popularity","popularityRanking","source","trailer","externalLinks","rankings"],"probe":"suppress-unmapped-fields"},{"id":"deliberate-null-constants","algorithm":"title.native, coverImage.color, mediaListEntry, nextAiringEpisode and isFallback are fixed constants (null/null/null/null/false). No source value is consulted.","constants":[],"fields":["title.native","coverImage.color","mediaListEntry","nextAiringEpisode","isFallback"],"probe":"deliberate-null-constants"},{"id":"preserve-safety-classification","algorithm":"is_explicit and rating are copied unchanged from the stored catalog row into isAdult/contentRating; they are never derived from the published facts and never published in a download. They are a private content-safety classification, not a licensed display contribution.","constants":[],"fields":["isAdult","contentRating"],"probe":"preserve-safety-classification"},{"id":"select-local-index-rows","algorithm":"Keyset-page anime_metadata (max 60000 rows, 500 per page), keep rows with published facts, apply catalogVisible (allowAdult or is_explicit===false; native audience applies the native policy), then project each row through the same facts/content transforms used for detail reads.","constants":["index-bounds","sfw-visibility-rule","native-visibility-rule"],"fields":["*"],"probe":"select-local-index-rows"},{"id":"search-and-sort","algorithm":"NFKC+lowercase substring search over published title fields; format/status/genre filters against projected values; seasonal filter against the current UTC season; deterministic sort with nulls last and mal_id tie-break; page/limit bounds enforced before any database work.","constants":["search-normalization","sort-null-rule","seasonal-rule","mature-genre-rule","query-sort-fields","index-bounds"],"fields":["title.romaji","title.english","title.native","synonyms","format","status","genres","seasonYear","season","startDate.year","averageScore"],"probe":"search-and-sort"}],"servedFields":[{"surface":"entity.metadata","key":"id","source":"stored mal_id","transform":"catalog-mode-gate","license":"identity-key (not a licensed contribution)","notes":"numeric MAL identity key retained by explicit review"},{"surface":"entity.metadata","key":"malId","source":"stored mal_id","transform":"catalog-mode-gate","license":"identity-key","notes":""},{"surface":"entity.metadata","key":"title.english","source":"reviewed-title-facts override; otherwise the manami title","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":"the snapshot publishes no English title, so a non-override English title is null and the romaji title is used"},{"surface":"entity.metadata","key":"title.romaji","source":"reviewed-title-facts override; otherwise manami-facts title; otherwise placeholder","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"entity.metadata","key":"title.native","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"deliberately suppressed; the legacy stored Japanese title is never served in local mode"},{"surface":"entity.metadata","key":"coverImage.large","source":"stored image URL matched against the poster allowlist","transform":"exact-match-poster-allowlist","license":"CC-BY-SA-4.0 (selection/attribution); artwork rights belong to rights holders","notes":"link-only delivery from the TVmaze CDN; '' triggers the local placeholder"},{"surface":"entity.metadata","key":"coverImage.medium","source":"stored image_small_url ?? image_url matched against the poster allowlist","transform":"exact-match-poster-allowlist","license":"CC-BY-SA-4.0 (selection/attribution); artwork rights belong to rights holders","notes":""},{"surface":"entity.metadata","key":"coverImage.color","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant null"},{"surface":"entity.metadata","key":"bannerImage","source":"stored banner_image matched against the background allowlist","transform":"exact-match-background-allowlist","license":"CC-BY-SA-4.0 (selection/attribution); artwork rights belong to rights holders","notes":""},{"surface":"entity.metadata","key":"artworkSourceUrl","source":"reviewed tvmaze-episode-facts show source URL","transform":"derive-artwork-source-url","license":"CC-BY-SA-4.0 (attribution link)","notes":"present only when the served image is allowlisted and a reviewed show record exists"},{"surface":"entity.metadata","key":"format","source":"reviewed override; otherwise manami type","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":"UNKNOWN when neither exists"},{"surface":"entity.metadata","key":"status","source":"reviewed override; otherwise manami status","transform":"status-as-of-clock","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":"UTC-date downgrade rule"},{"surface":"entity.metadata","key":"episodes","source":"reviewed override; otherwise gated manami total","transform":"gate-episode-total","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":"entity maps a suppressed null to 0"},{"surface":"entity.metadata","key":"knownEpisodeCount","source":"published episode facts and the served total","transform":"filter-episodes-to-verified-through","license":"derived from ODbL-1.0 + DbCL-1.0 and CC-BY-SA-4.0 contributions","notes":"detail responses only; present when the served total is falsy"},{"surface":"entity.metadata","key":"seasonYear","source":"reviewed override; otherwise manami year","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"entity.metadata","key":"season","source":"reviewed override; otherwise manami season","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"entity.metadata","key":"duration","source":"reviewed film minutes; otherwise manami duration text","transform":"override-film-facts","license":"CC0-1.0 (film facts) | ODbL-1.0 + DbCL-1.0","notes":"entity exposes parsed minutes"},{"surface":"entity.metadata","key":"genres","source":"manami selected genre tags","transform":"positional-genre-studio-ids","license":"ODbL-1.0 + DbCL-1.0","notes":"ids are positions"},{"surface":"entity.metadata","key":"synonyms","source":"manami title_synonyms","transform":"normalize-manami-facts","license":"ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"entity.metadata","key":"description","source":"tvmaze-descriptions adapted text","transform":"exact-match-description","license":"CC-BY-SA-4.0","notes":"stored synopsis served only on exact match; otherwise null"},{"surface":"entity.metadata","key":"averageScore","source":"manami aggregate arithmeticMean","transform":"scale-score-to-100","license":"ODbL-1.0 + DbCL-1.0","notes":"two-step rounding: 2dp then x10 integer"},{"surface":"entity.metadata","key":"popularity","source":"none","transform":"suppress-unmapped-fields","license":"not-served","notes":"legacy provider count deliberately excluded"},{"surface":"entity.metadata","key":"popularityRanking","source":"none","transform":"suppress-unmapped-fields","license":"not-served","notes":"evidence column forced null; clock-guarded validator then returns null"},{"surface":"entity.metadata","key":"source","source":"none","transform":"suppress-unmapped-fields","license":"not-served","notes":"constant ''"},{"surface":"entity.metadata","key":"studios","source":"manami studios","transform":"positional-genre-studio-ids","license":"ODbL-1.0 + DbCL-1.0","notes":"ids are positions"},{"surface":"entity.metadata","key":"startDate.year","source":"reviewed override | film premiere | compatible first-episode air date","transform":"derive-episode-start-date","license":"official-fact-reviewed | CC0-1.0 | CC-BY-SA-4.0","notes":"episode date suppressed when it conflicts with snapshot year/season"},{"surface":"entity.metadata","key":"startDate.month","source":"same as startDate.year","transform":"iso-date-to-utc-parts","license":"official-fact-reviewed | CC0-1.0 | CC-BY-SA-4.0","notes":""},{"surface":"entity.metadata","key":"startDate.day","source":"same as startDate.year","transform":"iso-date-to-utc-parts","license":"official-fact-reviewed | CC0-1.0 | CC-BY-SA-4.0","notes":""},{"surface":"entity.metadata","key":"endDate.year","source":"reviewed override | gated last-episode air date","transform":"derive-episode-end-date","license":"official-fact-reviewed | CC-BY-SA-4.0","notes":""},{"surface":"entity.metadata","key":"endDate.month","source":"same as endDate.year","transform":"iso-date-to-utc-parts","license":"official-fact-reviewed | CC-BY-SA-4.0","notes":""},{"surface":"entity.metadata","key":"endDate.day","source":"same as endDate.year","transform":"iso-date-to-utc-parts","license":"official-fact-reviewed | CC-BY-SA-4.0","notes":""},{"surface":"entity.metadata","key":"trailer","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant null; legacy trailer columns excluded"},{"surface":"entity.metadata","key":"externalLinks","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant []"},{"surface":"entity.metadata","key":"rankings","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant []"},{"surface":"entity.metadata","key":"isAdult","source":"stored is_explicit","transform":"preserve-safety-classification","license":"private-safety-classification (not a licensed display contribution)","notes":"never derived from published facts and never published"},{"surface":"entity.metadata","key":"contentRating","source":"stored rating","transform":"preserve-safety-classification","license":"private-safety-classification","notes":""},{"surface":"entity.metadata","key":"mediaListEntry","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant null"},{"surface":"entity.metadata","key":"nextAiringEpisode","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant null"},{"surface":"entity.metadata","key":"relations","source":"five reviewed membership manifests","transform":"union-series-membership","license":"CC0-1.0 | CC-BY-SA-4.0 | official-fact-reviewed (identity labels ODbL-1.0 + DbCL-1.0)","notes":"mixed-license union; constant SERIES_MEMBER label"},{"surface":"entity.metadata","key":"isFallback","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant false"},{"surface":"entity.episode","key":"id","source":"stored episode number","transform":"filter-episodes-to-verified-through","license":"identity-key","notes":""},{"surface":"entity.episode","key":"number","source":"stored episode number","transform":"filter-episodes-to-verified-through","license":"identity-key","notes":""},{"surface":"entity.episode","key":"title","source":"published episode fact; otherwise placeholder","transform":"episode-placeholder-title","license":"CC-BY-SA-4.0","notes":"corrected titles are individually cited"},{"surface":"entity.episode","key":"titleJapanese","source":"none","transform":"suppress-unpublished-episode-values","license":"not-served","notes":"constant null in local mode"},{"surface":"entity.episode","key":"length","source":"none","transform":"suppress-unpublished-episode-values","license":"not-served","notes":"constant null"},{"surface":"entity.episode","key":"airDate","source":"published episode fact","transform":"suppress-tvmaze-rebroadcast-dates","license":"CC-BY-SA-4.0","notes":"null when the reviewed policy omits provider dates"},{"surface":"entity.episode","key":"synopsis","source":"none","transform":"suppress-unpublished-episode-values","license":"not-served","notes":"constant null in local mode"},{"surface":"entity.episode","key":"thumbnail","source":"stored thumbnail URL matched against the episode allowlist","transform":"exact-match-episode-image-allowlist","license":"CC-BY-SA-4.0 (selection/attribution); artwork rights belong to rights holders","notes":"null when unlisted"},{"surface":"entity.episode","key":"airDateDisputed","source":"none","transform":"suppress-unpublished-episode-values","license":"not-served","notes":"constant false in local mode"},{"surface":"download.episodeSource","key":"schemaVersion","source":"code constant","transform":"project-episode-source-download","license":"not-served","notes":"constant 1"},{"surface":"download.episodeSource","key":"malId","source":"stored identity","transform":"project-episode-source-download","license":"identity-key","notes":""},{"surface":"download.episodeSource","key":"tvmazeId","source":"reviewed mapping","transform":"validate-episode-source-identity","license":"identity-key","notes":""},{"surface":"download.episodeSource","key":"sourceUrl","source":"stored reviewed source_url","transform":"validate-episode-source-identity","license":"CC-BY-SA-4.0 (attribution link)","notes":"must equal the TVmaze show URL"},{"surface":"download.episodeSource","key":"license.name","source":"code constant","transform":"project-episode-source-download","license":"not-served","notes":"CC BY-SA 4.0"},{"surface":"download.episodeSource","key":"license.url","source":"code constant","transform":"project-episode-source-download","license":"not-served","notes":"https://creativecommons.org/licenses/by-sa/4.0/"},{"surface":"download.episodeSource","key":"attribution","source":"code constant","transform":"project-episode-source-download","license":"not-served","notes":"TVmaze contributors; selection, numbering and cited corrections by MyAnimeTracker"},{"surface":"download.episodeSource","key":"changes","source":"code constants plus mapping policy","transform":"project-episode-source-download","license":"not-served","notes":"adaptation/modification notice"},{"surface":"download.episodeSource","key":"fetchedAt","source":"stored snapshot timestamp","transform":"project-episode-source-download","license":"not-served","notes":"as-of marker for the dynamic download"},{"surface":"download.episodeSource","key":"episodes[].malId","source":"reviewed mapping identity","transform":"select-tvmaze-episodes","license":"identity-key","notes":""},{"surface":"download.episodeSource","key":"episodes[].number","source":"reviewed mapping number","transform":"select-tvmaze-episodes","license":"not-served","notes":"renumbered for the catalog release"},{"surface":"download.episodeSource","key":"episodes[].tvmazeEpisodeId","source":"TVmaze episode id","transform":"validate-episode-source-identity","license":"identity-key","notes":""},{"surface":"download.episodeSource","key":"episodes[].title","source":"TVmaze episode name with reviewed corrections","transform":"apply-tvmaze-title-corrections","license":"CC-BY-SA-4.0","notes":""},{"surface":"download.episodeSource","key":"episodes[].airDate","source":"TVmaze episode airdate","transform":"suppress-tvmaze-rebroadcast-dates","license":"CC-BY-SA-4.0","notes":"null when the policy omits provider dates"},{"surface":"download.episodeSource","key":"corrections[].number","source":"projected episode number","transform":"project-episode-source-download","license":"not-served","notes":""},{"surface":"download.episodeSource","key":"corrections[].tvmazeEpisodeId","source":"reviewed correction identity","transform":"apply-tvmaze-title-corrections","license":"identity-key","notes":""},{"surface":"download.episodeSource","key":"corrections[].sourceUrls","source":"reviewed correction citations","transform":"apply-tvmaze-title-corrections","license":"official-fact-reviewed (cited URLs, not prose)","notes":""},{"surface":"detail.response","key":"episodeSourceUrl","source":"presence of a validated episode source and a non-adult stored classification","transform":"validate-episode-source-identity","license":"not-served","notes":"null when the title is not explicitly classified SFW or has no source record"},{"surface":"detail.response","key":"related","source":"membership union","transform":"derive-relations-array","license":"CC0-1.0 | CC-BY-SA-4.0 | official-fact-reviewed","notes":"empty list is explained by relatedDegraded"},{"surface":"detail.response","key":"relatedDegraded","source":"membership union emptiness","transform":"derive-relations-array","license":"not-served","notes":"true means unknown, not standalone"},{"surface":"detail.response","key":"characters","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant [] in local mode"},{"surface":"detail.response","key":"staff","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant []"},{"surface":"detail.response","key":"recommendations","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant []"},{"surface":"seo.record","key":"mal_id","source":"stored identity","transform":"catalog-mode-gate","license":"identity-key","notes":"SEO/sitemap surface reuses the same projection"},{"surface":"seo.record","key":"title","source":"published facts/override","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"seo.record","key":"title_english","source":"published facts/override (always null unless overridden)","transform":"override-precedence-title","license":"official-fact-reviewed","notes":""},{"surface":"seo.record","key":"title_japanese","source":"none","transform":"deliberate-null-constants","license":"not-served","notes":"constant null"},{"surface":"seo.record","key":"synopsis","source":"tvmaze-descriptions","transform":"exact-match-description","license":"CC-BY-SA-4.0","notes":""},{"surface":"seo.record","key":"type","source":"published facts/override","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"seo.record","key":"episodes","source":"published facts/override","transform":"gate-episode-total","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"seo.record","key":"status","source":"published facts/override","transform":"status-as-of-clock","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"seo.record","key":"year","source":"published facts/override","transform":"override-precedence-title","license":"official-fact-reviewed | ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"seo.record","key":"image_url","source":"poster allowlist","transform":"exact-match-poster-allowlist","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders","notes":""},{"surface":"seo.record","key":"image_large_url","source":"poster allowlist","transform":"exact-match-poster-allowlist","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders","notes":""},{"surface":"seo.record","key":"genres","source":"published facts","transform":"normalize-manami-facts","license":"ODbL-1.0 + DbCL-1.0","notes":""},{"surface":"seo.record","key":"updated_at","source":"stored row timestamp","transform":"catalog-mode-gate","license":"not-served","notes":"storage timestamp, not a source-data contribution; used only for sitemap lastmod metadata"}],"exclusions":[{"surface":"entity.metadata","key":"titleJapanese","reason":"deliberately null; the legacy Japanese title column is storage only"},{"surface":"entity.metadata","key":"trailer_id/trailer_site/trailer_thumbnail","reason":"forced null; no reviewed trailer source exists"},{"surface":"entity.metadata","key":"popularity/mal_popularity_rank/mal_popularity_evidence","reason":"legacy provider values deliberately excluded from the served catalog"},{"surface":"entity.episode","key":"filler/recap/air_date_source","reason":"stored provider flags/provenance are not part of the served episode entity in local mode"},{"surface":"entity.episode","key":"thumbnail_url (stored value)","reason":"stored URL never served directly; only the exact allowlisted CDN URL is"},{"surface":"artwork","key":"underlying image bytes","reason":"images are linked from the TVmaze CDN, not redistributed; a database license does not grant rights to the artwork"},{"surface":"identity","key":"is_explicit/rating","reason":"private safety classification preserved for access control; not a licensed display contribution and not published in downloads"}],"manifestFields":[{"file":"manami-facts.json","runtimeRead":true,"paths":[{"path":"$","keys":["changes","lastUpdate","license","records","source","sourceSha256","version"],"role":"provenance header","license":"ODbL-1.0 + DbCL-1.0"},{"path":"license","keys":["name","url"],"role":"upstream license statement","license":"ODbL-1.0 + DbCL-1.0"},{"path":"records[]","keys":["duration","episodes","genres","mal_id","related_ids","score","season","source_urls","status","studios","title","title_english","title_japanese","title_synonyms","type","year"],"role":"selected facts; mal_id/title/title_synonyms/type/episodes/status/year/season/duration/studios/genres/score are served; title_english/title_japanese are always null; related_ids/source_urls are published provenance and never served as relations","license":"ODbL-1.0 + DbCL-1.0"}]},{"file":"tvmaze-episode-facts.json","runtimeRead":true,"paths":[{"path":"$","keys":["catalogCheckedAt","changes","license","licenseUrl","records"],"role":"license and adaptation notice","license":"CC-BY-SA-4.0"},{"path":"records[]","keys":["airDatePolicy","episodes","fetchedAt","malId","sourceUrl","titleCorrections","tvmazeId"],"role":"dated episode export; identity, numbering, titles, dates and corrections are served (dates subject to the policy)","license":"CC-BY-SA-4.0"},{"path":"records[].episodes[]","keys":["airDate","malId","number","title","tvmazeEpisodeId"],"role":"published episode facts","license":"CC-BY-SA-4.0"},{"path":"records[].titleCorrections[]","keys":["reason","sourceUrls","title","tvmazeEpisodeId"],"role":"reviewed corrections; title and sourceUrls are served, reason is review evidence","license":"CC-BY-SA-4.0 (corrected selection); cited official URLs are facts"}]},{"file":"tvmaze-descriptions.json","runtimeRead":true,"paths":[{"path":"$","keys":["attribution","descriptions","license"],"role":"attribution and license notice","license":"CC-BY-SA-4.0"},{"path":"descriptions[]","keys":["changes","license","malId","sourceUrl","text","tvmazeId"],"role":"adapted description served only on exact text match","license":"CC-BY-SA-4.0"}]},{"file":"tvmaze-poster-delivery.json","runtimeRead":true,"paths":[{"path":"$","keys":["deliveryMode","deliveryPolicy","posters","verifiedAt"],"role":"delivery review header","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders"},{"path":"posters[]","keys":["byteLength","deliveryUrl","malId","sha256","sourceUrl"],"role":"exact delivery allowlist used by the served poster fields","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders"}]},{"file":"tvmaze-background-delivery.json","runtimeRead":true,"paths":[{"path":"$","keys":["deliveryMode","deliveryPolicy","posters","verifiedAt"],"role":"delivery review header","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders"},{"path":"posters[]","keys":["byteLength","deliveryUrl","malId","sha256","sourceUrl"],"role":"exact delivery allowlist used by the served banner field","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders"}]},{"file":"tvmaze-episode-delivery.json","runtimeRead":true,"paths":[{"path":"$","keys":["deliveryMode","deliveryPolicy","episodes","verifiedAt"],"role":"delivery review header","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders"},{"path":"episodes[]","keys":["byteLength","deliveryUrl","malId","number","sha256","sourceUrl","tvmazeEpisodeId"],"role":"exact episode-image allowlist used by the served thumbnail field","license":"CC-BY-SA-4.0 (selection); artwork rights belong to rights holders"}]},{"file":"reviewed-title-facts.json","runtimeRead":true,"paths":[{"path":"$","keys":["entries","licensingNote","reviewedAt","schemaVersion"],"role":"review header","license":"official-fact-reviewed"},{"path":"entries[]","keys":["facts","malId","sourceUrls","verifiedAt"],"role":"override entries; facts wins over the snapshot","license":"official-fact-reviewed"},{"path":"entries[].facts","keys":["aired_from","aired_to","episodes","season","status","title","title_english","type","year"],"role":"override values","license":"official-fact-reviewed"}]},{"file":"reviewed-film-facts.json","runtimeRead":true,"paths":[{"path":"$","keys":["catalogCheckedAt","description","records"],"role":"review header","license":"CC0-1.0 (Wikidata claims); corrections individually cited"},{"path":"records[]","keys":["facts","malId","sourceLicenseUrl","title","wikidataId","wikidataRevision","wikidataUrl"],"role":"film records; facts.premiere and facts.durationMinutes are served","license":"CC0-1.0 (Wikidata claims); corrections individually cited"},{"path":"records[].facts","keys":["durationMinutes","premiere"],"role":"premiere and runtime overrides","license":"CC0-1.0 (Wikidata claims); corrections individually cited"},{"path":"records[].facts.durationMinutes","keys":["basis","claimId","evidenceUrls","rationale","scope","value"],"role":"value is served as duration minutes; the rest is review evidence","license":"CC0-1.0 (Wikidata claims); corrections individually cited"},{"path":"records[].facts.premiere","keys":["basis","claimId","evidenceUrls","rationale","scope","value"],"role":"value is served as aired_from; the rest is review evidence","license":"CC0-1.0 (Wikidata claims); corrections individually cited"}]},{"file":"wikidata-series-membership.json","runtimeRead":true,"paths":[{"path":"$","keys":["coverage","records","relationshipSemantics","reviewStatus","reviewedAt","schemaVersion","selectionPolicy","source","sourceLicense","sourceLicenseUrl"],"role":"review header and coverage notes","license":"CC0-1.0"},{"path":"coverage","keys":["fullCandidateArtifact","furtherOneToOneItemTypeHolds","inputTitles","multipleItemTitles","noCurrentExactMatchTitles","publishedGroups","publishedTitles","singleItemWithMultipleMalIdsTitles"],"role":"coverage note","license":"not-served"},{"path":"records[]","keys":["groupId","label","memberMalIds","members","relationType","reviewRationale","reviewedAt","scope","sourceInstanceOf","sourceRevision","sourceUrl","wikidataId"],"role":"memberMalIds feed the relation union; the rest is review evidence","license":"CC0-1.0"},{"path":"records[].members[]","keys":["identityStatementIds","malId","membershipStatementIds","sourceRevision","sourceUrl","wikidataId"],"role":"per-member review evidence; identity labels retain ODbL terms","license":"CC0-1.0 (statements); identity labels ODbL-1.0 + DbCL-1.0"},{"path":"records[].sourceInstanceOf[]","keys":["id","label"],"role":"review evidence","license":"CC0-1.0"}]},{"file":"official-series-membership.json","runtimeRead":true,"paths":[{"path":"$","keys":["coverage","holds","identitySnapshot","licensingNote","records","reviewStatus","reviewedAt","schemaVersion","source"],"role":"review header and identity snapshot","license":"official-fact-reviewed; identity labels ODbL-1.0 + DbCL-1.0"},{"path":"coverage","keys":["heldTitles","narutoInputTitles","publishedGroups","publishedTitles"],"role":"coverage note","license":"not-served"},{"path":"holds[]","keys":["malId","reason","title"],"role":"held review cases","license":"not-served"},{"path":"identitySnapshot","keys":["path","sha256","sourceLicense","sourceVersion"],"role":"pins the manami identity snapshot","license":"ODbL-1.0 + DbCL-1.0"},{"path":"records[]","keys":["groupId","label","memberMalIds","members","relationType","reviewRationale","reviewedAt","scope","sourceUrls"],"role":"memberMalIds feed the relation union","license":"official-fact-reviewed; identity labels ODbL-1.0 + DbCL-1.0"},{"path":"records[].members[]","keys":["episodeFactImport","identityBasis","localTitle","malId","matchedPublishedAlias","membershipRationale","originalSourceUrl","primarySourceTitle","releaseKind","retrievedAt","reviewedAt","sourceArchiveUrl","sourceProvenance","sourceSha256","sourceSnapshotTimestamp","sourceUrl","supportingSourceUrls"],"role":"per-member review evidence","license":"official-fact-reviewed"}]},{"file":"official-continuity-membership.json","runtimeRead":true,"paths":[{"path":"$","keys":["absentRecords","coverage","heldRecords","identitySnapshot","licensingNote","records","reviewStatus","reviewedAt","schemaVersion","source"],"role":"review header and case lists","license":"official-fact-reviewed; identity labels ODbL-1.0 + DbCL-1.0"},{"path":"absentRecords[]","keys":["malId","reason","sourceRetrievedAt","sourceSha256","sourceUrl","title"],"role":"absent review cases","license":"not-served"},{"path":"coverage","keys":["absentTitles","attackOnTitanTitles","dragonBallTitles","fruitsBasket2019Titles","fullmetalAlchemistTitles","heldTitles","publishedGroups","publishedTitles","scopeNote"],"role":"coverage note","license":"not-served"},{"path":"heldRecords[]","keys":["malId","reason","title"],"role":"held review cases","license":"not-served"},{"path":"identitySnapshot","keys":["path","sha256","sourceLicense","sourceVersion"],"role":"pins the manami identity snapshot","license":"ODbL-1.0 + DbCL-1.0"},{"path":"records[]","keys":["groupId","label","memberMalIds","members","operation","relationType","reviewRationale","reviewedAt","scope","scopeLimit","sourceRetrievals","sourceUrls"],"role":"memberMalIds feed the relation union","license":"official-fact-reviewed; identity labels ODbL-1.0 + DbCL-1.0"},{"path":"records[].members[]","keys":["aliasMatchNote","aliasScopeLimitation","carrierEquivalenceAsserted","decision","documentaryIssuer","episodeFactImport","identityBasis","identityBoundary","identityInference","identitySourcePath","identitySourceSha256","identitySourceType","innerSegmentEquivalenceAsserted","localTitle","malId","matchedPublishedAlias","matchedPublishedAliases","mediaAssetImport","membershipRationale","originalSourceUrl","pinnedScopeAlias","primarySourceTitle","primarySourceTitleNote","productCode","publisherHosted","receiptFormat","releaseKind","retrievedAt","reviewVerdict","reviewedAt","runtimeFactImport","selectedIdentity","selectedIdentityProvenance","sourceArchiveUrl","sourceCountDiscrepancy","sourceCustodian","sourceCustodyUrl","sourceHostingLimitation","sourceOwnershipBasis","sourcePage","sourceProvenance","sourceReceiptBoundary","sourceReceiptFormat","sourceReceiptKind","sourceReceiptNote","sourceReceiptProvenance","sourceReceiptType","sourceRetrievedAt","sourceSha256","sourceSnapshotDate","sourceSnapshotTimestamp","sourceUrl","supportingSourceUrls","yearFactImport"],"role":"per-member review evidence","license":"official-fact-reviewed"},{"path":"records[].members[].selectedIdentity","keys":["episodes","studio","type","year"],"role":"per-member selected identity evidence","license":"official-fact-reviewed"},{"path":"records[].sourceRetrievals[]","keys":["bytes","contentType","retrievedAt","sha256","url"],"role":"retrieval evidence for the reviewed records","license":"not-served"}]},{"file":"official-one-piece-membership.json","runtimeRead":true,"paths":[{"path":"$","keys":["coverage","heldRecords","identitySnapshot","licensingNote","records","relationshipSemantics","reviewStatus","reviewedAt","schemaVersion","source"],"role":"review header and case lists","license":"official-fact-reviewed; identity labels ODbL-1.0 + DbCL-1.0"},{"path":"coverage","keys":["heldRecordScope","heldTitles","officialTheatricalFilms","onePieceInputTitles","publishedGroups","publishedTitles"],"role":"coverage note","license":"not-served"},{"path":"identitySnapshot","keys":["path","sha256","sourceLicense","sourceVersion"],"role":"pins the manami identity snapshot","license":"ODbL-1.0 + DbCL-1.0"},{"path":"records[]","keys":["groupId","label","memberMalIds","members","relationType","reviewRationale","reviewedAt","scope","sourceUrls"],"role":"memberMalIds feed the relation union","license":"official-fact-reviewed; identity labels ODbL-1.0 + DbCL-1.0"},{"path":"records[].members[]","keys":["episodeFactImport","identityBasis","identitySource","identitySourceSha256","localTitle","malId","matchedPublishedAlias","membershipRationale","primarySourceTitle","relationshipScope","releaseKind","retrievedAt","reviewedAt","selectedIdentity","sourceProvenance","sourceReceiptFormat","sourceReceiptNote","sourceReleaseDate","sourceSha256","sourceUrl","supportingSourceUrls"],"role":"per-member review evidence","license":"official-fact-reviewed"},{"path":"records[].members[].identitySource","keys":["identityBoundary","path","sha256","sourceLicense","sourceVersion","verifiedAt"],"role":"per-member identity source evidence","license":"official-fact-reviewed"},{"path":"records[].members[].selectedIdentity","keys":["type","year"],"role":"per-member selected identity evidence","license":"official-fact-reviewed"}]},{"file":"tvmaze-series-membership.json","runtimeRead":true,"paths":[{"path":"$","keys":["identityLicense","identitySnapshots","officialCorroboration","priorMappingEvidenceNote","records","relationshipSemantics","reviewCaveats","reviewStatus","reviewedAt","schemaVersion","selectionPolicy","source","sourceLicense","sourceLicenseUrl","sources"],"role":"review header and evidence lists","license":"CC-BY-SA-4.0 (membership); identity labels retain their source terms"},{"path":"identitySnapshots[]","keys":["path","sha256"],"role":"pins identity snapshots","license":"ODbL-1.0 + DbCL-1.0 (manami snapshot)"},{"path":"officialCorroboration[]","keys":["bytes","hashKind","observationSha256","resolvedUrl","retrievedAt","reviewerParaphrase","sha256","url","webReviewSucceeded"],"role":"corroboration evidence","license":"not-served"},{"path":"records[]","keys":["groupId","label","memberMalIds","members","relationType","sourceApiUrls","sourceUrl","tvmazeShowId"],"role":"memberMalIds feed the relation union","license":"CC-BY-SA-4.0"},{"path":"records[].members[]","keys":["evidenceEpisodeIds","evidenceKind","firstSelectedAirdate","lastSelectedAirdate","localTitle","malId","mappedEpisodeIds","priorMappingReview","priorMappingReviewer","providerOrdinalRange","reviewRationale","sourceUrls","tvmazeSeasonIds","tvmazeSeasonNumbers","tvmazeShowId"],"role":"per-member review evidence","license":"CC-BY-SA-4.0"},{"path":"sources[]","keys":["bytes","retrievedAt","sha256","url"],"role":"retrieval evidence","license":"not-served"}]},{"file":"tvmaze-posters.json","runtimeRead":false,"paths":[{"path":"$","keys":["apiLicense","apiTerms","attribution","changes","posters","underlyingImageRights"],"role":"public attribution list header","license":"CC-BY-SA-4.0 (selection); underlying artwork belongs to rights holders"},{"path":"posters[]","keys":["imageUrl","malId","scope","sourceUrl"],"role":"published source/attribution rows","license":"CC-BY-SA-4.0 (selection); underlying artwork belongs to rights holders"}]},{"file":"tvmaze-backgrounds.json","runtimeRead":false,"paths":[{"path":"$","keys":["apiLicense","apiTerms","attribution","backgrounds","changes","underlyingImageRights"],"role":"public attribution list header","license":"CC-BY-SA-4.0 (selection); underlying artwork belongs to rights holders"},{"path":"backgrounds[]","keys":["imageUrl","malId","sourceUrl"],"role":"published source/attribution rows","license":"CC-BY-SA-4.0 (selection); underlying artwork belongs to rights holders"}]},{"file":"tvmaze-episodes.json","runtimeRead":false,"paths":[{"path":"$","keys":["apiLicense","apiTerms","attribution","changes","episodes","underlyingImageRights"],"role":"public attribution list header","license":"CC-BY-SA-4.0 (selection); underlying artwork belongs to rights holders"},{"path":"episodes[]","keys":["imageUrl","malId","number","sourceUrl","tvmazeEpisodeId"],"role":"published source/attribution rows","license":"CC-BY-SA-4.0 (selection); underlying artwork belongs to rights holders"}]},{"file":"catalog-transformation-method.json","runtimeRead":false,"self":true,"paths":[{"path":"$","keys":["schemaVersion","artifactId","preparedAt","repositoryRevision","publicPath","publicationStatus","notice","classification","inputs","codeInputs","closureExclusions","externalImports","dynamicInputs","constants","transforms","servedFields","exclusions","manifestFields","dbSurfaces"],"role":"this method document","license":"documentation; not a licensed source contribution"}]}],"dbSurfaces":{"anime_metadata":{"source":"publication.ts metadataColumns","servedThrough":{"mal_id":["id","malId"],"title":["title.romaji","title.english"],"title_english":["title.english"],"title_japanese":["title.native"],"title_synonyms":["synonyms"],"type":["format"],"episodes":["episodes"],"status":["status"],"aired_from":["startDate.year","startDate.month","startDate.day"],"aired_to":["endDate.year","endDate.month","endDate.day"],"duration":["duration"],"rating":["contentRating"],"synopsis":["description"],"season":["season"],"year":["seasonYear"],"source":["source"],"score":["averageScore"],"popularity":["popularity"],"image_url":["coverImage.large","coverImage.medium"],"image_small_url":["coverImage.medium"],"image_large_url":["coverImage.large"],"genres":["genres"],"studios":["studios"],"banner_image":["bannerImage"],"trailer_id":["trailer"],"trailer_site":["trailer"],"trailer_thumbnail":["trailer"],"relations":["relations"],"is_explicit":["isAdult"],"mal_popularity_rank":["popularityRanking"],"mal_popularity_evidence":["popularityRanking"]},"storageOnly":{"id":"surrogate primary key; mal_id is the served identity","aired_string":"legacy display string; startDate/endDate are derived from facts","background":"legacy prose field; never served","broadcast_day":"legacy schedule fragment; not served","broadcast_time":"legacy schedule fragment; not served","broadcast_timezone":"legacy schedule fragment; not served","scored_by":"legacy provider count; not served","rank":"legacy provider rank; not served","members":"legacy provider count; not served","favorites":"legacy provider count; not served","trailer_url":"legacy trailer URL; trailer is a constant null","created_at":"storage timestamp","updated_at":"storage timestamp; SEO lastmod only","expiry_date":"cache freshness bookkeeping","is_full_detail":"legacy mode gate; local mode requires published facts instead","anilist_id":"legacy provider identity; not served"}},"anime_episodes":{"source":"publication.ts episodeColumns","servedThrough":{"mal_id":["id"],"number":["id","number"],"title":["title"],"title_japanese":["titleJapanese"],"synopsis":["synopsis"],"thumbnail_url":["thumbnail"],"air_date":["airDate"],"air_date_disputed":["airDateDisputed"]},"storageOnly":{"id":"surrogate primary key; number is the served identity","air_date_source":"provider provenance; local mode serves a constant false/omitted dispute flag","filler":"provider flag; not part of the served episode entity","recap":"provider flag; not part of the served episode entity","expiry_date":"cache freshness bookkeeping","created_at":"storage timestamp","updated_at":"storage timestamp"}},"cleanupPreserved":{"anime_metadata":["id","mal_id","rating","is_explicit","created_at","updated_at","expiry_date"],"anime_episodes":["id","mal_id","number","created_at","updated_at","expiry_date"],"reason":"guarded L10 cleanup preserves identity, the private safety classification and storage bookkeeping; these are deliberately not treated as licensed display contributions"}}}
