Highlights
The headline is a ground-up starter template overhaul modeled on Gracenote conventions — curated per-sport starter sets, ESPN-editorial-first description chains, neutral-site awareness, and a server-side preview that shows exactly which condition fired. Alongside it: the complete stream-priority/feed-detection fix series, date-aware UFC fetching, and tennis production fixes.
✨ New Features
- Gracenote-modeled starter templates — curated per-sport starter set (incl. a new Racing starter), article-aware naming, year-composed titles, ESPN-copy-first description chains (#329, #361)
- Server-side template preview with condition-fired trace — see the real resolver output, not a client approximation (#357)
league_is/sport_istemplate conditions — one template can branch by league or sport (#370 part 1)- Neutral-site awareness — ESPN
neutralSiteingestion, automatic 'vs' flip,is_neutral_sitecondition (#365) - Marquee/stage notes —
has_event_note/has_match_noteconditions seeded ('NBA Finals - Game 5', 'FIFA World Cup, Group C') (#363) - Composed rank variables —
{home_team_ranked_the}family (#359) - Customizable Gracenote categories — override table + Settings UI (#371)
- Soccer idle/offseason filler for the Soccer Team starter (#368)
- Boolean logic & additive scoring for stream priority rules — thanks @smevawala (#262)
- New leagues: Major League Cricket (#334), Swedish Hockey League (#276)
- Tennis majors-only subscription toggle (#283)
🐛 Bug Fixes
- Home/away feed detection — ESPN
broadcasts[].marketmapping, team-branded channel tokens beyond.tv, fuzzy broadcast names ('Brewers.TV' now reads as the away feed) (#343) - EPG-matched stream ordering —
epg_matchrules now apply at attach time, survive UFC segment expansion and keyword moves (#344);dispatcharr_grouprules match at all (#379) - UFC event fetch is date-aware — future and non-featured cards are now visible; midnight-spanning PPVs kept on both days (#345)
- Event cache round-trip — odds, MMA fight-result fields, bouts, editorial copy, and neutral-site all survive cache hits (#366)
- Tennis: court/round feed fan-out guards, deterministic event ids, duplicate-channel fix (#316) and timing alignment (#317)
- Racing streams with single-word series names no longer misclassify as team-vs-team — thanks @tomwinterrose (#349)
- Starter-seed scope violations and graceful rank rendering (#354) · Dashboard all-time cache hits (#312) · arm64 Docker builds (#309)
⚡ Enhancements
- Single-flight cache dedup and shared scoreboard fetches across team-schedule scans
- Seed-heal deep content fingerprint — user description edits survive title heals (#373)
- Durable research promoted into tracked docs (#290)
🎨 UI/UX
- Electric-blue Teamarr logo in the README and docs site, plus a docs favicon
- Stream-ordering scoring UI with Priority + Scoring sections and explainer
- Conditions tab now available for event templates; template Usage chips refresh in real time