{ "lexicon": 1, "id": "club.hause.podcast.defs", "defs": { "showRef": { "type": "object", "description": "Reference to a podcast feed. `guid` is canonical and is always present — when a feed lacks , the canonical fallback per the Podcasting 2.0 namespace is uuidv5(name = feedUrl with scheme and trailing slashes stripped, namespace = ead4c236-bf58-58c6-a2c6-a6b28d128cb6). `feedUrl` and `podcastIndexId` are resolver hints only; clients MUST verify a record's identity by computing the guid and comparing.", "required": ["guid"], "properties": { "guid": { "type": "string", "minLength": 36, "maxLength": 36, "description": "Lowercase canonical UUID — the value of from the RSS feed, or the deterministic uuidv5 fallback. Lowercase is required so two clients computing the same guid compare equal." }, "feedUrl": { "type": "string", "format": "uri", "description": "Optional: the RSS feed URL. Resolver hint AND the input to the canonical guid derivation. Clients MUST NOT use feedUrl as the identity of a show." }, "podcastIndexId": { "type": "integer", "minimum": 1, "description": "Optional: Podcast Index's row id for this feed. Untrusted cache hint; a record carrying a wrong podcastIndexId is still valid as long as `guid` is correct." } } }, "episodeRef": { "type": "object", "description": "Reference to a podcast episode. `guid` is the RSS 2.0 , only required to be unique within its feed — the composite key for an episode is (showRef.guid, episodeRef.guid). `enclosureUrl` is a fallback for feeds with missing or duplicate guids.", "required": ["guid"], "properties": { "guid": { "type": "string", "minLength": 1, "maxLength": 1024, "description": "RSS 2.0 of the episode. Not globally unique — only unique within the feed identified by the surrounding showRef." }, "enclosureUrl": { "type": "string", "format": "uri", "description": "Optional: the audio enclosure URL. Use as a fallback identifier when a feed omits or reuses guids across episodes." } } } } }