🐛 Bug Fixes
- Managed Channels now shows each stream's own M3U account for multi-login setups — identically named streams from different logins were all labeled with the group's account; existing rows self-correct on the next EPG generation run — thanks @FractalBoy for the report (#264, #297)
- Tennis: guard against dead ESPN summary/teams endpoints returning 400s (#282)
🔧 Under the Hood
- Pyright type checking now fully green: 532 errors → 0 across ~65 files (#292)
- ESLint (React Compiler lints) now fully green: 67 errors → 0, including per-component fixes for render-purity, effect, and memoization rules (#292)
- CI hardening: Dependabot, CodeQL, dependency review, job timeouts, digest pinning (#280)
- New push-button "Cut Release" workflow for one-click releases from Actions (#281)
- Issue-first development workflow and label-driven status tracking codified (#277, #278)
- Test hardening: pinned per-run provider fetch counts around the refresh paths (#285)