Skip to content

feat(catchup): resolve Xtream archive through existing playback intent - #319

Open
MrFr3di wants to merge 10 commits into
mainfrom
feat/315-xtream-catchup
Open

feat(catchup): resolve Xtream archive through existing playback intent#319
MrFr3di wants to merge 10 commits into
mainfrom
feat/315-xtream-catchup

Conversation

@MrFr3di

@MrFr3di MrFr3di commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Refs #315, parent #184.

Completes the bounded Xtream catch-up slice through the existing provider-neutral playback architecture; no second catch-up framework, player path, provider registry, or Room schema change.

Implemented:

  • persists supported tv_archive / tv_archive_duration through the existing generic catch-up metadata;
  • resolves accepted CatchupProgram intents into an opaque Xtream archive reference plus the existing ResolvedPlaybackTimeline contract;
  • materializes that opaque reference through XtreamPlaybackReferenceResolver using the existing credential lookup, SourceUrlPolicy, exact HTTP approval and redaction ownership;
  • supports only the evidence-backed first dialect /timeshift/{username}/{password}/{duration}/{start}/{streamId}.{ext}, with duration in minutes and UTC start formatted yyyy-MM-dd:HH-mm;
  • composes Xtream first with fallback to the existing M3U archive resolver only on NotApplicable;
  • marks the characterized Xtream archive semantics SUPPORTED in the compatibility corpus without claiming alternate timeshift dialects.

TDD evidence includes separate RED/GREEN checkpoints for metadata persistence, archive intent resolution, transport materialization, and M3U+Xtream application composition. Composition RED: a50e0a4673fd93a9203d65afaa343549d51be22f; production composition: b0aad3230bd3011e32f69867fee10b82051ccb34.

Final exact head cee85003f38637b28b0e2169ce725db7196726b4 is ahead 10 / behind 0 against main 22011085b52179c33661c8fc11e37137785d3a02 and passed:

Compatibility note: the first implemented Xtream timeshift dialect derives the start value deterministically in UTC because the bounded source model does not persist provider/server archive timezone. Alternate panel timezone/dialect behavior is intentionally not claimed by this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant