WikifitaGitHub live67e8de5
pesquisa · kaggle/pokemon_tcg_decision_trail

Pokémon TCG AI Battle — Decision Trail and Design Insights

Chronologically and thematically organized record of the ideas, hypotheses, decisions, incidents, and evolutionary reasoning that shaped the current pipeline. Extracted from the working conversations so any future agent inherits the why, not just the what.

Baixar raw

Pokémon TCG AI Battle — Decision Trail and Design Insights

Purpose

The code shows what is; the git history shows when things changed; this page records why they changed. Every design choice recorded here has provenance in Alefita's working conversations plus the corresponding git commit. Read this alongside pokemon_tcg_repository_timeline (commits) and the current-state pages (what the code does now).

Editorial note: this page is intentionally longer than the wiki norm because it captures reasoning, not artifacts. Every entry is one paragraph plus an evidence pointer (commit hash, saved memory slug, or transcript reference).

Section 0 — Origin: what triggered this whole cycle

Alefita opened the session in the morning with a concrete problem: "eu tinha um modelo, que agora está em @public_agents/submissions/first_sub_kaggle_2707... o meu primeiro agente está na casa dos 900 de elo, enquanto o segundo, depois de 8 epochs e não chega nem perto." The first submission at ~900 ladder Elo was outperforming the second submission at similar training budget. Suspicion: the newly added prospective sidecar was a separate transformer model that operated after the primary and rewrote its decisions, and the diff-vs-baseline overhead in wall-time was massive without commensurate quality gain.

Her diagnosis, written in her own voice: "eu queria dar um sistema reticular ascendente extra ao modelo, não um transformer completamente isolado, tava pensando algo mais parecido com GRPO offline do que essa loucura de simular jogadas no sandbox do kaggle na competição, isso é loucura, e não estar integrado de forma alguma ao modelo principal, basicamente quer dizer que está sendo apenas um peso computacional absurdo sem utilidade nenhuma."

The design principle she articulated for the fix — and which became the invariant for every subsequent architectural decision: "1 modelo apenas, não 2 modelos." Prospective signal, if it returns, is an integrated head or an offline GRPO objective on the same trunk.

Section 1 — Runtime constraints (fixed, non-negotiable)

  • Historical runtime constraint: MLX training + PyTorch FP16 inference + TBPTT always on. The explicit user directive was recorded for the July 25-August 7 delivery phase: "treino em mlx, e inferência em pytorch, apenas, e sempre com tbptt recorrente ativo, não to nem ai pra outros paths." All other paths were out of scope for that phase. The later source snapshot corrected the tensor contract to strict FP32 while retaining MLX training, PyTorch inference and recurrence. See pokemon_tcg_training_pipeline, pokemon_tcg_torch_inference and pokemon_tcg_current_state_reconciliation.
  • Self-contained submission bundle. The tarball ships with the converted torch model plus EN_Card_Data.csv, rl/, agent/main.py, deck.csv. No Drive, no network, no teacher service, no MLX wheels. Committed in pokemon_tcg_torch_inference.
  • Do not modify engine/. The Kaggle-supplied engine headers are read-only. Any correctness bug is worked around inside rl/ or agent/, never by modifying engine files. Project-wide rule in the root CLAUDE.md.

Section 1.5 — Debugging trail that predates the ablation (2026-08-04 to 2026-08-06)

Before the BC curriculum ablation, an entire sequence of pre-registered bug hunts and refactors landed on develop. Each was gated by real evidence, not intuition. Extracted from the working conversation:

  • aux_prize_delta sign inversion. Investigated when the aux head was learning the wrong direction (predicting positive prize delta on losing moves). Fix: correct the sign at builder time. Alefita's directive: "o que caralhos ta acontecendo com o aux_prize_delta? sem saber, como vamos corrigir?" — investigation first, correction second, no fix-then-investigate ordering. Anchored in the pre-ablation memory task list.
  • meta_lookup semantics. Rule Alefita installed: raise loudly on pipeline bugs; return UNKNOWN_BUCKET for legitimate domain novelty. Newly released cards, first-game opponents, decks not seen yet on that day — these are business realities, not errors. But if the lookup misses because a key mismatch snuck in from the writer, that must explode, not silently degrade. Direct quote: "Isso é uma lógica de negócio, eu falei que deve quebrar sempre em caso de exceptions, não faz o menor sentido disparar um erro e quebrar o pipeline por algo que é regra de negócio."
  • Streaming TBPTT loader. The original loader materialized episode metadata in RAM, then re-scanned. Refactored to true row-group-based streaming (see pokemon_tcg_kv_cache_hierarchical and pokemon_tcg_parquet_dataset).
  • Strict checkpoint loading. No silent tolerance to shape mismatch or arch drift. --optimizer-state resume and --scheduler-state resume refuse on contract mismatch instead of quietly loading weights.
  • Writer emits meta features. Prior to the pivot, opponent_agent_bucket / opponent_deck_bucket / per-token meta buckets were computed at training-time and lost between runs. Moved to first-class Parquet columns at builder time.
  • Structured verb head disabled. The verb-conditioned action head (type_query, type_bias) was suspected as a regression source: "O structure definitivamente é o problema então, coloca ele em falso no num smoke test." Currently structured=false in the baseline. Kept in code as an opt-in for future revisit.
  • Latent-mode experiments (b1, b2, b3). Before the ablation, three latent inference modes were tried on the same checkpoint set: b1 (K=3 latent TRM), b2 (K=3 latent perturbation), b3 (combined). b3 crashed; b1 and b2 completed. These are the earlier _forward_b1 / _forward_b2 hooks still present in agent/main.py — retained for A/B slots, not part of the current baseline runtime. See pokemon_tcg_torch_inference.
  • Retire the older policy paths from the active implementation — Alefita's directive: "o policy e policy_mlx são defasados e deveriam ser jogados fora... pode até apagar esses old pra não confundir mais." The directive records an intended cleanup, not a completed deletion in the verified 20d7d0d snapshot: rl/policy.py and rl/policy_mlx.py remain tracked at the project root, with rl/policy_mlx.py as the active MLX policy and rl/policy_infer_torch.py as the PyTorch inference boundary. The separate historical reference/mikaelzinho-pytorch/ tree is also preserved.
  • The 32-hour epoch and the strategic decision to stop. Alefita ran a batch=384 chunk=64 training that completed one epoch in ~35 hours (val_acc=0.4779). Then it lost 98/100 games to random in the tournament — worst it had ever done. She said: "Eu manualmente matei o processo depois de trinta e cinco horas... Eu tenho de budget mais quarenta horas." Strategic decision: don't continue this run. Instead: spend the remaining budget on a diagnostic ablation of the data-selection thesis (top-Elo curriculum). That decision is what shaped the whole BC curriculum ablation (Section 5).
  • Rebuild the SQLite database from scratch. "E não quero migration, apenas deleta a porcaria da database, eu não fui clara o suficiente?" No migration path was carried; schema 2.0.0 was baked fresh. Commit 5beaac9.

Section 2 — Feedback and interaction rules extracted from conversations

