Milestones
List view
Typer commands, structured logging, healthz, dry_run mode, POST /api/pause.
No due date•4/4 issues closedtbl_player_outfield_stats, tbl_player_gk_stats, tbl_player_advanced_stats. Hard gate: DBA schema review required.
No due date•6/6 issues closedALTER tbl_players to add biographical columns. PlayerInfoScraper with upsert on source_id. Runs in parallel with Phases 11–13. Critical: batch strategy + monitoring requires explicit approval.
No due date•5/5 issues closedtbl_squads, tbl_squad_players, tbl_clubs. Scrapers seed scrape_queue for Bloque 6.
No due date•3/3 issues closedtbl_editions (master edition registry). Scrapers seed scrape_queue for Bloque 5.
No due date•2/2 issues closedtbl_domestic_leagues, tbl_domestic_cups, tbl_club_intl_competitions, tbl_nat_team_competitions. BaseCompetitionScraper + 4 concrete scrapers. Runs in parallel with Phase 10.
No due date•6/6 issues closedCountriesPageScraper (https://fbref.com/en/countries/), PlayerDiscoveryScraper (seeds scrape_queue with player URLs). Populates sch_shared tables + tbl_players discovery stub. First real scraper — requires scraping engine approval.
No due date•6/6 issues closedGET /api/tasks/next, POST /api/clearance, POST /api/tasks/{id}/result, GET /healthz. Bearer token middleware, WorkServerPort ABC, CORS locked to extension origin, cf_clearance TTL field never logged.
No due date•9/9 issues closedComplete DB design review (all 16 tables approved by user), PostgreSQL schema lockdown (public REVOKE), create sch_shared + sch_football, FootballBase DeclarativeBase, Alembic env.py whitelist [sch_infra, sch_shared, sch_football]. GATE: all tables must be approved before any migration.
No due date•15/15 issues closedalembic.ini DSN sentinel, env.py ValidationError capture, CI password → GitHub Secret, settings.py rejects empty token, .env.example additions, docker-compose remove :-changeme, structlog redaction processor, pip-audit + gitleaks in CI.
No due date•8/8 issues closedFix conftest.py (create_all → alembic upgrade head), fix BaseRepository.list() (add limit/offset), fix scrape_queue.updated_at comment (trigger is source of truth, NOT ORM onupdate), fix scrape_queue.error_message (Text nullable).
No due date•4/4 issues closed