Endgame racing and stopping the leader
The three switches
All three sit behind one endgame object in the seat configuration, off by
default, so v2:{"depth":2} is unchanged. Each was tested with exactly one
switch on, the unchanged depth-2 control in the other search slot, and an ETA
and a fast builder in the other seats.
The race leaf (endgame.race) arms once any opponent is within
endgame.trigger points, two by default, of victory. It drops the plain
opponent_progress and opponent_production terms and adds two: the
own-minus-leader margin, and the leader's expected new points next turn,
estimated as the best of a city, a reachable settlement, and a development
purchase, each times the share of its cost their hand plus one roll of their
production covers, with the purchase priced at the deck's remaining
victory-card share. Blocked production counts for less, so moving the robber
onto the leader's best hex also slows the estimate.
The hidden points switch (endgame.hidden_points) keeps every term and
only changes what counts as an opponent's score: the victory cards sampled
into each hidden world from the remaining deck prior, on top of public points.
A leaf averaged over sampled worlds therefore counts expected hidden victory
points inferred from public purchases and plays, without seeing any private
hand.
The leader bias (endgame.block_leader) touches only the candidate
shortlists, never the leaf, and only after two thirds of the estimated game
length. Robber placements score the leader's blocked production and stolen
cards with extra weight, and a road that lengthens the leader's route to the
best site both seats contest scores part of that site's value, a road the plain
reach score never pays for.
The single-seating cohorts and why they do not count
The first six cohorts seated the candidate in slot 0 and the control in slot 1
and rotated the four slots through the seats on every board, so both searches
sat in every seat; but slot 1 always sits one seat after slot 0, and the
bargaining code makes that order worth +0.05 to +0.18 wins per game to the
earlier seat (null pairs 91ddb42d and 689a1947 on boards 0 to 63, 9d213ed0
on boards 64 to 127, in the bargaining arms report).
The contrasts below are the size of that term and are superseded.
| Switch | Seeds | Slot 0 wins | Slot 1 wins | Single-seating contrast |
|---|---|---|---|---|
| Race leaf | 0 to 63 | 121 | 88 | +0.129 (+0.029 to +0.228) |
| Hidden points | 0 to 63 | 129 | 85 | +0.172 (+0.080 to +0.264) |
| Leader bias | 0 to 63 | 127 | 84 | +0.168 (+0.073 to +0.263) |
| Race leaf | 64 to 127 | 110 | 90 | +0.078 (−0.010 to +0.166) |
| Hidden points | 64 to 127 | 107 | 97 | +0.039 (−0.049 to +0.127) |
| Leader bias | 64 to 127 | 108 | 95 | +0.051 (−0.044 to +0.146) |
The fresh-board contrasts match the fresh-board seating term, so as filed they are consistent with no effect at all.
The swapped pairs
Each switch was then registered again on boards 64 to 127 as a swapped pair
under the follow-up study containment/endgame-seating: half A seats the
candidate in slot 0, half B seats it in slot 1, both halves on the same seeds
and the same engine. Both halves were played fresh because the engine no
longer reproduces the earlier confirmations: the recipient-order change and
the accept-side partner-cost fix landed after them, and on a 64-game sample of
the race lineup 6 games differ between engines. The effect of a switch is the
per-seed half-difference of the two contrasts and the seating term their
half-sum (analysis/seating_pair.py).
| Switch | Half A (candidate in 0) | Half B (candidate in 1) | Seating-corrected effect | Seating term |
|---|---|---|---|---|
| Race leaf | candidate 114, control 86, +0.109 (+0.026 to +0.192) | candidate 94, control 113, +0.074 (−0.013 to +0.161) | +0.018 (−0.018 to +0.053) | +0.092 (+0.014 to +0.169) |
| Hidden points | candidate 111, control 99, +0.047 (−0.048 to +0.141) | candidate 98, control 107, +0.035 (−0.060 to +0.130) | +0.006 (−0.030 to +0.041) | +0.041 (−0.047 to +0.129) |
| Leader bias | candidate 111, control 93, +0.070 (−0.027 to +0.168) | candidate 97, control 109, +0.047 (−0.040 to +0.133) | +0.012 (−0.018 to +0.041) | +0.059 (−0.029 to +0.146) |
Half A's contrast is candidate minus control, half B's is the registered slot-0-minus-slot-1, control minus candidate, so a real effect makes the two contrasts point opposite ways and the seating term the same way. Every pair points the same way: what the single-seating cohorts measured was the seating. The seating terms match the null pairs measured on the same boards. All three registered rules fail to confirm: every mean is below +0.05 wins per game and every interval crosses zero.
The pair runs are 3e8ec893-c404-4a08-a15d-0c9bd7a3b656 and
8bacdaf4-8be4-47ea-93df-c0e26156f94d (race),
6638df3f-4e04-41ac-881e-8fc11c12c4ce and
26f98193-ebf6-4edb-bf34-a722052b9053 (hidden points), and
77b249a6-80a7-4a4d-98d9-a0a55d3006d6 and
e6e854a2-8469-4b76-acec-1942b96e2f17 (leader bias), each 256 of 256 games
at eight threads on the current engine.
Diagnostics
Across each pair the candidate seat lost 21, 22, and 25 one-point games out of about 300 losses, and the winner finished 2.3 points ahead of it on average, with no visible difference between the switches. As before, the game-level robber statistics are shared by all four seats and do not isolate a one-seat bias.
What this says and what it does not
After correcting for seating, each switch is worth between nothing and about two hundredths of a win per game against two fixed builders and one identical search, and the intervals exclude effects larger than about +0.05. This is engine-arena evidence on one lineup; the opponents never retaliate, negotiate, or adjust. Nothing here tests the switches together, at the deeper confirmed configurations, or against the learned tables leaf. The switches stay off by default and any future endgame cohort is registered as a swapped pair from the start.