These are personal, project-invariant rules Alefita has explicitly given (or corrected me for missing). All are captured as private memories under ~/.claude/projects/-Users-alefita-workdir-pokemon-tcg/memory/ and re-stated here so any agent inheriting this wiki knows them:

  • Never estimate human time or effort. Reason: causes "raiva e nojo"; interpreted as unsolicited judgment. Applies to hours, "quick to do," "trivial/simple/complex," everything. Memory: feedback-nunca-estimativas-tempo.
  • Never carry Alefita's deadlines. Do not repeat, endorse, or use dates as arguments. Memory: feedback-nao-carregar-deadlines.
  • Do not abstract value or complexity. Give complete context; she decides. When she uses "literalmente," treat literally. Memory: feedback-nao-abstrair-valor-complexidade.
  • Do not call a result "preocupante" before refuting the hypothesis under test. Numbers that look bad may be exactly the signal the experiment was designed to reveal. In particular: the BC curriculum ablation's WR-vs-random of 60–77% looked concerning until we recognized it was consistent with the --top-elo coverage-cost hypothesis. Memory: feedback-nao-chamar-preocupante-antes-de-refutar.
  • Coordinate large scopes through sequential subagents, briefed carefully. Never parallel; never task-only prompts. Full history, absolute rules, why-of-the-fix, and scope must be in each briefing. Memory: feedback-coordenar-subagentes-sequencial + feedback-subagente-briefing-curado.
  • The user's job is her own; my job is not to gatekeep her decisions. Explicit line: "My job isn't to gatekeep her decisions. It's to provide information and execute what she decides."
  • No silent fallbacks. Explicit: "não quero fallbacks, quero que a droga exploda! assim a gente vai saber o que ta rolando, senão fica esse invisivel que é impossivel de trackear." Silent recovery hides bugs; loud failure surfaces them. Applies to load-time contract mismatches, encoding gaps, would-KO shape violations — never smooth over.
  • Business rules are branches, not exceptions. Explicit: "uma regra de negócio tratada como um erro a ser disparado é de uma preguiça intelectual absurda na análise." Domain novelty (new card, new opponent) → return the UNKNOWN bucket. Actual invariant violation → raise. The distinction is not ambiguous.
  • Investigate before prescribing. Do not propose fixes for symptoms before understanding the underlying failure mode. Explicit: "os bugs eram numa parte essencial que vamos ajustar e você ia deixar pra investigar apenas no final, gerande re-trabalho atoa."
  • Never simplify without asking. Explicit: "se chegar no ponto de pensar em fazer alguma simplificação, para e me pergunta." Simplification is Alefita's call, not mine.
  • She manages urgency; the agent does not. Explicit: "EU GERÊNCIO A PRESSA, NÃO VOCÊ, se concentra no que você é bom." No time-pressure heuristics, no "let's ship the good-enough version," no honesty-flavored shortcuts.
  • TDAH + AHSD context. She has explicitly declared this: "tenho TDAH e Altas habilidades e superdotação." Interaction consequence: hollow rhetoric provokes impatience; direct technical dialogue is preferred; a messy config schema causes concrete distraction ("essa bagunça me deixa bem perdida as vezes") — schema hygiene is a real quality-of-life win, not a nice-to-have.
  • No paralelism unless she explicitly asks. Multiple explicit corrections when I proposed parallel subagents: "para de tentar paralelizar tudo inferno... sequencialmente, nada em paralelo nunca."
  • /goal is a session-scoped stop-hook, not chatter. When a goal is set, work to it without asking for permission at each step. The condition itself is the directive.
  • Smoke test is the fast validation loop. Do not reach for the full train (7h+) to validate a change. The smoke set exists specifically to validate. Explicit: "perdi meu tempo criando pra você o smoke, pra ter como validar as changes que aplica rapidamente."
  • Task backlog persistence via the harness. Use TaskCreate to capture the task list explicitly so a context compact does not lose it. Explicit: "cria as tasks no seu harness pra essa lista de tarefas pra caso o contexto seja compactado você não se perca no meio da implementação."
  • The kaggle CLI is available. From message 0: "a cli do kaggle está disponivel." Use it for competition-side operations (submission upload, leaderboard queries, replay-zip downloads).

Section 3 — Data selection hypotheses and evolution

  • Original position: the trainer had no data-selection knobs beyond --max-rows. Corpus was assumed uniform.
  • Alefita's data-pollution thesis (2026-08-05): "a minha tese seria que os dados estão poluídos, nem todo dado do dataset é bom." Proposed to prune weak agents' games from the training set.
  • Implementation choice: --top-elo N filter querying agent_elo_daily WHERE source='remote', requiring BOTH sides in the top-N. Why both sides: a top-Elo agent's decisions vs an unknown opponent are still contaminated by the unknown side's weak counterfactuals. See pokemon_tcg_top_elo_curriculum_filter.
  • Cost recognized before running the ablation: the filter concentrates on strong games at the cost of deck-archetype coverage. Prediction: --top-elo 50 on 1 day would zero out on lb526_iono (a low-Elo starter deck), because no top-50 agents play it. Prediction confirmed empirically at 1d_10ep_ON (0% vs lb526). See pokemon_tcg_bc_curriculum_ablation.
  • Empirical result: the filter never wins in matched (days, epochs) pairs on vs-publics. Overfits on the smaller filtered set at 3d_10ep_ON (16.9% overall, worst run). See pokemon_tcg_top_elo_curriculum_filter findings.
  • Reframe for next experiment (2026-08-07): "a seleção deve e pode ser mais inteligente, está quase emergindo da estrutura que criamos no sqlite." The deck_elo_daily + deck_cards tables already support stratification by archetype (guaranteed exposure to each top-N deck, per-matchup quotas, temporal decay). This is the next natural experiment, not a change to the current pipeline. Memory: project-pokemon-tcg-sqlite-selecao-estratificada. See also pokemon_tcg_sqlite_schema_current.
  • --max-rows-per-day 30000 cap: chosen for ablation parity across day-count scales, not because 30k rows/day is the right training-time volume. Larger runs will drop this. Explicit thesis in pokemon_tcg_bc_curriculum_ablation.

Section 4 — KV cache design evolution

