Pokémon TCG — Submissions and Elo Lineages
Model/deck identity, local and remote submissions, and independent rating layers.
Pokémon TCG — Submissions and Elo Lineages
August 14 evidence boundary
The live database now contains 128 tournament summaries, 1,621 matchup summaries, 8,055 submission observations and source-separated remote/local tables. These counts describe the current local catalog, not a single submission's competitive rating. The cross-cohort tournament results and the uncertainty about replay-row retention are recorded in pokemon_tcg_aug14_ablations_tournaments and pokemon_tcg_aug14_data_etl_database_audit.
The next read-only revalidation of the same source snapshot reports 139,783 matches, 3,065,706 match steps, 1,117 agents, 948 decks, 28,745 daily agent Elo rows, 10,742 daily deck-Elo rows, 9,350 daily card-Elo rows, 128 tournament summaries and 1,621 matchup summaries. The match split is 138,023 remote and 1,760 local. These are database observations at the inspected endpoint, not proof that all archived JSON members were ingested or that all tournament cohorts share one reset boundary. The unresolved archive/database count delta remains recorded in pokemon_tcg_aug14_data_etl_database_audit.
Identity
A model is a stable identity with immutable artifact revisions. A deck family is renameable with immutable composition revisions. A submission points to one concrete model revision and one concrete deck revision. The same model with several decks therefore produces several submissions without pretending the model changed.
The current implementation has partial submission identity: teams,
submissions, and submission_decks exist, and a submission can reference
multiple observed decks. Exact model/model-revision identity and submission
lifecycle events are still planned.
Local policy
The same model/deck pair is one persistent local submission lineage across synchronous arena runs. A new pair starts at Elo 600. Local card ratings accumulate evidence across submissions.
Remote policy
Each new Kaggle submission starts its own remote rating lineage at 600, even if the model is unchanged or only the deck changed. Local and remote evidence remain separate.
Rating layers
Submission, model, deck and card ratings are separate. Submission ratings represent a concrete competitive pairing. Model and deck ratings aggregate their relevant populations. Card ratings aggregate card-level match evidence. A deck rating is an outcome-based composition rating, not a simple average of its cards.
The current code computes deck Elo and card Elo per source. Submission Elo, model Elo, rating policies, epochs, and append-only rating events remain target scope rather than implemented behavior.
Current invariant-deck calculation
The live ResultsDB.get_invariant_deck_elo path is a deck-level calibration
surface, not a universal submission or model rating. For a deck with N games
and W wins, the current implementation clips W/N to [0.02, 0.98], applies
the Bradley-Terry-style inversion around R0 = 600, shrinks it toward 600 with
N0 = 10, and adds a weighted local-to-remote translation estimated over
overlapping decks. The translation weights are exponential in local game
volume with tau = 20, capped for numerical stability.
The code currently uses wins / games_played for this invariant calculation.
Stored draws are not converted to half-wins in that path, even though the
ordinary online Elo update uses a 0.5 draw score. That difference is an
implementation detail and an open interpretation point, not a reason to call
the two ratings equivalent. The formula, assumptions and research boundary
are expanded in pokemon_tcg_elo_pagerank_invariance.
The current local probe gives deck 633 an invariant Elo of approximately
412.21 over 420 games and deck 251 approximately 577.39 over 420 games;
both satisfy the MD10 completeness flag. These values are source/database
observations from the inspected snapshot. They do not replace the
deck-conditioned win rates in pokemon_tcg_aug14_ablations_tournaments, and
they should not be compared across reset or source boundaries without a
cohort label.
Provenance of the rating lineage
The rating surface evolved in layers rather than arriving as one atomic feature:
| Project history | Documentation meaning |
|---|---|
876ce34 and 8cfe68d (2026-07-26) | Enforced source-separated card/deck Elo and changed the bootstrap from 1000 to 600 |
5beaac9 (2026-07-29) | Rebuilt the normalized SQLite database shape that carries day/source-partitioned ratings |
f90ac1e (2026-08-11) | Added curriculum sweep orchestration and atomic Elo updates |
86aa528 and 89deb7d (2026-08-12) | Added the Stage 3 tournament/rating changes and later local-Elo direction |
dbf298a (2026-08-13) | Separated bulk Elo recomputation from ETL synchronization and recorded the idempotency boundary |
936d301 (2026-08-14) | Added the PageRank/Abelian graph-invariance monograph and updated the master RFC |
This sequence is why the project has several legitimate rating vocabularies: ordinary daily Elo, source-separated deck/card Elo, invariant deck calibration, and the proposed graph-theoretic bridge. They share lineage but are not one metric.
Related
pokemon_tcg_ladder_and_research · pokemon_tcg_deck_strategy · pokemon_tcg_physical_schema · pokemon_tcg_dashboard_and_tournament · pokemon_tcg_local_platform_status
pokemon_tcg_elo_pagerank_invariance · pokemon_tcg_sqlite_schema_current · pokemon_tcg_current_state_reconciliation · pokemon_tcg_empirical_ablation_monograph