Når redirect_feed er satt i podcast-trait, returnerer maskinrommet
HTTP 301 Moved Permanently med Location-header i stedet for å serve
feeden. iTunes new-feed-url-taggen bevares også i RSS-en for klienter
som ikke følger 301.
Admin-UI: erstatter det enkle tekstfeltet med tre tilstander:
- Inaktiv: knapp "Flytt podcast til annen plattform..."
- Bekreftelse: advarsel + URL-felt + rød "Aktiver redirect"-knapp
- Aktiv: gul statusindikator med deaktiver-knapp
Backend: sjekker redirect_feed tidlig i generate_feed() og returnerer
301 før noe annet arbeid gjøres (DB-oppslag for episodes osv).
Utvider synops-rss og maskinrommet/src/rss.rs med iTunes og Podcasting 2.0
namespace for podcast-samlinger.
Channel-level tags:
- itunes:author, itunes:category, itunes:explicit fra podcast-trait metadata
- itunes:image fra samlingens og_image-edge (CAS-hash)
- itunes:type (episodic)
- podcast:locked
Item-level tags:
- itunes:title, itunes:duration (fra media-metadata duration_secs)
- itunes:explicit (arver fra kanal), itunes:image (episode og_image)
- podcast:transcript (SRT-URL hvis transcription_segments finnes)
- podcast:chapters (JSON-URL hvis chapter-edges finnes)
DB-spørringene er utvidet til å hente transkripsjons-eksistens,
varighet, episode-bilde og kapitler i effektive batch-spørringer.
Merk: Transcript/chapters-URL-ene genereres i feeden men krever
offentlige endepunkt for å serveres (fremtidig oppgave).
Ved ny versjon av lydfil: flytt has_media-edge til ny fil,
derived_from-edge bevarer historikk, gammel fil mister aktive
edges og prunes etter 30 dager (konfigurerbart for RSS-cache).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8 oppgaver: iTunes/Podcasting 2.0 RSS-tags, nedlastingsstatistikk
(IAB-kompatibel), embed-spiller, import fra eksisterende podcast
med prøveimport-flyt (importer → test → re-importer nye → 301),
og feed-redirect for å flytte bort.
Feature-spec: docs/features/podcast_hosting.md
Ingen castopod — podcasten er noder med riktige edges og en feed.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>