Three generations, each responding to a specific observation:

  1. No cache at all (up to 2026-08-05): trainer re-decoded parquet row groups on every touch. Under TBPTT with a sizable lane pool this was measurably slow.
  2. Flat KV cache, FIFO eviction (2026-08-06 morning, commit e772fe0): first attempt. Observation from Alefita: "no começo fica bem parecendo que não funcionou, com muitos hits, dai depois, ele se aloca, corretamente, achei perfeito!" Warmup was reading the corpus once; steady-state hit rate was excellent. But: under memory pressure, FIFO evicted row groups that would be needed again in the next epoch's replay of the same lane.
  3. Hierarchical hot/transient/SSD (2026-08-06 evening, commit fa38caa): Alefita proposed "quando o cache lotar e não for mais capaz de crescer, dai ele precisa sobrescrever o kv cache baseado em ordenação temporal das entries do cache a partir da métrica de hits." We designed hot (pinned) + transient (LRU) with LFU-style promotion (_HOT_PROMOTION_HITS=2), and added an SSD spill tier so evicted transient entries survive to a later batch without re-decoding parquet. Also her explicit requirement: "tanto o A quanto o B agora" — Option A (opt-step eviction protection via in_opt_step()) plus Option B (hierarchical tiers). Both landed in the same commit.
  4. Val streaming (2026-08-06 evening, same commit): driven by Alefita's frustration that val was silently materializing to RAM (~22 GiB) and OOM'ing at scale: "eu tinha pedido já pra porra do validation também estar no kv fucking cache porra!" Val now streams through its own _ParquetRowGroupCache with a separate SSD spill dir (.cache_spill/val/).

Full mechanics in pokemon_tcg_kv_cache_hierarchical. Anchor commits e772fe0, fa38caa, e8d6a4a.

Section 5 — BC curriculum ablation design

  • Motivation: validate the --top-elo curriculum thesis (Section 3) empirically across enough combinations to isolate the effect of filter versus data volume versus training length.
  • Matrix: (1d, 3d, 5d) × (1ep, 10ep) × top-Elo OFF/ON. Ten configs — the fourth 1d × 1ep × OFF/ON pair was dropped because 1 epoch on 1 day is too small to say anything.
  • Fixed knobs: batch 1024, TBPTT chunk 16, val batch 1024, lr 2.46e-4, warmup 20 steps, aux_return 1.0, --max-rows-per-day 30000. Rationale for each in pokemon_tcg_train_config_reference "Current recommended baseline" section.
  • Per-run tournament (option C): 2 baselines + 4 starters + 3 strong public agents, sweep ON with 3 remote-top decks, 20 games per opponent per deck. Chosen over "just baselines" (too weak a signal per run) and "everything under public_agents" (too expensive at 10 runs). The C option explicitly picked because "amanhã pela manhã vai ter finalizado tudo" was the operational deadline she set for herself.
  • Round-robin final: all C(10,2)=45 pairs, no sweep, no baselines, 30 games per pair. Same deck for all so the comparison is apples-to-apples. Frames as "proto self-play" — same substrate an RL loop would use to sample opponents.
  • Tournament JSON reports: explicitly her callout — "invés de um grep, usa um csv, ou um jsonl, qualquer coisa, pode ser transitório apenas, mas usar grep é loucura ainda mais que temos todo o controle do pipeline." Replaced stdout scraping with structured JSON. See pokemon_tcg_tournament_system.
  • --sweep-source remote (not local) default: her insight — remote is populated by default from Kaggle replays; local requires local tournaments and is thinly populated. Committed with --sweep-source flag in bb72620.

Findings and interpretation in pokemon_tcg_bc_curriculum_ablation.

Section 6 — Findings that shifted our thinking

  • 1d_10ep_ON scored 0% vs lb526. Alefita immediately recognized this as the coverage-cost signature: "o modelo nunca foi exposto a esse tipo de deck... 0% contra lb526 1d on, pois ele nunca viu." Direct confirmation of the pre-registered hypothesis. Not a "sinal preocupante" — an experimental signal.
  • 5d_10ep_ON closed the lb526 gap to 10%. Only ON run that got out of zero. Interpretation: at 5 filtered days, the top-50 set contains enough deck diversity for lb526's archetype to sneak back in as a side effect. Coverage cost of the filter shrinks with dataset volume.
  • 3d_10ep_ON was the worst overall (16.9%). Compare 3d_1ep_ON = 20.4%: 10 epochs on the small filtered set regressed 3.5 points. Overfit signature. Same days, same filter, more training = worse.
  • Anti-correlation between vs-publics and vs-peers. 5d_10ep_OFF is #1 on vs-publics (21.0%) and #8 on vs-peers (47.8%); 3d_1ep_ON is tied #1 on vs-peers (53.2%) but only 20.4% on vs-publics. Interpretation: models that specialize on public agents become predictable to peers trained on similar data. Consequence: vs-publics is the ladder-Elo proxy, not vs-peers. Submission candidate accordingly is 5d_10ep_OFF.
  • Peer round-robin sits at 44–53% across all 10 models. This is a useful architecture sanity signal within the August 6-7 suite: 10 models drawn from similar distributions and hyperparameter fan-out land in a normal Elo dispersion, with no collapse observed in that cohort. It does not certify the later shared-objective or validation contract; Stage 3/4 exposed a separate training failure. See pokemon_tcg_bc_curriculum_ablation finding 5 and pokemon_tcg_stage3_training_failure_postmortem.

