🐛 Bug Fixes
- HockeyTech no longer drops a whole game when its broadcasters list is empty (#752) — thanks @lpukatch (#753)
- Deleted consolidation exception keywords stay deleted across restarts; defaults are seeded once per install (#726) — thanks @lpukatch (#762)
- EPG matching no longer binds highlights or replay programmes to the live game: the broadcast-time gate now survives the reverse-alias retry, and replay/highlights words in a programme title skip it outright (#716)
- Sources list keeps its filters and sort when you edit a source and come back (#552)
- Name matching and EPG programme matching share one 30-day lookback; the retired
event_match_days_backcolumn is no longer read (#744) - A config fix (alias, team cache, league) takes effect immediately even with negative match caching on (#757) — thanks @lpukatch (#758)
✨ New Features
- Scoped stream-priority rulesets — per-league or per-sport tabs on Stream Priority that inherit or override Global scoring and priority, most-specific wins — thanks @sethwv (#763)
- Generated pregame descriptions — opt-in
{generated_preview}variable andhas_generated_previewcondition, composed from raw ESPN facts (records, form, series, starters, leaders, team stats); never on by default — thanks @ncsufan8628 (#613) - Bulk edit covers almost everything — subscription (league) override, built-in filter skip, stream include/exclude regex and every custom regex; setting a pattern in bulk switches it on, clearing switches it off (#551)
- Order streams now — a button on Stream Priority that re-sorts every channel from fresh Stream Stats without a generation run (#576)
- PFL and LFA added; every ESPN MMA promotion is now a single league row, with the main event read from the card name rather than assumed last (#756) — thanks @lpukatch (#759)
⚡ Enhancements
- Startup cache refresh and media-server refresh run in the background with a progress toast; generation no longer waits on Jellyfin — thanks @sethwv (#765, #767)
- Negative match caching, flag-gated (
TEAMARR_NEGATIVE_CACHE=1): streams that never match stop being re-scored every run — thanks @lpukatch (#754)