Auto-populate & auto-score tennis Grand Slam brackets from Wikipedia #112
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tennis-draw-sync"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Adds a per-event Sync Draw for tennis majors: pulls the full 128-player draw from its Wikipedia article, auto-creates/links participants (and propagates them to every linked sibling season), builds the bracket, and runs the qualifying-points scorer. Re-running advances the bracket and scoring as matches complete.
Highlights
Core sync
WikipediaTennisAdapter+ wikitext bracket parser,syncTennisDraworchestrator, idempotentpopulateBracketFromDraw(keyed onexternalMatchId)scoring_events.externalSourceKeycolumn for the article (migration0123)Scoring fix
deriveBracketQualifyingStatesnow only floors players who've reached the scoring stage. For deep brackets (tennis_128) early-round losers earn 0 QP instead of a phantom 9th-place floor. CS2/simple_8behavior preserved (gated onrounds[0].isScoring). Re-sync reconciles stale QP rows inside a transaction.Matching & parsing
normalizeTeamName; strips Wikipedia(tennis)disambiguators; treats Bye/TBD/Qualifier as TBD; extracts the wikilink before template-stripping so{{nowrap}}-wrapped players parse correctlyAdmin UX
Testing
tennis_128scoring, accent/disambiguator/nowrapparsing, URL parsingNotes
npm run db:migrateto apply theexternalSourceKeymigration.🤖 Generated with Claude Code
Add a per-event "Sync Draw" that pulls a tennis major's full 128-player draw from its Wikipedia article, auto-creates/links participants (and propagates them to every linked sibling season), builds the bracket, and runs the qualifying-points scorer. Re-running advances the bracket and scoring as matches complete. Core - match-sync: WikipediaTennisAdapter + wikitext bracket parser, DrawSync DTOs, syncTennisDraw orchestrator, pure draw->rows mapping - playoff-match: populateBracketFromDraw (idempotent upsert on externalMatchId) - scoring_events.externalSourceKey column (Wikipedia article; migration 0123) - admin bracket "Sync Draw" card (accepts URL or title) + cron pass Scoring fix - deriveBracketQualifyingStates only floors players who have reached the scoring stage; for deep brackets (tennis_128) early-round losers earn 0 QP instead of a phantom 9th-place floor. CS2/simple_8 behavior preserved (gated on rounds[0].isScoring). Re-sync reconciles stale QP rows in a transaction. Matching & parsing - accent-folding in normalizeTeamName; strip Wikipedia "(tennis)" disambiguators; treat Bye/TBD/Qualifier as TBD; extract wikilink before template-stripping so {{nowrap}}-wrapped players parse Admin UX - dry-run preview (matched / will-create / possible duplicates / unfilled slots) with inline "rename existing" / "create as new" resolution via fetcher (no full reload) Tests: parser vs real 2025 Wimbledon fixture, draw mapping, tennis_128 scoring, accent/disambiguator/nowrap parsing, URL parsing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>