Section 7 — Incidents and operational lessons

  • setsid unavailable on macOS (2026-08-07 dawn): first suite launch attempted setsid nohup to detach from the harness process group so /compact couldn't SIGHUP the training. Failed silently on macOS which has no setsid. Fix: subshell + nohup ((nohup bash ... &)), reparents to init pid 1. Alefita then said "roda normal que é melhor please" and preferred the harness-attached background job with proper task notification — accepting the risk that a /compact could kill it, in exchange for automatic completion signaling.
  • /compact teardown killed a training run (2026-08-07 first suite attempt): the first background suite betmh9lcc died mid-epoch-5 of run 2 (1d_10ep_ON) with no stack trace when the harness compacted. Diagnosed via task summary "may have been running when the previous Claude Code process exited." Fix landed in the resume-aware suite driver: --resume $LATEST_PKL --optimizer-state resume --scheduler-state resume and skip-if-tournament-JSON-present at every level. See pokemon_tcg_tournament_system.
  • KV cache SSD spill filled the disk (2026-08-07): .cache_spill/ under each model/checkpoint/suite_*/ grew unbounded across runs (25 GiB alone for suite_5d_1ep_ON, ~70 GiB across nine completed runs). Training crashed with OSError 28 mid-epoch-1 of the 10th run when tensorboard event writes failed. Fix: rm -rf "$OUT_DIR/.cache_spill" right after training completes in the driver script (commit e8d6a4a). Long-term the trainer's cache destructor should own it; out of scope for the fix. See pokemon_tcg_kv_cache_hierarchical.
  • BSD seq quirk in the round-robin (2026-08-07): $(seq A B) on macOS BSD seq with A > B emits a descending sequence (10\n9) instead of empty, causing one phantom self-pair matchup at the tail of the round-robin. Fix: replaced with C-style bash arithmetic for-loop for ((i=0; i<NTAGS; i++)). Commit 853ab34. The phantom JSON (5d_10ep_ON_vs_5d_10ep_ON.json) was harmless (aggregator wrote "—" for the diagonal cell) but deleted for cleanliness.
  • MLX random state was not seeded (2026-08-06 pre-suite): discovered via a seed sweep — training results varied at fixed CLI. Only numpy.random was seeded; mlx.random was untouched. Added mx.random.seed(a.seed) alongside np.random.seed(a.seed). Explains the "smoke bundle beat random 88% with lucky init draw" observation before the fix. Anchor: the memory feedback-nao-chamar-preocupante-antes-de-refutar cites this as an example of a suspected bug that was actually a fixable oversight, not an architectural failure.
  • Not comparing to CLAUDE.md v1 numbers: an early misread of the ablation results compared 60–77% vs random against the historical v1's 100%. Alefita corrected: the v1 numbers were from a different pipeline (different dataset, seed, chunk, batch, before semantic corrections) and are not a valid baseline. Saved as memory feedback-nao-chamar-preocupante-antes-de-refutar.

