6. What the factory made
The bot lines we bred between 09-28 and 10-09, what each one did, and which of them moved the server rating.
Over twelve days the agents produced 322 variant directories locally and 680 arena submissions under 258 bot names. This post follows the lines that mattered, in rough order, and keeps two scores that often disagreed: the arena (our judge, our bots) and the competition server (everyone else).
strategy-v1 and the gst line
strategy-v1 (09-28) was a hand-written C++ bot from the RL repo. Its ideas: explore, gather pearls with many small dragons, split from length 4, trade head-to-head only with an enemy at least as long, and late in the game feed workers into the leaders. It beat the RL policy 79-1-0 on 40 pool maps and 22-0 on the official maps, and became server v3.
gather-split-trade (gst) was the first line the league bred from it, and it ran for about 130 generations. Its early gains were about consolidation: the team agreed on one champion over sonar and fed it late in the game.
Corridor farming was syeyoung’s idea (g20). Short “farmer” dragons claimed corridor bed farms over sonar and stayed small, cycling the beds. gst109 did it heavily (600-1050 farmer-eaten pearls a game) and did not grow the team at all. The real opponent out-ate us 1.22x in corridors and 1.30x in open ground: corridors were no special edge.
What did survive was dead-end pricing. Once the sim used the judge’s pearl seeding, most old “wins” re-tested as coin flips. Only gst131’s change held up (57%): charge every dead end a flat cost of 3.0, dropping the expected-loss model, which halved dead-end entries. gst131 went up as server v8 on 09-30.
arena-search-7 (v9) and its 0-5
In the local arena rounds (09-29 to 10-02) six long-running Opus teams wrote bots, mostly from scratch. The search team’s arena-search-7 used a per-dragon lookahead (depth 8) and finished the round-robin #1 at 62.2%, beating v8 184-115 on seeds it had never seen. It became v9 on 09-30.
Its first server battle was 0-5. We had picked that match against the leaderboard #1, so it said more about the #1 than about v9. But the replays showed something we had thrown away. The #1 farmed dead-end hot beds (beds that refill within about 3 rounds) with a tip split: eat up a dead end, split at length 4-5 so the rear half walks out. Hot-bed pearls went 150 to 6 on Autarky. arena-search-7’s room check kept it out of dead ends entirely, so the from-scratch bot had lost the corridor economy gst already had. Overall v9 went 112-0-86 and sat at #72 of 947, about 1767.
The rule that came out of it: build on gst131 and add one radical behaviour, no from-scratch bots.
gst-giant, gst-search and the 1.2.3 queens
That rule produced two quick server versions on 10-01. gst-giant-2 was gst131 plus a rollout judge (with a portal fix) from the giant team; it went 40-0-35 as v10 and the rating rose 1767 to 1797. gst-search-4 (v11) put arena-search-7’s lookahead on gst’s plain late moves. That lookahead gained on all three gst bases it was added to.
Then the game changed. unswbc 1.2.3 (“Slay Queen”, about 18:15 on 10-01) made dragon id 0/1 a queen: at r500 the side with a living queen wins before longest dragon is even checked. Sprints got cheaper (the first ceil(L/4) steps free) and every rating reset to 1500. In the first 20 new-rules server games almost every queen died, median around r50.
gst-queen-1 (v12) adapted gst-search-8 by making the queen the only champion. When she died, nobody fed anyone. The fix was an “heir champion”, which became gst-queen-3 (v13).
The queen-guard line came from the giant team’s survival core. The first version kept the queen alive in 21-30% of games instead of 8%, yet lost overall (66-74) because the guard cost early economy. After several rounds of fixes, queen-guard-7 was #1 on the arena and the arena’s gate auto-submitted it on 10-02. On the server it went 60-0-73. The arena and the ladder disagreed loudly for the first time.
codex-queen-value-1 came from Codex runs on separate branches (10-02 to 10-04). It was queen-guard-2 with queen length weighted 3x from r300, and reached arena #3 at 1543. Its lesson was how it beat us: it fed its queen and grew her long, while our heir feeding of a non-queen dragon halved our material after r320. When both queens survive, the longer queen wins.
queen-ring17 and the ring line
The bot that reset our direction was a teammate’s. bu-gye-jeong’s queen-ring17-first-then-grow-1 kept gst’s economy, parked the queen in a 6-cell ring, and grew her late (she leaves at r430, nearby donors feed her from r450). It was 54-19 on queen-decided server games and was live at 77-0-75 when round 10 started on 10-04, with the team at #35, 1832. We imported it unchanged; each line below is one defining change on the previous head.

