Unblock signal data so 5 dead signals can compute on /gauntlet
The coverage audit on the first fresh 181-bet shadow-backfill found five signals at 0% coverage — Squad, GK change, AggV2, SP-xGA regression, and SP-mismatch — plus ShotXG at 34% and HFA at 78%. Root cause was not the
The coverage audit on the first fresh 181-bet shadow-backfill found five signals at 0% coverage — Squad, GK change, AggV2, SP-xGA regression, and SP-mismatch — plus ShotXG at 34% and HFA at 78%. Root cause was not the backfill script; it was that the data these signals need never made it into the deployed Docker image.
Three distinct problems, three fixes:
- data/reep/team-bridge.json was excluded by
data/reep/in .dockerignore,
but squad-strength + gk-change both load it via loadTeamBridge() — so any bet in Championship/EPL/Serie-A/Bundesliga silently got noData. Narrowed the ignore to data/reep/* with an explicit !team-bridge.json override.
- understat-shots/ was fully excluded in BOTH .dockerignore and
.gitignore. Set-piece signals read this at runtime. Narrowed both to only exclude 2020-2023 season files; 2024+ season files pass through.
- match-xg-v2-shadow/ and match-xg-aggregate-shadow/ were gitignored at
the repo root, so the files weren't in git at all, so they couldn't be in the build context regardless of .dockerignore. Narrowed the ignore to allow *2025-26.json files and force-added the current-season files.
- fotmob-shots/ was never tracked. Force-added the 2025-2026 season files
(~30MB) so shotXG can compute for non-Big5 leagues.
This restores Squad + GK (Big-5 + Championship where availability data has rounds), AggV2/Aggregate v2 (26 leagues with 2025-26 shadow xG), SP-xGA / SP-mismatch (where understat has 2024-25 data to regress off), and pushes ShotXG from 34% toward near-complete coverage. Set-piece signals will remain below 100% until we land a 2025-26 shot feed (Sofascore TODO).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>