Spaces:
Paused
Paused
Commit History
-
Phase 6: play against yourself -- fingerprint a human into a genome
Claude +1: Claude Opus 5Unverified signatureThe search was never the point of the genome. The point was that a genome is a thing a PLAYER can own: edit one into existence, or have their own play captured into an AI and then face it. playerFingerprint.js is that second half. It measures a finished match from GROUND TRUTH, deliberately not fog-limited. engine/aiIntel.js reads an opponent through fog because an AI acting on what it has not scouted is cheating; this is analysis of a game that already happened, the same way a replay is. Confusing the two would either cripple the fit or smuggle omniscience into the opponent. Every dial is fitted as a RATIO against the archetype's own baseline, never an absolute, because that is how the engine composes its layers: a player who ran 18 workers is not workerTargetMult 18, they are "1.5x what this temperament would have run", and only the ratio transfers to another world. Every value clamps to its own gene's schema bounds, so an extreme game yields a legal, runnable AI rather than a brok…21a54e4 -
Record what the first evolutionary run measured -- including that it fails
Claude +1: Claude Opus 5Unverified signatureSearch-ledger rows and the design doc's results section. Three findings, and the second one is why the champion is not being promoted. IT GENERALISES. Five-way round-robin on four HELD-OUT worlds at the full 40-minute clock, 320 matches: evolved 50W-14L (78%) at Medium against Economic's 36-28, and 40W-24L (63%) at Hard against Aggressive's 38-26. Medium is ~4.5 sigma over even and unambiguous; Hard is a statistical tie for first. So the loop is not producing noise and it is not overfitting the three worlds it trained on. IT IS ALSO GOODHART'S LAW IN A CAN. Split those same matches by winReason and at Hard every one of its 40 wins is timeout-score and none is an elimination, while 16 of its 24 losses ARE eliminations. It does not play better -- victory.js pays 1.35x for combat units and 0.25x for banked ore, so an army that never fights and so never takes attrition is the most valuable thing you can own when the clock runs out. Duel Elo was chosen over score() because "a win cannot b…6f03f6f
-
Evolve the AI: a genome, mutation, crossover, and a selection loop
Claude +1: Claude Opus 5Unverified signaturePhase 1 of docs/ai-evolution-design.md. Nothing under engine/ changes -- the whole point is that a candidate AI was already JSON, so the genotype lives in tools/ and the shipped simulation never learns any of this exists. tools/genome.js is the schema and the operators. GENOME_SCHEMA is one source of truth for what a legal gene is -- 28 genes over two chromosomes and six linkage groups -- and the operators are per gene KIND rather than one operator for everything, which is the decision that matters most here: ratios mutate multiplicatively (an additive step means something different at 0.2 than at 1.5, and 0 would be absorbing), headcounts additively so 0 stays reachable because 0 is a real allele, flags rarely because they are epistatic switches that decide whether other genes mean anything at all, and unitMix through sequence operators because it is a cyclic production cycle where order and multiplicity both carry meaning. Crossover cuts at MODULE boundaries, not per gene: the linka…9f53528 -
Design brainstorm: how the AI could evolve by mutation and crossover
Claude +1: Claude Opus 5Unverified signatureA candidate AI is already JSON -- applyOverrides writes rows into STRATEGIES / ARCHETYPES / DIFFICULTY_OPTIONS, and every field is read through a `|| 1`-style default, so an arbitrary mutation is always a runnable AI rather than a crash. That tolerant genotype->phenotype map is the expensive half of an evolutionary setup and this codebase already has it by accident of its own conventions. What is missing is a gene schema, variation operators, and a generation loop. The document works through: which of the three tables should evolve (strategy yes, archetype carefully, difficulty never -- it is the duel fairness pin); the gene inventory as it stands and three genes worth adding so evolution can reach build order rather than only tempo; why the five gene KINDS need five different operators (log-normal steps for ratios, rare flips for the epistatic flags, order crossover for the unitMix sequence); why crossover should cut at module boundaries, with the Aggressive-borrows-Economic's-worker…a4e6e2e