Document channel architecture, M3U/XMLTV integration with Jellyfin, and fork maintenance strategy for the archived upstream. Also includes CLAUDE.md updates for implementer workflow and project boundaries. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.2 KiB
3.2 KiB
Fork Maintenance Strategy
Upstream ErsatzTV was archived February 2026 at v26.3.0. This fork is maintained independently on Gitea.
Divergence Policy
We diverge freely from upstream's final state. There is no upstream to merge from, so maintaining merge compatibility serves no purpose. All changes are our own.
Security & Dependency Updates
.NET Runtime
- Current: .NET 10.0 (LTS candidate, supported through Nov 2028)
- Upgrade path: When .NET 11 ships (Nov 2026), upgrade by updating
TargetFrameworkacross all projects andglobal.json. TherollForward: latestMinorsetting inglobal.jsonhandles patch versions automatically. - Key constraint: EF Core is pinned to
[9.0.12,10)— a .NET 11 upgrade will likely require bumping to EF Core 10.x simultaneously.
NuGet Packages
- No central package management (
Directory.Packages.props) — versions are declared per-project. This means bulk updates require editing multiple .csproj files. - Upstream had a GitHub Dependabot config (
.github/dependabot.yml) that is not active on Gitea. - Current approach: Manual periodic audits. Run
dotnet list package --outdatedto check for updates. - Future consideration: Add a Gitea Actions workflow for dependency scanning, or adopt
Directory.Packages.propsto centralize version management.
Docker Base Images
- .NET SDK/runtime images (
mcr.microsoft.com/dotnet/sdk:10.0-noble-amd64) — update when .NET patches ship. - FFmpeg image: forked separately at timothy/ersatztv-ffmpeg. Currently
192.168.1.95:3000/timothy/ersatztv-ffmpeg:7.1.1. The main Dockerfile still references the upstreamghcr.ioimage and needs updating.
CVE Response
- Check if the CVE affects a dependency we use (most NuGet advisories are noise)
- Update the package version in the relevant .csproj file(s)
- Build, run tests, deploy to test environment (port 8410)
- Promote to prod after verification
EF Core Migrations
- SQLite: 196 migrations (primary, Feb 2021 – Feb 2026)
- MySQL: 153 migrations (secondary, Aug 2023 – Feb 2026, parity maintained)
Adding New Migrations
# SQLite (primary)
dotnet ef migrations add MigrationName \
--project ErsatzTV.Infrastructure.Sqlite \
--startup-project ErsatzTV
# MySQL (if maintaining parity)
dotnet ef migrations add MigrationName \
--project ErsatzTV.Infrastructure.MySql \
--startup-project ErsatzTV
We only use SQLite in the homelab. MySQL migrations can be maintained for completeness but are not tested in deployment.
Feature Development
New features follow the existing CQRS/MediatR pattern. No compatibility constraints — we own the entire codebase now. Track work via Gitea Issues.
Key Risks
| Risk | Mitigation |
|---|---|
| EF Core major version gap | Pin to [9.x,10) range; bump when .NET upgrade forces it |
Lucene.Net stuck on beta (4.8.0-beta00017) |
Monitor for stable release; functional as-is |
| SkiaSharp native deps | Pinned with NativeAssets.Linux.NoDependencies; test on Linux after updates |
OpenAPI generator JAR (7.15.0) |
Hardcoded in Dockerfile; update manually when needed |