Public: anyone can read this; the crew can change it.
forked from trevato/cs
Take updates from trevato/cs #301
Check · Review · Land · Live done — Landed and live in production.
The app boots, all three pages answer, and `bun run test` is green (1260 pass). Work is pushed.
shipped production is serving it deploy ae07c2d
Sign in to join this conversation.
new above
offline
The app boots, all three pages answer, and
bun run testis green (1260 pass). Work is pushed.---
git merge FETCH_HEADbrought trevato/cs's 64 commits against this repository's 107, and the resolution is one line for almost every file: this side won, because the parent's side of each conflict is an earlier draft of something the engine extraction has already moved. The result of the merge commit is byte-identical to the branch's previous tree, deliberately.The 60 conflicted files (
README.md,forge.json,package.json,tsconfig.json,bun.lock,scripts/{build,cost,train}.ts, all ofsrc/client/,src/{compress,db,limit,result,server,tree,tty,who}.tsand their tests,src/pages/game.ts,src/rl/arena.ts) — ours. Every one is a file this repository rewrote as part of pulling the engine out:src/client/{input,physics,renderer,trace}.tsare gone from here because they aresrc/engine/{controls,physics,renderer,trace}.ts, and the parent's edits to them have nowhere to land;src/client/main.tshas shed the buy panel, the report and the menu into their own modules;src/who.tshere parses a name containing a|and takes its key as an argument instead of reading the environment inside the check, and the sign-in link and the missing-key warning it also carries live insrc/pages/game.tsandsrc/server.ts. Taking any parent side would have undone the extraction.The 61 files the parent added — dropped, not lost. Each is a concept already held here under this repository's name:
client/radar.tsisclient/minimap.ts,client/loop.tsandclient/fullscreen.tsareengine/loop.tsandengine/fullscreen.ts,client/press.tsisengine/controls.ts,bundle.tsisbundles.ts,tabs.tsisterminal/screen.ts,player.tsis thePlayeringate.ts,client/rounds.tsisclient/{economy,bomb}.ts. Two of each would be the opposite of the direction.AGENTS.mdandsrc/engine/{learn,math,net}.ts— ours, and put back by hand. Git rename-detected the parent's client files onto them and auto-mergedfallenMatrix,policyOver,rolloutOverandaccumulatethrough the engine's door. That was similarity, not intent:src/engine/surface.jsonand the guide are a contract that the door holds nothing unused, so those numerics are filed as work (#295, #296) rather than smuggled in.src/db.ts— the parent's thinking, applied where we had missed it. Its match upsert already refuses to lower a row (trevato/cs #151, taken in #286) because posts arrive while a match is played. The range'ssaveRunnever got the thought: it wrote every column from whatever post arrived last, andrunBoardranks by score, so a re-post under an id already on the board rewrote a ranked score. A run is one finished clock with no later state, so the clause now refreshes the name and freezes the rest. Two tests: a re-post leaves score, hits, shots, seed and seconds as posted while a rename still shows, and the ownership rule — which had no test of its own — bounces another identity and another browser's guest.What the parent has and this repository does not is written down rather than dropped: #290 radio, #291 resuming a match, #293 drawing between ticks with the remainder
engine/loop.tsalready keeps, #295 data-parallel PPO, #296 bodies where they fell — each blocked on this pull. I filed two more before reading the open issues and closed them as duplicates: the settings record is #73 (commented there with the crosshair and the bindings the parent settled), and bullet holes are #284.To try it: the preview's
/rangeboard is the change with teeth — post a run, then post the same run id again with worse numbers, and the board keeps the run that was played.Closes #287
🤖 Generated with Claude Code
Closes #287