- ring-plus (10-04): first a forage opening (a short queen with 2 or fewer starters forages and splits before parking; ring-plus-1), then hunger-scaled exploration for workers before r150 (ring-plus-4). ring-plus-4 beat its parent 52-26 in the arena and was auto-deployed, then went 45-41 on the server, exactly at Elo expectation. On the arena’s server suite (2 fixed seeds per map) it had beaten ring17 50-18; elsewhere 26-24. Forage was real on 2-starter maps; hunger exploration hurt on 3+-starter maps. Measured on real opponents’ ratings, the line was still worth +80-90 Elo over ring17.
- ring-sched (10-04 to 10-05): team task scheduling, our direction. ring-sched-1 beat its parent 50-28. ring-sched-8 added a race to the geometric centre’s bed cluster and performed at 2091 on the server, about +70-100 over ring-plus-9; the team peaked at #18, 2054 during its run. On 40 freshly generated anti-centre maps, though, the rush lost 64-96 to the same code without it: it was fitted to the maps we knew, and from then on every opening idea had to pass mapgen families. The rush-free merge ring-sched-17 beat ring-sched-8 67-45 and went live; on the server it went 29-43.
- ring-contest (10-05): in the opening, contest food we reach first and split on dense food. 63-49 over ring-sched-17; live from 10-05.
- ring-sprint (10-06): free sprints for non-queen dragons of length 5+. 61-51 over ring-contest-1, live from 10-06. The ladder went #31 2032 → #22 2099 → #16 2139, our best recorded rank. The server analysis then measured ring-sprint-1 at 2046 against ring-contest-1’s 2035: the sprints netted zero, because more of our 5+ dragons got killed.
- ring-field (10-07): a committed opening that sends starters to the bed fields. ring-field-3 won 74.5% against the 10 non-ring arena bots and went live; on the server it performed the same as ring-sprint-21 (2071 v 2082).
- ring-sealed (10-08): if the queen’s pocket is too small to win the queen race, play for longest dragon instead, plus a fix for a share discount that let any ally beside a kelp wall “claim” the whole field. ring-sealed-2 was auto-deployed on 10-09 and the team climbed from #35 to #29, but the server analysis put the gain down to opponent ratings drifting up.
- ring-shield (10-09): a lunge guard for late big dragons, then a walled-bastion fix, then, after we allowed a soft centre preference, a port of the old centre rush with exits. ring-shield-10 won Trophy 16-0 in its arena games but lost Default 3-13. We uploaded it; the latest recorded ladder position was #24, 2194.
Two side bots belong here. spar-field was a sparring partner: every arena opponent was a home-bound relative of ours, so spar-field played the top teams’ opening. spar-field-2 beat its parent 67-45 but was worse than ring-sprint-21 against non-ring bots (61.7% v 71.8%): its edge was only over our own family. syeyoung-bot was syeyoung’s own from-scratch bot, 36 commits on 10-08 and 10-09, written to try syeyoung’s own strategy in the hope that it would work well. Its plan: spread fast, harvest beds into children, children spread to new beds, the rest fight. Its notes say v1 explored and controlled more of the board than ring-field-3 but lost duels (no combat, the queen dies). We have no recorded arena verdict for the final version; syeyoung’s summary is that it didn’t work.
What the lines taught us
These held up across lines:
- Economy before r300 decides games; consolidation never paid. Every delivery mechanism we tried was neutral or negative on held-out seeds. Champions grew by eating, not by being fed.
- Many short dragons early. On the solo benchmark, splitting at 4 reached 90% coverage at r124 against r177 for splitting at 12. Cutting splits to reduce churn lost (ring-longmid-1 25-42): short-lived children still take pearls and space first.
- Top teams win on mid-game army, not queen safety. Their queens died more often than ours and they still won; see the metrics post.
- The arena overrated what it was fitted to. Two fixed seeds per map and a pool of only our own bots rewarded beating our own habits: ring-plus-4 and queen-guard-7 looked better at home than on the ladder, and spar-field-2’s edge was only over our family.
What moved the server rating, by our own rating-adjusted measurements: switching to the teammate’s ring bot, the ring-plus line (+80-90 over ring17), and ring-sched-8 (+70-100 over ring-plus-9). The sprints, the sealed queen and most work from 10-07 on measured as flat, whatever the ladder did.