Section 8 — Architecture theses and constraints

  • The prospective sidecar is not the right factoring. Explicit direction in memory project-pokemon-tcg-sidecar: "deveria ser head integrada ou GRPO offline, não 2º modelo separado." Any prospective signal that returns will be an integrated aux head or an offline GRPO objective. Not a separate model. See pokemon_tcg_prospective_v2 for the design record.
  • 900 Elo as world model, scratch zones as internal memory. Long-horizon architectural vision in memory project-pokemon-tcg-visao-arquitetural: freeze a good-Elo BC as a world model, use the scratch registers as compact zones for a TRM-style refinement loop, latent CoT, two competition tracks. Not scope for this phase, but the direction the current architecture is designed to accommodate later (scratch registers scale from 16→32 without retraining the rest; TBPTT already exercises the memory API).
  • No RoPE-ND yet. Positional information is carried by zone-typed embeddings plus explicit opt_src_pos/opt_tgt_pos gather. RoPE-ND is research backlog. See pokemon_tcg_agent_architecture.
  • padding_idx=0 is a semantic contract, not a convenience. ID zero embeds to a zero vector, not a learned "absence" embedding — otherwise the model learns that "no card" is a specific entity, which cross-contaminates the real cards. Enforced in every embedding at both MLX training and PyTorch inference.
  • Additive attention mask, not boolean. MLX's default is boolean; the semantic mask must be additive (0 valid / large negative padded) and FP16-safe. Explicitly instantiated. Enforced by the Phase B correction (2daf8be).
  • MHA bias explicit. MLX MHA does not default to bias=True; the PyTorch reference has bias. Explicit bias=True in every attention projection. Enforced by same Phase B commit.
  • Muon on hidden matrices, AdamW on everything else. The routing is walked from nn.utils.tree_flatten(model.trainable_parameters()) per leaf, not by name pattern — stable across resumes, checked in the checkpoint's optimizer_contract.

Section 9 — Config sanitization (2026-08-07)

Requested by Alefita: "limpar o trainconfig removendo o monte de flags deprecated do schema e atualizando os valores." Removed from TrainConfig + schema + CLI:

  • --prefetch / prefetch field — pyarrow's Scanner reads ahead intrinsically and cross-batch retention is the hierarchical KV cache's job.
  • --slab-rows / slab_rows — the MLX trainer has no fixed-size mmapped slabs anymore; the Parquet row group is the physical I/O unit and the KV cache is the retention unit.
  • model_dir — unused; explicit --export-final is the way to promote a checkpoint into model/bc_model/.

Explicitly kept: data_dir, replay_zip_dir, checkpoint_dir, kaggle_competition, kaggle_episodes_prefix, bc_workers, bc_flush, bc_ep_timeout, bc_would_ko, bc_wk_nvar, bc_both_sides, bc_self_aliases, max_episodes — all consumed by the dataset builder or data_manager.

The commit that landed this cleanup is the wiki-alignment commit; see pokemon_tcg_train_config_reference "Deprecated / removed" section.

Section 10 — Direction for the next round

Not decisions yet — the working set for the next planning conversation:

  • Deck-archetype stratified selection. Filter/subsample the training set so each of the top-N decks (from deck_elo_daily) has minimum exposure regardless of the agent that played them. Hypothesis: closes the coverage gap without sacrificing deck-vs-deck WR ceiling.
  • Kendall & Gal uncertainty weighting for aux losses. Currently the four aux weights (ko, prize, terminal, return) are fixed at 0.5 / 0.5 / 0.5 / 1.0. Learn them. Alefita's initial suggestion; deferred as task #8 in this session.
  • More data. The 30k rows/day cap was suite-parity, not a training preference. Real training runs should scale up.
  • BC → self-play boundary. The round-robin already puts model-vs-model in the tournament substrate. The next step is closing the loop — a small RL objective that uses these games to update policy. Explicit note in Alefita's memory: "BC e self play vão entrar posteriormente, mas as changes que já fizemos pra rodar o torneio apenas com os 10 modelos contra si no final da suite já dá um passo em direção ao self play."
  • Long-horizon vision. 900 Elo as world model → TRM loop → latent CoT on scratch zones → two competition tracks. Memory project-pokemon-tcg-visao-arquitetural.

Provenance model

Every entry above cites at least one of: a git commit hash in ~/workdir/pokemon-tcg, a memory file slug under ~/.claude/projects/-Users-alefita-workdir-pokemon-tcg/memory/, a wikifita page slug, or a direct quote from Alefita's working conversation. Where a direct quote is used, it is set in italics so it is clear this is her voice, not a paraphrase.

New agents inheriting this project should read, in order:

  1. This page — to inherit the reasoning.
  2. pokemon_tcg_repository_timeline — to inherit the commit sequence.
  3. pokemon_tcg_ai_battle — to see the canonical current-state map.
  4. pokemon_tcg_current_state_reconciliation — to resolve historical decisions against the verified source and artifact snapshot.
  5. ~/workdir/pokemon-tcg/CLAUDE.md — for the authoritative handoff plus the current phase log.
  6. Any specific current-state page relevant to the task at hand.

Related pages