Report · 12 October 2026
Treadcore: Opening Day
An afternoon's vision, and what it became by evening. Paul Richeson, with Claude.
Where it came from
It started with the news. Programmes about Ukrainian tanks fighting Russian tech-laden tanks, and the thing both sides had learned: a tank that drives up to the enemy dies to a thousand-dollar drone, and a tank that sits back and fires like artillery, under its own cover, lives. The tank's job had changed while nobody was looking.
Paul's vision, that afternoon, was a game about the new job. Not a tank you drive at things. A tank that is a control centre: it sits in the field, it reaches out with high-calibre indirect fire, and it deploys its own technology around itself. Drones in the air. And, on the ground, the Pillboys: the tech infantry who ride with the tank, the crew who run its systems, who jump off to capture a pillbox, repair it, build the next one. The old Bolo loop of territory, pillboxes, bases, building and repairing, but with the tank as the headquarters it is done from, and a layer of air on top of it.
What was researched
Before a line of code, a look at what is actually being fielded, so the game would be a model of something real. Sources are in documentation/RESEARCH.md.
And the ancestor: Stuart Cheshire's Bolo, with its shared mutable world, up to sixteen machines in one game, external "Brains" that could drive a tank, and a network that was a ring of peers forwarding to their neighbour. Treadcore keeps the ideas and replaces the ring.
What was built
A Rust workspace of six crates, a build system, and a website, in one day. Repository: github.com/treadcore/treadcore. Site: treadcore.org.
| crate | what it is | state tonight |
|---|---|---|
| treadcore-sim | the world: a 128×128 tile island from a seed; tanks with indirect-fire guns and a bay of recon, interceptor and strike drones; telemetry link quality that sets interceptor kill rate and drone recall; depots to capture and resupply at; neutral FPV swarms off the map edge; fog of war; deterministic to the bit | compiled, 6 tests pass |
| treadcore-proto | one enum of everything that crosses the wire, versioned, bincode | written |
| treadcore-net | LAN beacon discovery; every peer pings every peer; a latency matrix; a pure-function election of the host (best worst-case link) and a shortest-path relay route for anyone the host cannot reach; host-authoritative session with reliable orders and events, fire-and-forget snapshots | written, 5 tests written |
| treadcore-brain | the Brain: observation in, commands out, validated like a human's. A rule bot for empty seats; a JSON brain that runs any external program | written |
| treadcore-server | headless: four-bot matches traced for reading, LAN host, LAN bot seat, --brain-schema | written |
| treadcore-client | the Bevy window: overhead map, HUD telemetry overlay (bubble ring, link lines green to red, recon discs, shell arcs), click to drive, click to fire, keys to launch | written; engine build pending |
| treadcore-warm | the engine alone, for make warm | written |
The rules that carry the vision
- A spotted shell lands within 0.6 tiles; a blind one within 4. Recon is the gun's accuracy.
- An interceptor kills 90% of the time on a good link, 50% on a dead one. Telemetry is the ring's strength.
- The bubble is a radius the player sets. Wide meets a strike early and thins the ring; tight is dense and blind.
- A shell comes down through the ring regardless, and its splash takes the ring down with the tank.
- The bay is a budget. 2 recon, 6 interceptors, 3 strikes, restocked at depots, interceptors first.
The network that carries the brief
The brief asked that the clients negotiate who is the server by forming a connectivity route. Each process measures its latency to every other, publishes its row, and every process runs the same election on the same matrix. No vote, no referee: compute and compare. The host is the peer whose worst link to anyone is best. Peers the host cannot reach send through the neighbour that can, and only they pay for the relay. Bolo's ring, as a tree. The protocol.
The build system
A Makefile in front of bash scripts in front of cargo, as in Paul's other projects. make configure checks the machine and writes a config the other scripts refuse to run without. make debug runs a four-bot match flat out with every log level on and writes two files: a log that reads as the story of the fight, and a JSON event stream. Both are for reading by a person, or by an AI with the source beside it.
What was learned, the hard way
Bevy is some four hundred crates, and the development machine is a 6 GB VM. The first engine build ran four compilers at once on crates that each want a gigabyte and a half, and the machine went to swap on bevy_ui. The fix is a design, not a flag:
- Bevy is defined once at the workspace root, trimmed to the 2D features the game uses: 368 crates instead of 433.
make warmbuilds the engine alone, at low priority, resumable, through a crate that depends on exactly what the window does. Afterwards, building the game builds only the game.- The job count comes from memory, not CPUs: three on this machine.
- Dependencies carry no debug info in dev builds; release does not LTO. A separate
distprofile does, for shipping.
Written up in documentation/BUILD.md.
What was written
| document | covers |
|---|---|
| CONCEPT.md | the brief, line by line; Bolo as the base; what the war changed; the tank as mobile command with tech deployment; why it is an improvement |
| DESIGN.md | the rules and every number, with the reason beside it |
| PROTOCOL.md | packets, discovery, election, relay, session |
| RESEARCH.md | what it is modelled on, with sources |
| LAB-REPORT.md | the code, crate by crate, and the Rust technique in it |
| BUILD.md | the build, sized for a small machine |
| vendor/ | the vendoring rule and the licence notices |
Where it goes next
The afternoon's vision is bigger than the evening's build, and the gap is the plan.
- Pillboys. The tank's tech infantry: a squad that rides with it and deploys from it. They are what captures a pillbox, repairs it, and builds. Design question for tomorrow: are they one unit the player moves, or an order the tank gives ("Pillboys: take that pillbox") that resolves over time and under fire?
- Pillboxes. Bolo's stationary guns, back: automated defences that engage tanks and, in this world, drones. Captured by Pillboys, repaired, repositioned, and the thing a recon drone is sent to find.
- Building and repair. Roads, bridges, pillbox emplacements, from material the tank carries; repair of the tank itself by its Pillboys in the field, slower than a depot.
- Territory. Depots are the start; pillbox coverage of ground is the shape territory takes.
- Then the things already listed as deferred: teams, map files and an editor, client prediction, NAT traversal, sound.
First, though: make warm, make test, and the round of fixes the compiler will ask for in the crates above the simulation. The world is proven; the rest is written against it.