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.
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
SportsDataServicePRs 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.