Skip to content

refactor: modularize the generation pipeline (plugin architecture M1-M3) #830

Description

@lpukatch

Summary

Make the generation pipeline modular enough to later support externally maintained providers and domain-specific planning logic, without giving plugins ownership of Teamarr's database, Dispatcharr connection, scheduler, or XMLTV output.

This issue tracks initial modularization only (milestones M1–M3, Packets 0–7). No plugin loading, no subprocess runtime, no public stage API. Every packet must preserve current behavior — API payloads, SSE shape, scheduler keys, progress phases/percentages, metrics, XMLTV output, lock semantics.

Plan document: teamarr-plugin-architecture-and-modularization-plan.md (local, not checked in).

Packets / PRs

PR Packet Scope
1 0 Characterization tests (no production changes)
2 1 Run-scoped SportsDataService
3 2 Pipeline models (context, progress, cancellation, settings snapshot)
4 3 Fixed stage runner
5 4 Preparation / team / group phase extraction
6 5A Channel numbering + XMLTV extraction
7 5B Stream ordering + audit extraction
8 6A Lifecycle, deletion, reconciliation extraction
9 6B Media refresh, cleanup, statistics extraction
10 7 Thin facade + compatibility sweep

PRs are strictly linear; each branches from its merged predecessor.

Non-goals (M1–M3)

Plugin manifests/loading/subprocesses, public stage-author API, mutable stage registry, user-configurable stage ordering, retries/rollback/parallelism, async conversion, new cancellation checkpoints inside worker loops, processing-run schema changes, XMLTV/lifecycle/ordering/reconciliation redesign, removal of compatibility aliases.

Later milestones (not this issue)

M4 declarative plan/apply boundary, M5 local subprocess plugin runtime, M6 golf + ICS tournament planner plugin, M7 Grandstand cutover, M8 plugin management UI/docs.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: readyBead created; queued for worktype: refactorRestructure without changing behavior

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions