Fix FS All + other signal coverage holes
Two gaps surfaced on /track: FS All showed "—" for 17 of 181 settled bets (164/181 coverage). Root causes were both naming-related.
Two gaps surfaced on /track: FS All showed "—" for 17 of 181 settled bets (164/181 coverage). Root causes were both naming-related.
- arg-b-nacional (0/7): getSeasonForDate constructed "2025-26" but the
football-data-cache files are calendar-year ("arg-b-nacional-2026.json"). Added arg-b-nacional to the calendar-year league set.
- championship (33/42): ledger bets carry FotMob canonical names
("Coventry City", "Preston North End", "Queens Park Rangers") while football-data-cache uses MI short names ("Coventry", "Preston", "QPR"). A plain .toLowerCase() Map lookup missed every Championship team whose ledger name differs from the cache name.
Introduced findTeamInMap() which tries the exact name, then canonicalToMI, then a stripped suffix form (" City" / " United" / " North End" / etc.). Wired all xG map lookups in the script through this helper — FS All, FF, dynamic xG, aggregate v2, and shot xG all benefit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>