✨ New Features
- Chainable template filters —
|lower,|upper,|title,|pascal,|slug,|urlencodeon any variable, with a filter picker in the template builder and permanent aliases for the retired case-variant variables (#484) - Nations Championship rugby union league via ESPN (#493)
{broadcast_feed_team_short}and{broadcast_feed_team_abbrev}template variables (#496)- ESPN editorial-field drift canary — early warning when upstream payload shapes change (#506)
🐛 Bug Fixes
- Feed-team stream ordering: per-stream feed team is now persisted, so
team_feedordering rules match the resolved feed instead of falling back to regex (#489) - Combat template variables now populate for boxing events (#510)
- Timestamps carry UTC offsets and render in the configured display timezone (#511)
- Channel-source pool no longer self-poisons inside the attach window (#512)
- Pattern tester accepts JS-style named groups in custom regex and sends Python syntax to the backend (#494)
- Catchup
start:/stop:metadata is stripped before team extraction (#495) - Cleanup rotation map keyed by canonical segment field (#514)
🔧 Under the Hood
- Full documentation sweep — every guide and reference page audited against live code, 8 anonymized screenshots added, dead pages removed (#519)
- react-router 7 → 8 upgrade, Node 22 build baseline; clears Dependabot alert and
npm auditnow reports 0 vulnerabilities (#523) - Dependency bumps across Python, npm, and GitHub Actions