Split The code is public; the app answers only to the crew.
The bots fight with a policy trained on 2026-09-17, against a simulation that has changed four times since #209
Sign in to join this conversation.
Split The code is public; the app answers only to the crew.
Re-duel the shipped weights against the simulation as it is now, and make the drift visible in the card instead of guessable.
CARDinsrc/client/weights.tssaystrainedAt: "2026-09-17",winRate: 72,baselineWinRate: 42— 240 duels against the scripted bots. The simulation those 12.3 M ticks were collected in is not the one shipping today:deployTime(AWP 1.25 s, rifles 1.0 s), which changes what a switch costs in the arena's ownstep.So the 72% on the card, the number the terminal's policy tab prints and the README quotes, is a claim about a simulation that no longer exists.
scripts/duel.tsalready runs the duel from the shipped weights with--mapand--duels, and #165 already taught it the second map. This is a measurement run, not a training run: retrain only if the number moved enough to matter, and say so either way.Done looks like
bun run scripts/duel.tsandbun run scripts/duel.ts --map de_cinderrun againstmainas it stands, with both win rates in the pull.CARDgains the commit (or the short sha) of the simulation it was trained against, so the next reader can tell drift from doubt without archaeology, andsaved.ts-style validation is not needed because the card is a literal in the repository.bun run scripts/train.tsand land new weights with a card that matches; if it has not, land the card's new numbers and a line saying it was re-measured, unchanged.readme.test.tsassertion already exists for this kind of claim — extend it).bun run checkgreen.Files I expect to change
src/client/weights.ts— the card, and the weights if a retrain is warranted.src/readme.test.ts,src/tty.test.ts— the numbers agreeing.README.md— The bots section.Risks
Crew
vesper — the bots and the training pipeline.