Settlers / Research

73 pages · Search titles and descriptions

↑ ↓ to navigate · Enter to open · Esc to closeLocal search
Play the game

An opening planner and threat-aware bargaining

Playing against the depth-3 browser search, the user found its setup placements poor and its trading passive: it took one-for-one swaps it could have improved and never blocked a rival. A four-game trace confirmed the placement diagnosis in numbers: the search ranked sites by raw production and produced pairs with eleven brick pips and no grain, or no ore at all.

Opening planner

crates/expectimax/src/v2/opening.rs scores the two setup sites as a portfolio (production, dice-number coverage, thin-resource balance, time to afford a settlement and a city, ports, expansion), predicts the picks the seats ahead in the snake draft will make, and values a first placement by the best pair it still leaves. The last seat plans both placements together. Roads head for the best surviving site. The same planner opens the opponents inside the lookahead, the fast and ETA builders, and the browser builders.

The first version valued pips with hand-set weights and a large expansion term. On 64 deterministic boards, four rotations, the planner-decided seat lost to the previous search placement by 0.30 wins per game (23% against 54%): its pairs covered the island but held no ore, while the search's ore and grain pairs won. Calibrating the production weights to the leaf's resource values, cutting coverage, balance, and expansion to tie-breaker size, and switching the discrete strategies off turned the contrast around. Unregistered screens, each 256 games against the same control seat, planner minus search wins per game:

SettingPlannerSearchContrast
pip weights, expansion 0.5 (first draft)23.4%53.5%−0.301
leaf weights, specialize 0.5, scarcity 0.5, expansion 0.1528.5%44.9%−0.164
calibrated, specialize 0, scarcity 047.3%37.9%+0.094
calibrated, specialize 1, scarcity 031.6%47.7%−0.161
calibrated, specialize 0, scarcity 146.9%35.2%+0.117
calibrated, specialize 0.5, scarcity 0.542.2%42.6%−0.004
calibrated, coverage 0.4, balance 0.546.1%37.1%+0.090

Specialization (five discrete strategies blended in by specialize) hurts at every strength; the scarcity markup at full strength is the best setting; the coverage and balance weights are neutral in this range. The defaults are the calibrated weights with specialize 0 and scarcity 1.

Registered confirmation d1bdca03-d27f-475c-b1ee-a8caf70937fe, run 08fdd9a7-6e0a-4e2a-a1cc-8124294feae2, on fresh boards 64 to 127: the planner seat won 110 of 256 (43.0%) against 94 (36.7%) for the previous placement, paired contrast +0.062 wins per game (95% interval −0.036 to +0.161); the registered rule was not met.

The bargaining arms later in the day showed a seating term between two searches in slots 0 and 1, so the comparison was re-registered as swapped pairs (experiments 9183b787-3f41-42c4-b275-2501bbde6cf4 and 0fa24829-d9d8-42c3-b2b5-bf4c79f7e263 on boards 0 to 63, runs b698064e-39e8-4d73-9844-ac3d5afefce6 and da0b1591-e74e-4e56-96b1-1ece9b37900f; experiments 8dfbb264-338f-48e1-8fda-9b00d7bc865c and 54d3e49d-185d-4a40-945c-8ddafc20c5ef on boards 64 to 127, runs 5e3c4985-251d-441f-bea8-512dfe3224b4 and d89ea4de-913b-4255-af42-ba2f18309e87). Planner effect after removing the seating term: −0.006 (−0.087 to +0.075) on boards 0 to 63, −0.027 (−0.111 to +0.057) on 64 to 127, pooled −0.017 (−0.075 to +0.042) over 128 boards, with a seating term of +0.063 (+0.008 to +0.119). The calibrated planner matches the search's placement in strength and does not beat it; the screens' +0.09 to +0.12 were seating. The planner stays the default for what it adds without costing strength: balanced pairs, an explanation per candidate, the draft prediction, and one placement rule shared by every seat.

Bargaining

crates/expectimax/src/v2/bargain.rs gives every other seat a threat from the race, shared ground, and award contests. The threat raises the margin a swap must clear and charges a share of what the partner gains. Proposals avoid threatening seats, carry a message with the reason, and may go to every safe seat at once. An open offer to the search draws counters (more of what was offered, an extra card it is short of, a different resource, or one card less) priced by the offerer's public eagerness, and when neither accepting nor countering beats waiting the seat declines explicitly with a reason: the offerer leads, the swap completes their build, they compete for the same ground, the terms are thin, or the cards are needed. The arena resolves counters and records declines; the browser worker sends the search's speech for accepts and declines and keeps the offer's message inside the offer.

Registered cohort 0250ba3c-1631-427e-bddc-9930a1504334, run 4228f4f7-4427-42a4-8c0f-3976e1d26c76, seated the default against the same search with plain acceptance (bargain: false) and two builders on boards 0 to 63: the bargaining seat won 137 of 256 (53.5%) against 81 (31.6%), paired contrast +0.219 wins per game (95% interval +0.124 to +0.314), at 111 ms per decision against 71 ms. At a table where the other search accepts any swap that reduces its build deficit, pricing by threat, countering thin offers, and asking two for one from a well-stocked partner is worth about a fifth of a win per game. This says nothing yet about a table of people, who will not accept every counter.

Registered cohort b1fd194e-f308-448e-8acb-21b8087abf43, run 42f60c41-b5f2-42ee-94f4-9675c09aa3a1, seated the new default against ETA, fast, and ETA on boards 0 to 63, the lineup of run 77928683-3ef2-4ee7-90f0-04f7b2885c53: 170 of 256 slot-games (66.4%, interval 60.4% to 71.9%), mean 9.00 points, against the compared ETA slot's 9.0%, paired contrast +0.574 (interval +0.500 to +0.648). The registration cited the 34.0% of run 77928683, which predates the planning fix of 2026-09-09; the corrected search's 50.4% in run a0c91849-4abf-4f1c-9de1-6255e1ef73e6 is the fairer comparison, and the new default is 16 points above it. The builders now open with the same planner, so this compares versions on the same boards rather than pairing a single change.

Failures and limits

The pip-based first draft is the main failure: an evaluator that looks balanced to a player lost thirty points to the leaf's ore-and-grain preference against builders. Whether that preference survives against opponents who trade and block is untested; every cohort here is development tier against fixed builders. Counters and reasoned declines were not measured against a human.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

Bargaining arms and a seating bias

The three bargaining mechanisms of the morning cohort changed together, and the plain partner accepted every helpful counter, so the afternoon separated them. The server gained four SearchConfig switches, all on by default: threat_pricing (the margin premium and the partner cost), counters, asks (two-for-one asks to well-stocked partners), each effective only while bargain is on so that bargain: false is the all-off control, and accept_asks, which when false makes a seat refuse any offer or counter that asks it for more cards than it receives. Adding them exposed a defect: the accept-side partner cost priced the swap backwards, valuing the partner receiving what this seat received. It is fixed on the branch, so every cohort below runs the corrected default; the morning cohort ran the reversed cost. Tests for each switch are in crates/expectimax/tests/bargain_arms.rs.

Unregistered screens on boards 0 to 15 seated the default in slot 0 and the changed seat in slot 1: the default beat threat pricing off by +0.06, counters off by +0.33, asks off by +0.30, the stubborn partner by +0.23, and all off by +0.31. The registered cohorts on boards 0 to 63 seat the changed search in slot 0 and the default in slot 1, the ablation design, and pointed the other way: threat pricing off 4f63e9ca-6a55-486f-931e-e892653a1d9c (run 42f26989-d3ee-4028-8e9b-94ed1721f2af) +0.168 (95% interval +0.073 to +0.263) for the changed seat, counters off 86f142ed-1caa-4dcb-a3e1-056928a02349 (run 41c28f22-84a4-4393-8af2-e87b1fce4503) −0.023 (−0.109 to +0.062), asks off 07ef7d4d-f2cf-4d7b-98b5-b444e9a5175a (run dcc418a8-8823-440c-9a6e-1ad559cba001) +0.020 (−0.083 to +0.122), the default against the stubborn partner 40a3b6ce-d0a4-4752-8866-297729c539f9 (run 61c10388-f2ee-4a4e-9ef7-42d023b57199) +0.117 (+0.015 to +0.219). A screen is not a finding, but every arm moving by 0.2 to 0.35 between the two seatings asked for a null.

Cohort 948d095b-afd8-467c-ad8b-408b80280e65 (run 91ddb42d-82ab-460b-95c2-b8d340658369) seats two identical defaults in slots 0 and 1 with the builders: slot 0 won 128 of 256 against 83, contrast +0.176 (+0.083 to +0.268). Slot 1 always sits one seat after slot 0, so it is asked first on every offer slot 0 makes, while slot 0 is asked last, after both builders, on every offer slot 1 makes; with counters and multi-seat offers that order is worth a sixth of a win. Read against the null on the same boards (not preregistered), threat pricing off is −0.008 (−0.103 to +0.087), counters off −0.199 (−0.309 to −0.089), asks off −0.156 (−0.259 to −0.054), the stubborn seat +0.059 (+0.002 to +0.115) better than an identical default would be, and the morning cohort's +0.219 becomes +0.043 (−0.082 to +0.168). All off 7f5703e0-9fed-46cf-931d-5b91bdf42e77 (run a4db5f20-cece-4644-a9cf-a33311f8fd8d): −0.121 (−0.210 to −0.032) registered, the one arm whose registered interval excludes zero in the direction of its hypothesis, and −0.297 (−0.429 to −0.165) against the null.

Counters carry the largest effect, so they were registered again on boards 64 to 127 as a swapped pair, 02dea57a-7696-497f-a35f-cd052cc62d60 (counters off in slot 0, run 223be9e1-3f6b-4211-8879-40ce3b8fc8c0) and 2f44e17b-0bbb-4206-b484-3b114de31139 (counters off in slot 1, run 6d2867d4-df84-4e52-a6b5-9baaa2459e26), with the effect defined as the per-board half-difference of the two contrasts, which averages the two seatings: counters off in slot 0 −0.105 (−0.206 to −0.005), counters off in slot 1 +0.086 (−0.006 to +0.177) for the default, effect of switching counters off −0.096 (−0.156 to −0.035). The rule is met and counters stay on. The pair's seating term, the per-board average of the two contrasts, is −0.010 (−0.084 to +0.065), not the +0.176 of the first null, so a second null 8402a48b-31fc-4654-9687-a1a4bf3bd403 (run 9d213ed0-a04f-442b-8d89-1dd3fdd99ab1) was registered on boards 64 to 127 to tell whether the bias needs both seats countering or the first null's boards were unusual: +0.051 (−0.046 to +0.148), 107 against 94. Pooled over the 128 boards the seating term is +0.113 (+0.046 to +0.181), an after-the-fact pooling; its direction holds and its size does not, so a two-search contrast must be measured in both seatings rather than corrected by a null.

The default keeps every switch on; the arms report has the tables and the reasoning. The +0.219 strength claim of the morning is withdrawn in docs/status.md. Two things follow for the arena: a multi-seat offer should not always be put first to the seat after the offerer, and any two-search contrast needs a null arm or a swapped pair. The 2026-09-09 ablation program used the same slot design under the earlier trade code and was not re-checked.

Failures: none of the cohorts lost a game; the machine was shared with other agents at a load of 50 to 90 on 32 cores, so wall times (17 to 30 minutes per 256-game cohort at eight threads) say nothing about search cost.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

Endgame racing and stopping the leader

The tunable search penalizes the highest opponent score at 35 points per point and their production at 60 per card per roll, the same at 8 points as at 4. Three switches behind one endgame seat object, each one hypothesis, each off by default, were built in the server search and tested against the unchanged depth-2 control with an ETA and a fast builder:

  1. race: once any opponent is within two points of victory, the leaf drops the plain opponent terms and adds the own-minus-leader margin plus the leader's expected new points next turn, estimated from the share of their best build's cost their sampled hand plus one roll of production covers, with development purchases priced at the deck's remaining victory-card share.
  2. hidden_points: opponent terms count expected hidden victory points, the victory cards sampled into each hidden world from the deck prior left by public purchases and plays.
  3. block_leader: after two thirds of the estimated game length, robber placements, stolen cards, and road shortlists score the points leader with extra weight, including a denial bonus for roads that lengthen the leader's route to a contested site.

Unregistered 16-seed screens (64 games each, seeds 0 to 15) pointed the same way for all three: raw win differences of +0.16 (race), +0.25 (hidden points), and +0.30 (block leader). Screens carry no evidential weight.

The first cohorts seated the candidate in slot 0 and the control in slot 1 on seeds 0 to 63, then again on fresh seeds 64 to 127, 256 deterministic games each, with the rule that the paired per-seed win difference must have a 95 percent interval excluding zero and a mean of at least +0.05 wins per game. All six completed 256 of 256 at eight threads:

SwitchSeedsRegistrationRunSlot 0 winsSlot 1 winsContrast (95% interval)
race0 to 638e88ecc7-03f7-48a8-9b53-4a94605a328921339250-46ad-49ec-ae7e-b2580dabcfed12188+0.129 (+0.029 to +0.228)
hidden_points0 to 637ac46868-0f78-4f10-bd6c-49c9437d24ad7cc6f1aa-faad-448f-9224-6ffaecce53f012985+0.172 (+0.080 to +0.264)
block_leader0 to 6321b4a965-c6f1-4e38-83aa-ecacd3187ecdb5090959-bd26-4926-a9a6-bff17b9c5a8712784+0.168 (+0.073 to +0.263)
race64 to 127b45005ae-66e6-4290-ae8a-7959a8d4d7c3c7b6767b-1bc5-4f19-a2d5-b348c5e4959b11090+0.078 (-0.010 to +0.166)
hidden_points64 to 127350b4c24-02bf-4f36-a9d0-90ff71f25ae9b8abe69e-c8b2-418b-a2fc-c70f9425afe910797+0.039 (-0.049 to +0.127)
block_leader64 to 1274c43f642-044e-4b09-850a-e2cf38fb3b30bbc86639-f6ef-4d40-9d26-604fa8a4573a10895+0.051 (-0.044 to +0.146)

Those contrasts do not count as effects. The design seats the candidate in slot 0 and the control in slot 1, and null pairs measured a seating term of exactly that size and sign between two identical searches: +0.176 (+0.083 to +0.268) and +0.180 (+0.075 to +0.285) on boards 0 to 63, +0.051 (-0.046 to +0.148) on boards 64 to 127 (runs 91ddb42d, 689a1947, 9d213ed0, the bargaining arms report). My development contrasts are the size of the term and my confirmations match the fresh-board term, so as filed they were consistent with no effect at all. The strength reading is withdrawn.

Swapped pairs for the endgame switches

Each switch was then registered as a swapped pair on boards 64 to 127 under the follow-up study containment/endgame-seating: half A seats the candidate in slot 0, half B seats it in slot 1, the effect is the per-seed half-difference of the two contrasts and the seating term their half-sum (analysis/seating_pair.py). Both halves were played fresh on the current engine rather than pairing half B with the earlier confirmations, because the engine no longer reproduces those games: 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. Every half completed 256 of 256 at eight threads:

SwitchHalfRegistrationRunSlot 0 winsSlot 1 winsContrast (95% interval)
raceA232a0fe5-bf9f-4654-972f-fd5614f0c6273e8ec893-c404-4a08-a15d-0c9bd7a3b65611486+0.109 (+0.026 to +0.192)
raceB80e8871e-a41f-4af4-9abd-c5d148c6b7298bacdaf4-8be4-47ea-93df-c0e26156f94d11394+0.074 (-0.013 to +0.161)
hidden_pointsAc0222de1-d17f-4c7a-8c62-8122902095466638df3f-4e04-41ac-881e-8fc11c12c4ce11199+0.047 (-0.048 to +0.141)
hidden_pointsBe4bba171-b024-48b5-a89e-cdd9f335a2d826f98193-ebf6-4edb-bf34-a722052b905310798+0.035 (-0.060 to +0.130)
block_leaderA6a26ed39-a56c-4c50-8bb8-b80f06e230c077b249a6-80a7-4a4d-98d9-a0a55d3006d611193+0.070 (-0.027 to +0.168)
block_leaderBbf5f1784-46c3-4a01-8b1a-5560ea963d6ae6e854a2-8469-4b76-acec-1942b96e2f1710997+0.047 (-0.040 to +0.133)

Half B's contrast is control minus candidate, so a real effect makes the two contrasts point opposite ways. Every pair points the same way: the single-seating numbers were the seating. Seating-corrected effects over the 64 boards, with the seating terms beside them:

SwitchEffect (95% interval)Seating term (95% interval)
race+0.018 (-0.018 to +0.053)+0.092 (+0.014 to +0.169)
hidden_points+0.006 (-0.030 to +0.041)+0.041 (-0.047 to +0.129)
block_leader+0.012 (-0.018 to +0.041)+0.059 (-0.029 to +0.146)

The seating terms match the null pairs measured on the same boards. Every effect mean is below the +0.05 of the registered rule and every interval crosses zero, so all three are inconclusive and consistent with no effect; each interval excludes effects above about +0.05 wins per game. The switches stay off by default. The report is rewritten with the corrected reading.

Diagnostics across each pair (analysis/endgame.py): the candidate seat lost 21, 22, and 25 one-point games out of about 300 losses, the winner finished 2.3 points ahead of it on average, and the game-level robber statistics again do not isolate a one-seat bias. One earlier registration had a clerical error, a mistyped UUID in the block_leader confirmation's hypothesis text, corrected in experiments/4c43f642-044e-4b09-850a-e2cf38fb3b30.toml before its run started; no completed experiment was rewritten. No run failed, no game was censored, and all twelve cohorts completed 256 of 256 games at eight threads.

Attribution: GLM-5.3 (baseten/zai-org/GLM-5.3) through opencode.

A rotating recipient order does not remove the seating term

The arena now asks the recipients of an offer starting from a rotating seat (seed plus version) instead of always the seat after the offerer, the mechanism the arms report suspected. A null pair of identical default seats in slots 0 and 1 with the rotation, experiment e1913588-7c22-4573-88e2-04728f60c820, run 689a1947-ee7a-4767-ac08-d8302f407c50 on boards 0 to 63, still differs by +0.180 wins per game (95% interval +0.075 to +0.285), against +0.176 before the change on the same boards. The recipient order is not the cause, or not the whole cause; the swapped-pair rule stands and a diagnosis of the seating term is filed as the next step of log/arena-seating.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

The seating term is turn order, not the arena

Study log/arena-seating. The rotating recipient order left the null pair at +0.180, so eight more null cohorts on boards 0 to 63 (256 games each, deterministic, depth 2, sixteen threads) asked what the term needs. Two identical seats in slots 0 and 1 with bargain: false (f6c4c5d3-583e-4984-9a69-e4bec3c2e81a, run dc30070d-8a95-4de3-b9ec-0724f051687f): +0.102 (+0.020 to +0.183), the term exists without bargaining. propose: false (e339df5d-42d1-4e92-a188-74119b970e19, run 98fce06c-8028-4b01-9622-cd2325af5b7b): +0.074 (−0.008 to +0.156), inconclusive by its rule. counters: false (db5a667c-7cae-4899-b927-d73f486384cf, run dbd08f29-7fc4-4c8e-8ae4-42f510046e37): +0.090 (−0.013 to +0.192), inconclusive. asks: false (a82a26b5-2000-457e-8f23-8b90ff85944f, run cbc642ff-acd5-4133-bf6a-f8ee013cf6ce): +0.008 (−0.083 to +0.099), which meets its rule for asks being necessary and is contradicted by the bargain: false cohort whose seats never ask either; pooled, the four switch-off nulls are +0.068 (+0.015 to +0.122) and −0.111 (−0.217 to −0.005) below the default null on the same boards, an after-the-fact pooling. Two ETAs in slots 2 and 3 (488ce26d-2aa8-4c46-a1bc-ee0f3a352be8, run e62b248e-ea38-4c6d-b1bb-0ce3ec935284): +0.141 (+0.051 to +0.230), and the ETA before a search beat the ETA after one by +0.062 (+0.010 to +0.115). Fast then ETA (d85b0adc-f745-4aa5-b1fd-bc04d7e7bdb8, run 8acd42de-4681-4869-8fc9-e837206aaff7): +0.133 (+0.040 to +0.226). An ETA between the two searches, slots 0 and 2 (6ad995b4-dfe4-41a6-8c67-c8d0bf35af8e, run 8dfca00b-69c3-4e54-a8dd-b90ee75e63d5): +0.039 (−0.048 to +0.126) for slot 0 minus slot 2, the rule for adjacency met. One search with three ETAs (34c7f33a-d0d1-4ede-a424-3f45281535d3, run 796fe469-7624-4629-8141-7fcd4bd214ac): the ETA after the search minus the ETA before it −0.027 (−0.084 to +0.029), no builder term.

The cause is adjacency in turn order, a property of the game: the seat directly before another acts first after three of the four rolls in a round, and two identical searches race for the same things. It is not the arena's offer handling, and every other seat-order rule in table.rs and the engine (discard order by lowest seat, robber ties by seat, count-indexed tapes, the shared setup planner) is rotation-symmetric or points the other way. Full bargaining roughly doubles the term, so the seat after a bargaining search also loses something in the trades, though an unregistered traced screen on boards 0 to 15 (kept under runs/screens-arena-seating/) found offers between the two searches closing at similar rates in both directions and direct site races split five to five; the searches' points diverge only after turn 40. The seating report has the table and the reasoning. Swapped pairs remain the rule; a lineup with the two searches opposite each other removes the adjacency term for a screen. The agent brief, docs/status.md, the arms report, and the server's docs/expectimax.md now name turn order rather than the recipient order; the rotating order stays.

Failures: none; every cohort completed all 256 games. The clippy run in the server worktree first failed on the gitignored jwt-test-public.pem fixture, which the worktree did not carry; copying it from the canonical checkout fixed the build and nothing in the code changed.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code.

Predicting opponents next builds

Study adaptation/build-prediction. One function in crates/expectimax/src/v2/predict.rs reads a seat's next build from a hand and the public board: it runs the builders' own greedy target choice on that hand, names the next piece the line completes, the site that line ends up taking, and how many turns the piece and the whole line are from affordable. Three switches use it, each off by default: a denial leaf weight that discounts open sites opponents are heading for, predict.opponents which makes the lookahead's opponent model execute the predicted build instead of the builder's greedy policy, and predict.threat which makes the bargaining space threat key on the predicted target site. Screens on seeds 0 to 15 suggested all three were ahead of the control; the screens were wrong for a reason worth recording below.

Every cohort ran as a mirrored pair, treatment slot 0 against control slot 1 and then the same two searches with slots swapped, deterministic, depth 2, with an ETA and a fast builder, 64 seeds and 256 games per cohort. The average of the two order-paired per-seed contrasts is the mechanism estimate. Development on seeds 0 to 63: denial +0.061 wins per game (95% interval +0.009 to +0.112, runs 9801640c-86d1-4ff9-9b3d-b3e678eff974 and 26be0a08-5536-4ede-a294-64c3b842a62e), predicted opponents +0.043 (-0.007 to +0.093, runs 8a6c5cac-24f6-450f-85b4-7147ba36cbc8 and f00bca4c-d10a-442a-9b71-de1b547e886d), predicted space threat +0.039 (-0.006 to +0.084, runs 3ef05abf-d45e-420d-a200-8a11422b8561 and ed6fda8e-4978-410b-9f86-6d293757d0c1). Confirmations on fresh seeds 64 to 127: denial -0.025 (-0.071 to +0.020, runs c03af686-e267-44b8-830a-49493ea40694 and ca8a57d3-f537-4f95-9442-88f36efd53ad), predicted opponents -0.039 (-0.100 to +0.022, runs bf40e515-3c42-4635-be06-668e61087efa and 7588d518-7364-4dc0-af7c-33b393087c35), predicted space threat +0.031 (-0.024 to +0.087, runs 96b8dc30-943e-45f9-9f81-d73b832fbc70 and ff737612-3d3c-4874-b501-eab99d897b90). Every game completed; no censoring. Only the denial term met its development rule, and it did not survive the fresh seeds, so no switch becomes a default. The report collects the numbers.

Diagnostics: from one observer seat's public knowledge the predictor named an opponent's next completed build in 70% of turns against the fast builder, 53% against ETA, and 28% against another depth-2 search, so it reads builders but not searches. The denial seat lost about 0.1 fewer frontier sites per game than its control in every cohort (1.75 against 1.85 or so), so the term does change the board without changing the result enough to measure at this scale.

The mirrored design was necessary because of a slot asymmetry in the paired ablation lineup. Slot 1 always sits immediately after slot 0 in engine seat order, and on seeds 0 to 63 that order alone is worth a lot: a control (control, eta, fast) cohort split 129 to 85 for slot 0, +0.172 wins per game (95% interval +0.083 to +0.261), while on seeds 64 to 79 the same pair of identical twins split 30 to 29. Single-order treatment-minus-control contrasts on seeds 0 to 63 therefore carry roughly a sixth of a win per game of slot advantage, and past single-order ablation contrasts on those seeds, including the near-zero arms in the ablation report, should be read with that in mind. Screens and this control-control cohort are unregistered diagnostics; the raw JSONL stays under runs/screens-build-prediction/ in the integrating checkout.

No protocol smoke was run: the switches are off by default, the deployable protocol path is unchanged, and the engine cohorts exercise the same seat specification surface the remote seats use. Attribution: GLM-5.3 (baseten/zai-org/GLM-5.3) through opencode.

Robber placement and victim choice

The search shortlists four robber placements by a static score (blocked opponent pips weighted by their public points, plus a victim bonus for hand size and points) and lets the lookahead choose among them. Three switches under SearchConfig.robber change one part of that score each: leader counts only the points leader's blocked pips in full (everyone else's at a tenth), need replaces the victim's hand size with 2.8 times the expected share of the card this seat most needs (from ResourceKnowledge expected hands), and threat weights blocked pips by the bargain threat and never robs a victim with threat below 0.5 while a threatening victim exists. All switches off reproduce the previous scoring bit for bit: 32 deterministic games played by the dev and changed binaries are identical apart from timing. The arena record now carries one compact row per robber placement, so the shortlist's behaviour can be measured; the default search lands on the points leader's best hex (their highest-pip hex, cities double) on 25.4 percent of its robber moves and robs the leader on 42.5 percent, pooled over the six cohorts below.

Unregistered screens on 16 seeds (64 games each) read leader +0.312, need +0.219, threat +0.203 wins per game, each interval excluding zero. All three looked promising, so all three were registered on seeds 0-63 against the unchanged depth-2 control with eta and fast builders, 256 deterministic games each, and every cohort completed:

ArmRunArm winsControl winsContrast (95% interval)
leaderccf05c4f-15a1-4774-a273-40b7d549187312492+0.125 (+0.021 to +0.229)
need9109daab-18d0-4a2a-94e3-a7fa11c94a7a13089+0.160 (+0.057 to +0.263)
threat0ce9ecc0-7374-4c7c-8178-4d99db3ed0e112292+0.117 (+0.022 to +0.212)

The registered rule was met three times, so each arm got a fresh-seed confirmation on seeds 64-127 (256 games each, all completed). None confirmed; all three point the same direction just above zero:

ArmRunArm winsControl winsContrast (95% interval)
leadera722f475-8cc5-4e2a-896b-4167764b2456112103+0.035 (−0.047 to +0.117)
neede214be7c-f184-4840-af3e-e82e7c23ffad10999+0.039 (−0.062 to +0.140)
threat1d943a44-ffb0-459d-b487-733d26d50189110101+0.035 (−0.056 to +0.126)

The robber-targeting report carries the mechanism, the plot, and where the robber actually went. The default stays off for all three switches: nothing is confirmed, the arms share one mechanism so their effects probably overlap, and this is one engine-arena lineup at depth 2.

Failures and limits: the screens were optimistic by roughly 0.1 wins per game, and the development cohorts share their seeds with the screens, so the fresh-seed contrasts near +0.035 are the unbiased estimates. The obvious-hex measurement shows the leader arm raising the share of robber moves on the leader's best hex from 25.4 to 31.8 percent and the share of steals from the leader from 42.5 to 55.6 percent; the need and threat arms move victims, not hexes. The need arm reads expected hands at the root of the decision, so inner-search estimates go stale within a turn; a hand that affords every build falls back to the hand-size bonus.

Attribution: GLM 5.3 (zai-org/GLM-5.3) through opencode.

Robber targeting: the gains were the arena seating term

The confirmations above were read as a small positive direction, but the seating diagnosis published while those runs finished showed that two identical searches in adjacent slots of this arena differ by a seating term of turn-order adjacency, and every robber-targeting cohort seats the arm and the control adjacently. Three swapped pairs were registered under containment/robber-targeting-bias on the same fresh seeds 64-127, control in slot 0 and the arm in slot 1, to cancel the term: the bias-free effect is half the per-seed difference between the same-orientation and swapped contrasts. All 256 games completed in each.

ArmSame-orientationSwapped runBias-free effect (95% interval)Seating term
leader+0.03510834001-571d-439c-83d2-9e31e1d5997b−0.023 (−0.073 to +0.026)+0.059
need+0.039165a28ac-94d3-4ebb-bbdf-989abb243bea−0.045 (−0.086 to −0.004)+0.084
threat+0.035cb91296b-ac8d-4f86-9ad6-5ba4d57af8ec−0.033 (−0.084 to +0.018)+0.068

The corrected reading: none of the three switches beats the default robber shortlist once the seating term is cancelled, and the need rule is measurably worse than choosing the victim by hand size, the only interval excluding zero and on the wrong side. The development-cohort contrasts of +0.117 to +0.160 were the seating term plus the seed selection of the screens, and the fresh-seed contrasts near +0.035 were mostly the term. The switches stay off by default. The robber-targeting report was revised to carry all nine cohorts, the bias-free effects, and the pooled robber-placement measurement. Any future two-search cohort in this arena needs a swapped pair or a null arm, and the dev-seed contrasts of every adjacent-slot arm measured so far deserve the same suspicion.

Failures: the screens overstated every effect by 0.1 to 0.2 wins per game, the development cohorts shared their seeds with the screens, and the first published reading of the confirmations ("consistent positive direction") attributed the seating term to the arms. The run records and registrations stand as filed.

Attribution: GLM 5.3 (zai-org/GLM-5.3) through opencode.

Development-card timing: three switches, all inside the seating term

Study development/knight-timing tested three one-switch candidates for the depth-2 search's development-card decisions, each against the unchanged control in slot 1 with an ETA and a fast builder beside them, 256 deterministic games per cohort. knight_play_value replaces the flat per-knight leaf weight with a largest-army distance schedule (half weight three or more away, full at two, 1.75 at one, 1.25 while holding) and credits a held playable knight with one roll of the production it would unblock; the production a play unblocks was already priced through the afterstate's production term, so the switch isolates the schedule. buy_tempo offers a purchase only when no road, settlement, or city is affordable within the next own turn at current production. hold_knight offers main-phase knight plays only when the robber sits on this seat's best hex, keeping the roll-phase choice, so knights are held for the before-the-roll unblock. Unregistered screens on boards 0 to 15 (64 games each, kept under runs/screens-knight-timing/) read +0.188, +0.156, and +0.172 and overstated all three, as the seating work elsewhere in this log also found.

Development cohorts on boards 0 to 63, single seating: knight_play_value 000e59d2-beb5-4ad4-aeac-4210c7e6d282 (run ef72f172-c6c1-48d5-ab06-b178b4cea9e9) +0.145 (+0.050 to +0.240); buy_tempo 0b22df5c-bcdf-40cd-923e-2e484dae499d (run 647d321b-b370-4abe-b50c-2300404474d7) +0.043 (-0.066 to +0.152); hold_knight 119cbcf2-9791-4dd5-a1f7-c3766b60e44d (run 30038304-768f-4892-8d0c-c734885a92e4) +0.098 (+0.003 to +0.193). Fresh-board cohorts on 64 to 127, still single seating: knight_play_value 20360d5d-f450-4102-8af0-83a3797f7891 (run e79ea358-e2e6-4d09-88e1-2a773c0002c8) +0.074 (-0.021 to +0.170); hold_knight 8f739fd6-446d-4dfc-bd2d-80c838b82ec1 (run f83b1214-86de-4614-ba06-6f97d0f04aba) +0.066 (-0.020 to +0.153).

These five registrations predate the seating rule in my brief: two searches in adjacent slots differ by +0.05 to +0.18 wins per game from turn order alone (reports/arena-seating.mdx), so every one of these contrasts is the size of the term and none is an effect. The knight_play_value arm was re-registered as a swapped pair on boards 64 to 127, control in slot 0: a6371eaf-cfc2-42fb-9bde-0f86b52af778 (run 1d91dbfa-e2ba-4186-9232-ece1102d4557), +0.066 (-0.022 to +0.155) slot 0 minus slot 1. Combined with the forward cohort: seating-corrected effect +0.004 (-0.061 to +0.069), seating term +0.070 (+0.005 to +0.136), consistent with the +0.051 null on these boards. The mechanisms bite (the tempo rule halves purchases to 1.54 cards per game against 2.55 and advances the first city by a turn; holding knights forgoes a third of knight plays and half the army awards) without winning. No default changes; the switches stay off and documented. The report carries the table and the plot.

Failures and notes: no failed or incomplete games in any cohort (256 of 256 each). The first session of this work stopped on a provider error after the first cohort; no run was affected, and the remaining cohorts ran after the restart. The five single-seating registrations stand as filed even though their decision rules read two of them as "supported"; the seating correction supersedes that reading, as it did for the endgame and robber arms. The harness engine summary now aggregates knights_played, army_awards, and the first city turn from the arena's per-game records (harness/engine.py): the study's registered diagnostics had to be visible in the retained run summaries, and the change is additive with defaults so records from older binaries still parse.

Attribution: Kimi K3 (moonshotai/Kimi-K3) through OpenCode.

Hand-size risk: five arms, all inside the seating term

Study risk/hand-management tested three discard-risk hypotheses as one-change arms of the depth-2 search against the unchanged control in slot 1, with an ETA and a fast builder beside them, 256 deterministic games per cohort on boards 0 to 63. spend_down (server branch research/risk, commit 9980af2) adds bank trades and roads chosen only to shed cards when the hand is over the limit; discard_projection ranks each discard by the build deficits of the kept hand plus the expected production before the next own turn; the third arm sweeps weights.hand_risk to 0, 2, and 4 with the risk inclination fixed at 0.5. Unregistered screens on boards 0 to 15 (64 games each, kept under runs/screen-risk/) read +0.156 to +0.250 for the five arms and +0.219 for a control-against-control pair on the same boards, and a 64-to-79 control pair read +0.016: the screens measured board luck, not the arms.

Development cohorts, candidate in slot 0: spend_down 47486c2e-9555-4c4f-a444-7a0097dce271 (run 901f81f4-922e-4de7-8269-f78f342f362b) +0.066 (-0.020 to +0.153); discard_projection d09eaccb-ab3b-4d1f-9b2e-904cf4cf89e9 (run dd2a5d1f-f204-4389-9e89-5acb6f97932f) +0.125 (+0.021 to +0.229); hand_risk 0 a78e5220-68c6-4726-a1cc-3a6849ac19f6 (run 2bae826e-cea8-4de8-b39f-a72efcdebf55) +0.074 (-0.024 to +0.173); hand_risk 2 e79ff8a3-f22e-4590-b9cc-67e17a2b0c20 (run 2f8fae6f-5212-4cde-801b-ffd9be58445a) +0.129 (+0.039 to +0.219); hand_risk 4 1a506239-e401-4340-a08c-8c948248fc30 (run af6fcb03-64fb-4aaf-9639-d1ccaad5f1a3) +0.078 (-0.028 to +0.184). All 256 of 256 games completed in every cohort.

These registrations predate the seating rule in my brief, and every contrast is the size of the turn-order term on these boards. The strongest arm, discard_projection, was re-registered as a swapped pair on the same boards, control in slot 0: 945e89c0-4928-421b-82d3-f003526cb7ed (run 43215190-c80d-44e6-a8d5-e922c344392c), +0.184 (+0.086 to +0.281) slot 0 minus slot 1. The seating-corrected effect is -0.029 wins per game (95% interval -0.073 to +0.015) and the term measured by the pair is +0.154 (+0.064 to +0.245), matching the nulls in the seating report. The projection switch does not pay, and the other four single-seating contrasts are consistent with zero rather than measured effects; the weight sweep is flat, so hand_risk stays at 1 and both switches stay off. The diagnostics confirm the mechanisms fire: removing the term raises discards from 9.2 to 10.0 cards per game and turns ended over the limit from 1.0 to 1.4, quadrupling it cuts both, and spend_down adds half a bank trade per game. The report carries the table, the diagnostics, and the plot.

Failures and notes: no failed or incomplete games. This session stalled for over an hour after the third cohort and was restarted; no run was affected. The screens shared their boards with the development cohorts and overstated every arm, as the knight-timing screens did. A protocol smoke of both switches (experiment e0f2620a-a77a-4bb8-8a65-f1a7358333b7, run 1b8775f4-f51c-45f2-b3b8-ee30590aee96) completed four of four games; plumbing only. The arena now counts turns_over_limit per seat and the harness aggregates it; the arena change also resolved a missing git-ignored JWT test fixture in the fresh server worktree (openssl pkey -pubout regenerates it). Server worktree setup needed cargo on PATH from ~/.cargo/bin.

Attribution: Kimi K3 (moonshotai/Kimi-K3) through OpenCode.

Road blocking and the longest road

Three mechanisms from the expansion brief, tested one at a time under expansion/road-blocking against the unchanged depth-2 search with an ETA and a fast builder, all engine-arena development tier on deterministic paired boards. Each switch defaults to the unchanged behaviour, and the default configuration replays the base build bit for bit on a two-seed check. The arena's seat records gained road diagnostics: awards gained and held at game end, final trail length, and per-road counts of builds that raise the leading expander's distance to its best site.

Both win contrasts below were first measured with the candidate in slot 0 and the control in slot 1, and both came out the size of the turn-order seating term between two adjacent searches (the seating report: +0.10 to +0.18 on boards 0 to 63, about +0.05 on boards 64 to 127). The corrected readings come from the registered swapped halves on boards 64 to 127 under expansion/road-blocking-swapped, where the control sits in slot 0: the effect is half the difference of the two contrasts and the seating term half their sum (analysis/road_blocking_swapped.py). The single-seating numbers were the seating term, not screening luck; corrected, both switches are consistent with no effect, and the defaults stay off.

Cutting the leading opponent's expansion path. A new leaf weight opponent_expansion charges the leading opponent's best reachable site, discounted by its road distance, over the remaining rolls; candidate roads are credited for the same quantity, so a road that cuts the opponent's shortest path is enumerated and valued. Single-seating numbers, candidate in slot 0: a 16-seed screen gave +0.250 wins per game, the registered cohort 8124d197-95fd-4a7f-a889-65138713cc70 (run 274e5330-a5e4-4270-952b-adc3b86a4cce, boards 0 to 63) gave +0.168 (95% interval +0.070 to +0.266), and the confirmation 36f5f80e-352f-4062-b962-fbde755828be (run 2fd1cb5e-f0be-4ef1-b216-7a97973b9239, boards 64 to 127) gave +0.031 (−0.078 to +0.140). The swapped half 248620fd-8baa-49ab-aee8-d545d8380770 (run c6201b2c-9c97-499d-a23d-8954e60f0820, same boards, control in slot 0) gave +0.016 (−0.080 to +0.111). Corrected effect: +0.008 wins per game (95% interval −0.053 to +0.069); the pair's seating term is +0.023 (−0.059 to +0.106). Any real effect of the term is under about 0.07 wins per game at depth 2 on these boards. Diagnostics on the development cohort: the candidate built 5.12 roads per game against 4.68 and held the longest-road award at the end in 55% of games against 39%; blocking builds stayed rare (0.078 against 0.035 per game) and the denied site value was small. The term also costs about a third more decision time (314 ms against 232 ms per decision on the confirmation).

Committing to the award only with the road production for it. road_contention_gate 1.0 restricts the contention credit, in the leaf and in road enumeration, to seats tying or leading the table in brick plus lumber production. Single-seating numbers, candidate in slot 0: a 16-seed screen gave +0.062, the registered cohort fac6a2ec-dc86-4f18-affa-bc50338e88d8 (run 95d0f056-afc9-4a7b-b291-c864e0f93a29, boards 0 to 63) gave +0.113 (+0.027 to +0.200), and the confirmation 74e56afc-84ef-4910-af5f-725348e0f954 (run ee7d78c7-ec04-4d43-a01e-57af22420d70, boards 64 to 127) gave +0.031 (−0.060 to +0.122). The swapped half 6503cc10-9a5f-4a0d-b509-71cb4fcd0f9d (run 86fa73ec-aa37-40fb-a23c-4fefb28fcaa3, same boards, control in slot 0) gave +0.039 (−0.057 to +0.135). Corrected effect: −0.004 wins per game (95% interval −0.061 to +0.053); the pair's seating term is +0.035 (−0.039 to +0.109). The gate does what it says: the gated seat held the award at the end in 39% of games against the control's 48%, but the awards given up do not cost wins, and the races declined do not gain them.

Breaking an opponent's longest road with a settlement. Already present: every legal settlement is a root candidate, and the leaf credits the lost award through the opponent-points term. A synthetic probe (seat 1 holding a five-road trail, seat 0 able to settle on it) has the break ranked first of seven candidates, with the trail cut to at most 3 and the award removed. No switch or cohort was needed; crates/expectimax/tests/road_break.rs pins the behaviour. A road toward a not-yet-reachable break vertex is still only weakly enumerated; that gap is a separate hypothesis.

Failures: the first run of the gate cohort, 12fb1efb-23d5-4a32-ad87-ed63fb3efcd5, was interrupted after 11 of 256 games when its controlling shell was killed; it is filed as interrupted and the cohort was rerun from scratch as 95d0f056. The partial games were not pooled. Separately, the new arena award counter I added fired on every award event that carried a road holder, not only on gains, and shadowed the army counter on the same events; the win records, the held-at-end flags, and the trail lengths are unaffected, but the per-game award-gain counts quoted above from the four slot-0-candidate runs are inflated. The merged fix counts both awards in one arm with a change guard, and the default configuration was re-verified bit for bit against the pre-merge build afterwards. My first reading of the development cohorts blamed screening on shared seeds; the swapped pairs show the seating term was the real account, and that reading was wrong.

Attribution: Kimi K3 (baseten/moonshotai/Kimi-K3) through OpenCode.

Development-card timing under the learned leaf

Study development/timing-tables re-ran the three development-card timing switches of development/knight-timing against the tables baseline (v2:{"depth":2,"leaf":{"tables":".../hex-portfolio-main.bin"}}), which buys about 4.9 development cards per game where the hand-written leaf bought 2.6, so the purchase and play timing of cards could matter more here. Every contrast is a registered swapped pair on the same 64 boards (256 games per half, four rotations, deterministic, six threads): half A seats the candidate in slot 0, half B in slot 1, the effect is the per-seed half-difference of the two slot-0-minus-slot-1 contrasts and the seating term their half-sum (analysis/seating_pair.py). Stages: development (L1: ETA and fast builders, boards 0-63, matching the hand-leaf cohorts), confirmation (L1, fresh boards 800-863), population (L2: a third tables search in slot 2 and ETA in slot 3, boards 800-863). One server fix was needed first: the blended leaf dropped the knight_play_value flag, so the switch would have been inert under the blend; the blend now evaluates the hand-written terms with the flag (crates/expectimax/tests/development.rs pins it, docs/expectimax.md corrected).

Mid-study the orchestrator's blend screen measured the full blend (hand 1.0) at -0.207 wins per game against the tables alone and the quarter blend at +0.074, so leaf-term arms moved to hand 0.25. The full-blend knight_play_value registrations for the confirmation and population stages were withdrawn before running (experiments 00d8c63d-5ed9-47ef-aacf-c8efdfae7288, e5715fe9-b44b-4273-a3b0-64ae25ca1b7e, e4ddbc81-32bb-4a70-b17f-38958ae86a9d, 2d22c801-4004-4baa-9551-1c2defee2a0b; never queued) and the same arms were registered on the quarter blend. The development-stage full-blend pair was already running and is reported as what it is.

Results, candidate minus control after the seating correction:

SwitchStageExperiment A / BRun A / BEffect (95% interval)
buy_tempodevelopmentb6b12fdd-9cff-47c9-9140-7a6330feabf4 / 7385ffd6-017d-41dc-9cb9-bdbfe192e1b5f97d8683-79fd-4109-a1ef-7b106f8b3956 / 176f12e2-d391-4402-9b7a-7fa5cc470570-0.061 (-0.115 to -0.006)
buy_tempoconfirmation750b7ebc-9428-492f-9b5f-b2d4de9d992a / be7df6ce-1a7c-4943-bf38-fd6b8ae5d5133292674f-249b-44d7-967c-5481ac3045f1 / a86a5e49-0165-4c3d-ac6a-1a301a4cc496-0.006 (-0.070 to +0.058)
buy_tempopopulationafb09868-6c8a-416c-bfbf-1d39fd4b3536 / 5e75db43-2be3-4c8c-ab00-f7346fed7297ea42e55d-da88-4794-a3b7-08c580473ee8 / 64bbd775-5639-4bfe-bd5f-b0bcb0cef057-0.053 (-0.110 to +0.004)
hold_knightdevelopmentb7467b5e-5b69-4bf8-b7b5-76ae177131f7 / 75774a6d-7398-4336-8711-5bdba1e206fcc5ffb6cf-45d1-48a1-a2d8-3b2fa3be7666 / 4a18f4f2-f9cf-4f33-97e6-26e471bf6654-0.029 (-0.071 to +0.013)
hold_knightconfirmation4d8b27cc-edc5-483b-94e6-f543e97eca5b / 56cb999e-5a1c-4852-b06b-74d93f91c69230180b9b-3de5-46d8-ae0e-30e259e21c4d / e6c5fbd4-7f3d-4639-a41e-caac6e6c9022-0.025 (-0.076 to +0.026)
hold_knightpopulation6fe05d29-9d2a-405d-8e5b-59138ecb27e8 / b21f1bdb-e49a-4025-9668-82580c8ba176873ab9ef-b922-498b-84d4-17f28380a5fa / 08636046-1590-4736-be1a-7b1fe0b5e018-0.051 (-0.098 to -0.004)
knight_play_value (quarter blend)development80e5bceb-5b8d-4428-9292-33c8d378e709 / 858e2a4d-452b-4c12-8ba2-8bb88c5897e7d493c5b4-e8fa-4e07-84f3-83d995d73d53 / 8a8b0ffb-2e38-4252-913f-06496c939ff0-0.002 (-0.031 to +0.027)
knight_play_value (quarter blend)confirmationc9a94c3d-d7c8-4087-8b60-7289e0094655 / 941be1a7-0882-4bfe-8441-face9cd8b6fc8263d242-7450-4e05-a2c3-7483c2d527a2 / e3fc4a9c-0e3b-4700-9dfe-1bd58c317c26+0.000 (-0.028 to +0.028)
knight_play_value (quarter blend)population8e35acce-ebd3-4f7a-a07e-50327018d5fb / 274d88a0-2692-4784-9593-0d949b05693aa6afd7a8-248a-4e0f-a4db-b2ca75d8ee31 / 5046ec2d-3835-42f5-9fc0-3ea829bbafeb+0.004 (-0.026 to +0.034)
knight_play_value (full blend)development89dd235d-c117-4688-a355-eb1cc6ad541b / c9ba1dac-5ef3-45ed-ba97-d91a9e5c5c2bb41de3cf-c42a-4b0a-b37d-065d7c1e1c1b / 41c8da11-f31a-440a-a1ee-61737f4439c7+0.109 (+0.055 to +0.164)

Every half completed 256 of 256 games; no failed, incomplete, or censored games. Reading by the registered rule: buy_tempo is refuted on the development boards and inconclusive on the fresh boards, hold_knight is inconclusive on L1 and refuted on the population lineup, and knight_play_value on the quarter blend is inconclusive everywhere with intervals inside plus or minus 0.035. After-the-fact pooling over the 192 seeds of all three stages: buy_tempo -0.043 (-0.076 to -0.009), hold_knight -0.035 (-0.062 to -0.009), knight_play_value on the quarter blend +0.001 (-0.016 to +0.017). No pooled L1 effect was positive, so the extension stage (boards 864-927) was not registered. The one positive reading, +0.109 for knight_play_value on the full blend, repairs a configuration that is itself 0.2 wins per game weaker than the tables alone; the shaped schedule earns nothing where the hand terms carry only a quarter of the value. Under the hand-written leaf all three switches corrected to about zero (reports/knight-timing.mdx); under the tables the two candidate rules are measurably harmful, because the tables already buy and hold cards well: the tempo rule cuts purchases from about 4.0 to 3.2 cards per game and loses, and holding knights forgoes about 0.2 plays and a fifth of army awards per game and loses. No default changes. The report has the diagnostics and the browser section.

Failures and notes: my first debug-mode cargo test run exceeded its shell timeout and was stopped; the release-mode run passed (76 tests). Stopping my run queues at the blend update left three in-flight tournaments without their queue log lines, but the harness had already detached them and wrote complete records (runs 3292674f, a86a5e49, 30180b9b, all 256 of 256); no run was lost or rerun. The machine was shared at load 85 to 160 all day, so wall times (75 to 120 minutes per 256-game half at six threads) say nothing about search cost; mean decision times come from the run records. All twenty runs are archived under artifacts/timing-tables/ with receipts in records/artifacts/. python3 analysis/timing_tables.py recomputes every number and the report's plot asset from the retained runs.

Attribution: Kimi K3 (moonshotai/Kimi-K3) through OpenCode.

Hand management under the learned leaf: nothing pays

Study risk/hand-tables retested the three discard-risk mechanisms of risk/hand-management with the learned n-tuple tables as the search leaf, following the program's three-stage swapped-pair design (development on seeds 0 to 63, confirmation on seeds 800 to 863, population with a third tables search in slot 2 on seeds 800 to 863, extension on seeds 864 to 927 only when the pooled builders reading over 128 seeds is positive with its interval's lower bound within 0.03 of zero). Every pair's decision rule: the seating-corrected effect's 95 percent seed interval excludes zero in the hypothesized direction, the other way, or neither. The baseline seat is v2:{"depth":2,"leaf":{"tables":".../hex-portfolio-main.bin"}}; each candidate adds one switch. The arena gained two recording-only seat counters on server branch research/hand-tables, hand_at_roll_sum and hand_at_roll_count, so the mean hand size at the roll is measurable from the games records.

Hypotheses: spend_down (over the limit, also consider bank trades and roads chosen only to shed cards) and discard_projection (rank discards by the kept hand plus expected production before the next own turn) each win more games than the unchanged tables search; and removing the leaf's seven-risk pricing (weights.hand_risk 0 against the default 1) wins more because the tables already price discard exposure. The risk term is inert under the tables alone, so its arm sits on a blend in both seats. The blend choice changed mid-program: the six registrations on the full blend (hand 1.0) were withdrawn before running after the orchestrator's screen measured the full blend at -0.207 wins per game against the tables alone, and the arm was re-registered on the quarter blend (hand 0.25). Withdrawn, never run: 8482a56b-7a41-430f-9d4f-19dcfed08e3a, 8dfff424-e403-47c4-89ec-029b203d89e4, 9249ab83-c0b0-485a-a08e-e734b82b4cdc, 198621cf-57ef-4e5b-a892-3989fe65650c, d2f026f6-aaaf-4173-ac65-f39e52d27a2d, a1d96405-f132-45d1-825f-2117844deea7.

Registrations and runs, half A then half B per pair, each 256 of 256 games completed at six threads unless noted:

  • spend_down, development 0-63: a955b267-9ff0-40c1-82b7-4aa4edc9ff6e (run 88f22330-1c27-4be3-a7e3-2eb79f205c20), c492642c-4347-480a-b2ff-29b8f21578ab (run f2a31547-7285-4186-9c53-60d962f01ead). Effect -0.016 (-0.065 to +0.034), seating +0.031.
  • spend_down, confirmation 800-863: 36feacf1-4e3e-4a42-95dc-c04e5c876c51 (run 11b5c63b-e5d9-4faf-ae82-3ec1310fc9b5), f9d49130-b3c8-45a6-a08e-6d5bb0c61073 (run 8d0a219e-73f3-4e2f-8e83-1ba173a4d9b6). Effect +0.004 (-0.048 to +0.055), seating +0.070.
  • spend_down, population 800-863: 25cf8f50-1d9c-4327-bd46-74773339355a (run 8a032ed5-7e98-45bf-9282-7dab74eb1782), b05633ce-e0f4-472b-a07c-5aa348f292af (run 794969fe-edda-46cc-a755-a7c7179aeacf). Effect -0.047 (-0.098 to +0.004), seating -0.008.
  • discard_projection, development 0-63: 3937f009-a9ac-4402-941d-5e549525e838 (run d2933fc8-9955-41b9-a292-9c344a821bd4), 30413802-3438-4da7-801a-1930b12b8933 (run 881f42b8-03a7-42ab-b342-8a7118ef9919). Effect +0.006 (-0.033 to +0.044), seating +0.068.
  • discard_projection, confirmation 800-863: cd34b338-7485-4ff9-bc83-f401c08bc6e8 (run 96aaa590-93a9-4c59-89a8-9017995081ca), 45db85c1-1e68-4d90-a82e-29e19ae2acf8 (run c18fccae-57cd-4e53-ad4a-e8e4d5825f29). Effect +0.016 (-0.028 to +0.059), seating +0.086.
  • discard_projection, population 800-863: 107448ed-68a4-4ee9-876d-08c78ba7d576 (run 50ca4d19-152d-4863-9407-417c3c42c51c), 5330c9c8-a119-446e-8ed6-bfdbd20d2f5b (run 55ef800b-f8d8-431d-8870-4132723c79dd). Effect +0.000 (-0.029 to +0.029), seating -0.020.
  • discard_projection, extension builders 864-927 (triggered: pooled builders +0.011, lower bound -0.018): 3c319637-e3da-420d-a9c8-381a469036cf (run f4462a76-5bdf-419f-a926-7b487b7f02be), 8dad3d8b-5636-41d1-8c19-bf02370cbf42 (run b6a1c336-028d-4f22-b0b2-41f95dc29203). Effect +0.014 (-0.018 to +0.046), seating +0.123.
  • discard_projection, extension population 864-927: 316cb7a7-5b95-42bf-ade4-f7356f9ef6e1 (run 0ac1cd70-24da-4ec9-a76a-e070f9ca37e5), dcd15bb4-deb1-4726-a63b-da6e0e83120d (run 29d0fc33-4113-4c67-8b5a-b884ce104e55). Effect -0.004 (-0.034 to +0.026), seating +0.066.
  • hand_risk 0 on the quarter blend, development 0-63: 826a6d8e-1b8a-4797-addc-f5454fa4d954 (run 2275903a-1549-44e3-8cbb-2a53b16ea8fa), 525aa23e-6191-4ae8-aabf-b1082da41b2d (run 7ce522da-775b-43e0-a051-9e96ef3d8c18). Effect +0.004 (-0.043 to +0.051), seating +0.094.
  • hand_risk 0 on the quarter blend, confirmation 800-863: dce23ad1-0f66-417e-8a07-56fc52e26992 (run 0808617f-771f-43d9-b83b-ad4eb2a45e54), 72f45c36-9c85-419c-b41a-de7f2d761eec (run 96902436-9d8c-44ac-8233-e722730e2c02). Effect -0.018 (-0.067 to +0.031), seating +0.045.
  • hand_risk 0 on the quarter blend, population 800-863: 1547ca49-dffd-4e2e-bd52-41934ae1180f (run 4c417894-9fd2-4243-b477-c0750a5a86d0), 93304090-43f2-49e9-b30a-8cfc6bbe9d45 (run fce730d6-75bc-47a7-826b-eb7e179ebc79). Effect +0.012 (-0.040 to +0.063), seating +0.062.

Pooled readings, all after-the-fact pooling: spend_down -0.006 (-0.042 to +0.030) over the 128 builders seeds and -0.020 (-0.049 to +0.010) over all 192; discard_projection +0.012 (-0.010 to +0.034) over the 192 builders seeds, -0.002 (-0.023 to +0.019) over the 128 population seeds, +0.006 (-0.009 to +0.022) over all 320; hand_risk on the quarter blend -0.007 (-0.041 to +0.027) over the 128 builders seeds and -0.001 (-0.029 to +0.028) over all 192. Decision-time ratios against the control: spend_down 1.19, discard_projection 1.00, hand_risk 0.99. Every registered rule lands on inconclusive, and no arm meets the +0.03 browser threshold; defaults are unchanged. The mechanisms still fire: spend_down ends 0.40 turns per game over the limit against the control's 0.47 and discards 4.7 cards against 5.1, and removing the risk term on the blend raises discards from 5.96 to 6.09. Under the tables the control holds 4.8 cards at the roll, discards about 5 per game, and ends 0.4 to 0.5 turns over the limit, against about 9 discards and 1.0 over-limit turns under the hand-written leaf: the tables were trained with the same discard rule and the play they induce rarely reaches eight cards, so the situation these mechanisms price comes up half as often. The report has the tables, diagnostics, and the browser section.

Failures: the first attempt at the development spend_down half A, run ac02ff67-a456-42ba-bc81-9434c69054d6, stopped after 3 of 256 games when the queue driver I had launched without session detachment was killed with its shell; it is filed as interrupted, its games were not pooled, and the cohort was rerun from scratch. A second operational mistake: one queue worker started from the canonical checkout instead of the worktree and failed at preflight before playing a game (no run created); it was restarted correctly. The six withdrawn full-blend registrations stand as filed with no runs. No tournament lost or censored a game. Three unregistered 8-game smokes of the seat specs (plumbing only) are kept under runs/smoke-hand-tables/. The machine ran at a load of 125 to 165 all day from the ten-agent program, so absolute decision times are inflated and only within-run ratios are quoted.

Attribution: Kimi K3 (moonshotai/Kimi-K3) through OpenCode.

Bargaining switches under the learned leaf

Study bargaining/tables-arms asks whether each bargaining mechanism still wins games when the depth-2 search evaluates with the learned n-tuple tables (hex-portfolio-main.bin). Each arm is the tables baseline with one switch off: bargain: false (all off), threat_pricing: false, counters: false, asks: false, and accept_asks: false (a stubborn seat that refuses asks). Every hypothesis was registered in the direction "the arm loses to the unchanged baseline, so the mechanism helps under the tables". Every contrast is a swapped pair on the same seeds: half A seats the arm in slot 0 and the control in slot 1, half B the reverse; the effect is the per-seed half-difference of the two slot-0-minus-slot-1 contrasts and the seating term their half-sum (analysis/bargaining_tables.py analysis/bargaining_tables.json). Stages: the population lineup L2 (a third tables search and an ETA) on seeds 800-863, then the builder lineup L1 (ETA and fast) on seeds 0-63 and 800-863, 256 deterministic games per half. The decision rule for every pair: all games complete, and the effect's 95% seed interval excludes zero below (support), above (refutation), or neither (inconclusive).

A traced screen on 16 boards (runs/screens-bargaining-tables/, analysis/bargaining_thresholds.py, a screen, not a finding) checked whether the bargaining thresholds, which are fixed numbers in the hand-written currency, are mis-sized for the tables. They are not: one swap moves both leaves by 30 to 35 units for a proposal the lookahead likes and 9 to 10 units of threat pricing on an accept, and the plain margin blocks about a third of liked proposals under both. No server change was made.

StageArmHalf A experiment, runHalf B experiment, runEffect (95% interval)Seating term
L2 800-863all offe4610302-84a7-4cbf-9153-8c1d817d1bd3, 3b0c453e-247e-4f3d-a21b-1967ffce90e64f4b8a5f-4437-4594-b85d-c6e06ac9a55e, 4a6e9f09-a582-4ab4-8e74-b939a1ec8959−0.098 (−0.152 to −0.044)+0.035 (−0.030 to +0.100)
L2 800-863threat pricing off717eae4e-b949-42fa-a1ab-3c086bdc8f3c, ae2cc3ea-d01f-4b62-8e52-91310dca1e937c9ffb4c-ce6a-4064-98d8-817702445f8d, 0686a9ad-9da2-43b8-96b1-892b672697f2+0.014 (−0.041 to +0.069)−0.049 (−0.116 to +0.019)
L2 800-863counters off4fd7a980-53a4-40f3-84ee-8b9b86bf3761, 999d8a97-b681-4dd8-b7ec-6142e8e4e2f975000b6c-b0ba-4b33-8086-24dc58e534fa, ebb5da5b-0763-423d-aaf7-13e39128602f−0.119 (−0.176 to −0.062)+0.010 (−0.056 to +0.075)
L2 800-863asks offe2d48aa8-cdcc-4123-82de-2d3b8fac502f, 13ced608-cba8-4a08-98aa-c744d6ee048bb0dbf209-97de-4881-b7ae-e8d1b7381b3d, 461c113a-3fad-4cc3-9aea-b59af3d14d21−0.037 (−0.093 to +0.018)+0.033 (−0.034 to +0.100)
L2 800-863stubborn (refuses asks)b77486f2-da1f-4b29-b5b7-7843de5ca87d, e083bd7f-bb66-4474-aceb-bd463d0d175aab3a7230-393a-4b82-889f-d516413afebf, 62529417-a975-4042-bdbf-531f2bb24acf+0.008 (−0.034 to +0.050)−0.066 (−0.138 to +0.005)
L1 0-63all off937e19ae-2569-4472-9ea6-d964769aaaf1, bd2986e6-c83e-4289-966f-ec1fcb9320826c92dd71-3397-4c84-abaa-fe37371bd8e7, c826e45a-6212-4187-8895-7ca24848d802−0.146 (−0.212 to −0.081)+0.049 (−0.027 to +0.124)
L1 0-63threat pricing off13fc34cb-16ff-41ca-a87e-7b212e0461d9, 623e109e-7040-43e6-b20b-3e371e17fccb9b87ce41-b6ec-4985-ab9e-52d3b2ead900, d418eee0-8e53-4392-99ac-88b14a68d8f5−0.023 (−0.091 to +0.044)+0.125 (+0.053 to +0.197)
L1 0-63counters off335728e0-245f-46e4-b345-8121f246dc44, 6cb1ec79-c371-4551-90b1-3cc6cdc8afd9d5d25a63-fef6-44ca-9a4e-48c3251c14a4, 86fcba2e-60a9-4422-9c43-467c08ceeee7−0.096 (−0.146 to −0.046)+0.092 (+0.013 to +0.171)
L1 0-63asks off1c2e9a7f-fdfd-4385-9cb3-cc136ee01eeb, e2a6bec5-ba94-4d34-a885-fd2274d6579e1a34b4e4-0905-4d0a-a8b3-913c4a12a0f8, 55c5fe2f-b5f5-477f-a03b-0ae62bfe9005−0.076 (−0.138 to −0.015)+0.064 (−0.011 to +0.139)
L1 0-63stubborn (refuses asks)c9f1ac2b-d49c-41b7-9782-29359c0382f4, 05e28cbc-1536-4686-9328-cd96ce2039609fe81446-d3fc-4434-99be-f0963253c955, 5b736f84-6966-4a57-8c08-07e4068eaa95+0.000 (−0.022 to +0.022)+0.125 (+0.037 to +0.213)
L1 800-863all off1d79b24f-6236-48e4-b2b1-0b0b5f53202d, 2f70d1e1-7a04-4fbc-8b8a-6ae08c6caec595171f06-d8fc-4ffa-b168-e277748022fe, 74d0bbf6-d970-4a06-868c-327371e6a801−0.184 (−0.254 to −0.113)+0.043 (−0.025 to +0.111)
L1 800-863threat pricing offe07a3371-6b64-4823-9c7f-e0bedec181cb, 7c5fd2a2-bab8-460d-9212-f789b0f85dea2729dfb5-b152-4d3a-b5bd-b89e7b9374c2, 13bfb4d3-0987-44d2-acd1-e6dc73252eaf+0.012 (−0.048 to +0.071)+0.059 (−0.031 to +0.148)
L1 800-863counters off598fb4ba-3c1a-469c-9668-ecef054cec53, 97c3c83b-db34-4819-96b1-3826fb67ca0160dabae0-77de-4783-8ef0-60c9f81fd7cb, c90421ef-083e-4773-9406-a206105f3f43−0.092 (−0.159 to −0.025)+0.064 (−0.003 to +0.132)
L1 800-863asks off37ca0f2e-c5fe-4c7f-aa8a-453a277bfbf7, 7e86a611-6e58-4e15-b5d2-2c301892d61867853977-498a-480d-a2ad-c545e3847b1f, 4239504d-3edd-4fd7-9a3a-65ec8d554828−0.141 (−0.202 to −0.080)+0.082 (−0.004 to +0.169)
L1 800-863stubborn (refuses asks)ff90bfd6-bab6-4ae2-8ee4-e766cdff7e0e, 1d58fc87-a22f-4ab7-8f9f-abdc9c7589f5e390230c-9b4e-421d-9b57-eeacf8ef2d76, 1b356578-dee4-4d74-a840-5d039f78c434+0.018 (−0.009 to +0.044)+0.064 (−0.033 to +0.162)
L1 864-927stubborn (refuses asks)37f466ed-4afb-43d7-8637-46246de0cacd, a92fb89a-cbc7-43ed-acfc-b7ff2874183c95b0122b-407f-4210-94b8-c1ba0a4e508d, e5648fda-d914-46c8-99dd-c2871af55225+0.000 (−0.023 to +0.023)+0.125 (+0.022 to +0.228)
L2 864-927stubborn (refuses asks)cf71fa9c-24c7-4079-89d1-23d0d9170f74, 51cef0e8-e02c-4265-9966-723120f99a70f378d100-fe86-49ae-9f21-7bd139bdf821, 875967b0-2786-44f4-abfe-8366aa88cc30+0.004 (−0.035 to +0.043)+0.055 (−0.015 to +0.125)

Interpretation. Counters and asks still win games under the learned leaf and the whole bargaining package is worth −0.143 wins per game (95% interval −0.180 to −0.106) pooled after the fact over 192 seeds; counters carry most of it (−0.102, −0.136 to −0.069, pooled after the fact), asks about half as much (−0.085, −0.119 to −0.050), and threat pricing and the stubborn seat nothing. The builder-lineup pooled effect of the stubborn arm over 128 seeds, +0.009 (−0.008 to +0.026), met the extension rule, so its pairs on seeds 864-927 were registered in both lineups (37f466ed-4afb-43d7-8637-46246de0cacd and 95b0122b-407f-4210-94b8-c1ba0a4e508d at the builder table, cf71fa9c-24c7-4079-89d1-23d0d9170f74 and f378d100-fe86-49ae-9f21-7bd139bdf821 at the population table) and run; the builder-table pair read +0.000 (−0.023 to +0.023) and the population pair +0.004 (−0.035 to +0.043), for +0.006 (−0.008 to +0.020) over 192 builder-table seeds and the same over all 320: no effect. "Within 0.03 of zero" was read as the interval edge nearest zero lying within 0.03 of it. Bargaining costs 55 to 60 percent more time per decision under both leaves, most of it from counters; asks and threat pricing cost under a tenth. No default changes and the server is unchanged. Report: Bargaining switches under the learned leaf.

Failures and handover. No game failed, stalled, or was interrupted; every cohort completed 256 of 256. The study was started by Claude Fable 5.1, which registered the stages, wrote the analysis, ran the threshold screens, and started two queues; it stopped on a usage limit with three of the five L2 pairs and four of the five L1 0-63 pairs complete. Its first queue was stopped at 19:42Z on 2026-09-11 to split the list into two queues; the cohort it was running (4fd7a980, run 999d8a97) finished on its own and was not rerun. Claude Opus 5 took over, committed the uncommitted records, ran the remaining cohorts two at a time from 04:51Z on 2026-09-12 (a third queue over the same list in reverse, and two more for the extension, sharing the skip rule so no cohort ran twice), registered the extension, archived every run with a verified receipt under records/artifacts/, and wrote the report. Decision times are wall times on a machine shared with other tournaments; only the ratio of an arm to its control within the same games is interpreted.

The arena binary was built from server branch research/bargaining-tables at 94063bb, a trace-only change by Claude Fable 5.1 that records answers to offers and replies to counters under --trace (play unchanged on a 64-game screen). The handover described the server as unchanged, which holds for play but not for the branch; the branch is pushed and not merged into server dev. Every cohort ran after 2026-09-11 in UTC and finished on 2026-09-12; the entry stays in this day's log with the rest of the learned-leaf program.

Attribution: Claude Fable 5.1 (claude-fable-5-1) through Claude Code (registration, analysis, threshold screens, first half of the cohorts); Claude Opus 5 (claude-opus-5) through Claude Code (remaining cohorts, extension, report, filing).

The opening planner under the learned leaf

Study opening/planner-tables (agent opening-tables) tested whether the draft-aware opening planner, calibrated to the hand-written leaf, still matches the search's own placement now that the search evaluates with the learned n-tuple tables, and whether the planner's calibration weights matter under the tables. Every contrast is a swapped pair on the same seeds (candidate in slot 0 in half A, in slot 1 in half B, effect half the difference of the two slot-0-minus-slot-1 contrasts, seating term their half-sum), on the tables baseline seat v2:{"depth":2,"leaf":{"tables":"/home/keshav/settlers/research/artifacts/ntuple/hex-portfolio-main.bin"}} with the arm's one switch added. All 26 registered runs completed 256 of 256 games; no incomplete, invalid, or unplayed game.

Unregistered screens of the four weight arms, swapped halves on 16 seeds (928-943, which no stage uses): specialize 0.5 read −0.062 (−0.250 to +0.125), scarcity 0.0 read −0.055 (−0.201 to +0.092), coverage 0.4 with balance 0.5 read −0.023 (−0.144 to +0.097), expansion 0.5 read −0.055 (−0.185 to +0.076). Screens are screens; I took coverage/balance (best point estimate) and scarcity (tied with expansion on the mean, wider upper interval, and the clearer calibration story) through the stages and left specialize and expansion screened.

Arm opening":"search", effect search minus planner. Development L1 (boards 0-63, eta and fast in slots 2-3): experiments 47837719-ebd2-438d-a9eb-a1ad951c1ad1 (run a9813bf7-dc0d-498b-b620-d948c6174b55) and cb1392fe-746d-4396-8f00-9a6366f2f31f (run 1249d1a2-267b-40dc-bc65-fd2678080eef): effect +0.135 (+0.045 to +0.225), seating +0.088. Confirmation L1 (800-863): experiments 50480ef5-3fc5-4951-bca7-4b97351b00c7 (run 797cd3dc-06c5-4581-81a2-c385567aecbf) and db2d2f23-e765-41e7-8ef8-7cd52c01654b (run a4173a36-ead4-4fee-af07-c001ccdb7b88): −0.002 (−0.094 to +0.090), seating +0.045. Population L2 (800-863, a second tables baseline in slot 2 and eta in slot 3): experiments cb9b513d-d95c-4627-a939-5d5bd8156c56 (run 795c3709-fcc1-42f5-96fb-fba6dda15dfe) and 6af6311d-3550-4be0-bbae-6261bbe3829b (run 7cda63dd-b707-49b5-898d-8e54824fcc2b): −0.049 (−0.136 to +0.038), seating +0.068. The pooled L1 effect over 128 seeds was +0.066 (+0.001 to +0.132), positive with the interval within 0.03 of zero, so the extension ran on boards 864-927: L1 experiments a7374527-b9fc-44a4-97ac-9bbf7190d9f3 (run 7bcc5d5b-6878-4616-a9c7-584fdd99fb2d) and e160f9eb-37f7-44f1-ae12-1fc43a7f695b (run 3dab2804-6437-4d06-a74b-f86b79374829), effect +0.051 (−0.034 to +0.136); L2 experiments c515c2ef-2be1-4afc-abb1-28dc17c12325 (run 2447754d-31d4-41ee-b6be-768911c3e3ec) and 0f2f74fd-3b83-4248-878b-7b7893bd1915 (run da5e566f-702b-40b9-9ee2-3a639ba8ea68), effect +0.051 (−0.030 to +0.131). Pooled after-the-fact estimates: L1 192 seeds +0.061 (+0.009 to +0.113), L2 128 seeds +0.001 (−0.059 to +0.061). Against builders the registered rule reads support, but only the development boards 0-63 exclude zero, and on the 128 fresh L1 seeds alone the effect is +0.024 (−0.038 to +0.087), crossing zero; against a table with a third search the arm does nothing.

Arm coverage 0.4 / balance 0.5, effect arm minus default planner, no decision cost. Development L1 (0-63): experiments fcb9c657-4603-4985-948c-a6b54932ecee (run 365eaca0-57c4-4cb9-807e-49e9cc5ec45c) and 53427677-7c40-4575-a068-8f7f9b2b1321 (run f3175601-94fe-41d3-b52b-370cd0b10206): +0.037 (−0.020 to +0.094). Confirmation L1 (800-863): 7bdd77ec-115a-4a11-a7bb-27bf7499284c (run e2e08bb9-afee-4948-8d84-9d048a700c43) and 3cf67aec-9997-43a0-b6c8-eace5a55e5ff (run 3343c9df-ff9b-44d3-aeba-c1530e6109dc): −0.006 (−0.064 to +0.053). Population L2 (800-863): 75b51af0-4105-41ee-a34e-7aa6dbdf036e (run b27c4f07-93df-4185-aa19-cd6b5f95f3bf) and 209879bb-2cd8-4492-a304-3ca9bda596a6 (run 2c77bc8b-22da-4490-ad01-45b57a29170f): +0.008 (−0.047 to +0.063). The pooled L1 effect over 128 seeds (+0.016, −0.025 to +0.056) triggered the extension on boards 864-927: L1 experiments b872a711-1445-4c38-ab3a-ee7bd004208c (run 92587c1d-13b2-48d6-9485-f17d374c2489) and d755650a-82a6-4810-b836-6749f8122433 (run 2b380fba-16ab-4b57-b621-a487c7629ba2), effect +0.027 (−0.032 to +0.086); L2 experiments 468d59de-8843-41eb-b222-467095753b48 (run ab8b1c67-d903-421f-9aac-c374c815cb79) and 90fc34d1-acf3-4e8b-8445-162cf874d693 (run 56f6f0f3-f402-4046-b6c9-b4372e03f7cc), effect +0.000 (−0.053 to +0.053). Pooled: L1 192 seeds +0.020 (−0.014 to +0.053), L2 128 seeds +0.004 (−0.034 to +0.042). Inconclusive at every stage; the defaults stand.

Arm scarcity 0.0 (markup removed), effect arm minus default planner. Development L1 (0-63): experiments 148e7c43-a18f-49b0-9848-698822c387cf (run c2866d05-4ca9-4545-9a10-ecdd1182a042) and 503e02aa-5f09-4ed8-abe0-aad32821828f (run faed3f89-b5ce-4929-9c83-ad06ec974030): −0.006 (−0.088 to +0.076), seating +0.146. Confirmation L1 (800-863): e7b9a423-9ca7-4c27-9889-916d90729354 (run d97d2a7b-3681-47ec-b516-ca968d1ae169) and 9f1bc806-5571-4d6b-869b-b53174415c1b (run 3de8e8fa-2193-4239-8d8d-52bd3d0a99fe): −0.004 (−0.088 to +0.080), seating +0.117. Population L2 (800-863): 5841c278-d998-4cfe-a5fe-133313de3bd4 (run c26c5f85-a645-4da3-b644-8b17d598733d) and 97b2e851-c55b-4e6e-8546-677032933a3c (run 9a09faae-b7ed-41cf-94fa-11cd3784a1a0): −0.012 (−0.073 to +0.049). Pooled L1 over 128 seeds −0.005 (−0.063 to +0.053), not positive, so no extension. A clean null at every stage: the hand-leaf-calibrated scarcity markup neither helps nor hurts under the tables, and the default stands.

Interpretation. The sign of the planner-versus-search comparison flipped with the leaf because only one side changed: the planner is the same hand-leaf calibration, while search mode now ranks the shortlist with learned site values. The tables' site values are the improvement, and they reach placement only through the search, at the cost of making each of the three or four setup decisions a full search (about 40 ms for the planner against about 2 s per setup decision in the traced games under load; mean decision time 25 to 33 percent above the control, nodes per decision 9 to 19 percent above). The search seat also loses about 0.2 to 0.3 more reachable sites per game and buys about 0.7 more development cards, which is the planner's expansion and draft terms holding ground that the search spends instead. The gain lives on the development boards and disappears against a table of searches, so the registered browser rule fails on both counts (cost outside 25 percent, and a population effect of zero) and the browser keeps the planner, whose hand-leaf comparison was a match anyway. Traced placements on four boards are in the report. Server default: unchanged; a protocol cohort of the search-ranked opening against ntuple-leaf is the next step if it is to change.

Failures and notes: none. No failed, incomplete, or interrupted run. The screens reused no stage seeds (928-943 lies beyond the extension range 864-927). Runs were executed with --threads 6 (the just engine-run recipe does not forward the flag, so runs were launched through python3 -m harness.engine run EXPERIMENT --threads 6, the same code path). All 26 runs are archived under artifacts/ with receipts in records/artifacts/. The report carries the cohort tables, the hand-leaf comparison, and the browser section.

Attribution: GLM-5.3 (baseten/zai-org/GLM-5.3) through OpenCode.

Search settings under the learned tables

Study search/settings-tables. The 2026-09-09 ablation program measured the tunable search's settings under the hand-written leaf in one seating, which the seating diagnosis later showed to be inflated by the turn-order term; none had been measured under the learned n-tuple tables. Nine arms, each the depth-2 tables baseline (v2:{"depth":2,"leaf":{"tables":"artifacts/ntuple/hex-portfolio-main.bin"}}) plus one switch, were measured as swapped pairs against the unchanged baseline: scenarios:4 and scenarios:16 (dice scenarios, default 8), samples:1 and samples:8 (sampled hidden worlds, default 4), inner_scenarios:2 (deeper-level scenarios, default 4), leaf_opponents:true (opponents in the lookahead choose by the tables leaf), counts_only:true (public counts instead of event-based hand knowledge), propose:false (no trade proposals), and reciprocity:true (willingness scaled by each partner's observed acceptance rate). Each half is its own registered experiment: 256 deterministic games (64 seeds, four rotations), half A candidate in slot 0, half B candidate in slot 1, the effect the per-seed half-difference of the two contrasts and the seating term their half-sum (analysis/settings_tables.py). Development played the ablation boards (seeds 0-63) with eta and fast in slots 2 and 3; confirmation played fresh seeds 800-863 in the same lineup; population played seeds 800-863 with the tables baseline and eta behind the two searches; the two arms whose pooled 128-seed effect was positive with an interval reaching within 0.03 of zero (samples8, leaf_opponents) extended to seeds 864-927 in both lineups. The registered decision rule: all games complete, and the seating-corrected effect's 95 percent seed interval excludes zero in the hypothesized direction (support), the other way (refutation), or neither (inconclusive). All 54 cohorts completed 256 of 256 games with no invalid moves, stalls, or search errors.

Registrations, half A and half B: scenarios4 d6cbff3d-7e92-4f47-bbc9-97da3c2532a9 / 33654a28-86e9-4026-93e2-111b34913669, scenarios16 767a4f08-e4d9-48da-83bb-d2e952feaf69 / f650a242-2e6a-4075-a80d-da4ee753441a, samples1 f959a49e-5745-4623-9bb9-e0a43f9ea964 / e4f5ae29-919c-4bd4-83ae-98812ea00bc3, samples8 97bd74e0-164b-4d79-bcab-390edc31c129 / adf4e1c3-f93f-4f7e-9631-bd595a2beb2a, inner_scenarios2 e071b629-8043-4eff-8fb0-ac694cac0f78 / f364cf12-1945-4653-9fe3-8bfa92fe5f38, leaf_opponents a20b6abd-d8b6-4f66-b634-5df40495953e / face5b0d-d070-4e83-91df-d6fb6ae5ee4b, counts_only ef501bc5-7196-4ad6-a939-09f00414d771 / b3795b5e-aa62-40be-ad6c-53d075512ecb, propose_false e53c45bd-a7ee-4ef8-8772-3780c1cfef31 / 1172dcee-95da-44af-a86c-9f5ee0d12fbf, reciprocity 95aac00b-f396-4a5c-b023-db360692802b / 495e1a17-5a74-438e-b660-06219ca881c7 (development); scenarios4 dcfd9ca5-170f-43a7-a1f0-36117e7c7990 / ee1751fb-ec20-4df1-b402-6d97a405bd0d, scenarios16 ed82c2ee-5197-4e70-a3e6-ae4a20d64a33 / e5b13479-5578-4810-bd6f-da6b3fb779fb, samples1 142fdc9a-e4be-4418-9008-5b942dc78daf / bfb9bed6-58cd-48c5-aa91-2b029b5c0f9a, samples8 449ea466-728b-45e0-a177-9c220e3e8415 / 13a7cf69-526c-4f94-b434-0ee56051a5f8, inner_scenarios2 25ed5f85-6ab3-4949-80d0-b3bce5237971 / e2445b6e-c49c-4396-85f6-9052f8921028, leaf_opponents a5e38bc5-ff5d-4365-bdee-f89379bf64b6 / b3c000ac-fec6-48ba-87e0-1cec1c89ba34, counts_only 1667548f-63ed-4d58-bff0-a1477e978867 / dfbd6b4c-1438-44e9-b69b-313d048f6fcf, propose_false 87550a5a-5149-418b-a056-aa6d0a8372a9 / a567b9c2-92a1-49b5-b7ef-c623fd51a197, reciprocity ca442984-d942-4e50-b036-e76b85372074 / de3228ec-9440-4ac1-ac6d-81c2d99976e5 (confirmation); leaf_opponents 9aef447a-d703-454a-8970-92d463017015 / bddfe32b-940f-4ea0-833f-2c0db3274a3c, counts_only d4778a73-5587-441c-8cbf-82a53f87d096 / 4efbf0e1-bea3-407f-8f8a-078f649805eb, propose_false 3c661aad-8bcf-48cd-988b-0cbf3c50209d / 001e2f3b-f70e-41b0-b061-247eeb855557, reciprocity 4e7a760b-0fa1-4e5e-8269-aee7f6030105 / 5b23ab6d-1cbc-4e77-82e2-5c281248e7d0, samples8 82ff6f24-174a-4d2b-babf-fa1a95619589 / 75b81db1-c6e6-483b-aafc-8ad707ecc0f4 (population); samples8 extension 12b83328-8fd5-402f-aa7e-08c8dc8b38fd / fbd6fe9d-3771-4e25-bc1f-bf2fb38625bd (L1) and d5cb3195-5a58-460a-bee7-ee62fe907d63 / b16d5306-09ee-4af4-a7fe-e34494197bf0 (L2), leaf_opponents extension e222c91f-2724-4730-8f81-9a1198ca4e1f / d46a4f48-401e-49fb-8a93-0dc5b4adeca1 (L1) and 36817410-f3b0-4dd3-a61f-70bc9676bc06 / 4d02ea83-f6e1-4e4b-afd1-24ab954ffcb6 (L2), seeds 864-927. The 54 run UUIDs are in the report cohort table and its AgentContext.

Seating-corrected effects, candidate minus control (pooled rows are after-the-fact poolings over the named seeds):

ArmL1 effect (95% interval)L2 effectDecision time vs controlVerdict by the registered rule
scenarios 4−0.392 (−0.444 to −0.339), 128 seedsnot run68%supported: the change hurts
scenarios 16−0.026 (−0.072 to +0.019), 128not run272%inconclusive; mean negative
samples 1−0.109 (−0.150 to −0.069), 128not run34%supported: the change hurts
samples 8+0.045 (+0.009 to +0.081), 192−0.007 (−0.045 to +0.031), 128178%each pair inconclusive; pooled L1 excludes zero, pooled L2 does not
inner scenarios 2inert at depth 2not run100%no test: the switch cannot bind
leaf opponents+0.031 (−0.006 to +0.068), 192+0.033 (−0.009 to +0.075), 128180%inconclusive at both lineups
counts only−0.143 (−0.188 to −0.097), 128−0.053 (−0.107 to +0.002), 64120%supported: the change hurts
no proposals−0.172 (−0.211 to −0.133), 128−0.143 (−0.197 to −0.089), 6492%supported: the change hurts
reciprocity−0.073 (−0.115 to −0.031), 128−0.082 (−0.141 to −0.023), 64106%refuted: the change hurts

Reading: under the learned tables the search's information inputs are worth more than under the hand-written leaf, not less. Against the same boards where the hand-leaf ablations read −0.066 for counts-only beliefs (confirmed) and −0.027 for proposals (crossing zero), the tables read −0.143 and −0.172. Four scenarios cost −0.392, about what two scenarios cost the hand-written leaf in one seating (−0.410), and the four-scenario seat's diagnostics show how: it ends turns over the seven-card limit and discards 13.9 cards per game against the control's 5.5, buying 2.75 development cards against 4.25. The reciprocity scaling is the one refuted arm: against fixed-rule partners it makes the seat stop asking (9.8 offers per game against the control's 14.7, half the counters, more declines) and loses about 0.07 wins per game. The one strength gain in the program, eight sampled worlds at +0.045 against builders, is real pooled over 192 seeds but each of its five pairs is inconclusive, the gain vanishes at the population table, and it costs 1.8 times the decision time, so it fails the browser rule on cost. The inner_scenarios:2 arm cannot change a decision at depth 2 (the leaf is evaluated before any deeper opponents' round exists): both halves of both stages replayed byte-identical games, which doubles as a null pair measuring the seating term on fresh boards (+0.078, −0.028 to +0.184). The switch first binds at depth 3, the browser's depth, and is the natural next measurement there.

No switch is worth the browser by the registered rule (pooled effect at least +0.03, interval excluding zero, decision time within 25 percent of the control). The defaults stand on both leaves. The one candidate trade the numbers expose is samples:1 for depth: a third of the decision time for −0.109 wins per game under the tables, worth measuring in WASM only if the one-second browser budget cannot finish depth 3.

Failures: none in the games; all 54 cohorts completed. My own scheduling caused five interrupted run directories before the program proper: 41648acb-cfba-40ea-97e2-86d0053656cc (16 of 256 games, killed by a shell timeout), 08f93997-1214-4693-8caa-6f16c28c7a52 and e39e156d-bdc8-413a-bcee-f20945f71836 (duplicate scenarios4 halves, killed), and 958a74d4-7ceb-4de5-b75b-041600e07f87 and 606bd7b4-cfad-49bc-8d59-60804bc63501 (duplicate scenarios16 halves, invalid, 3 games each; their records are filed). No game from any interrupted run entered any contrast. Wall times are meaningless under the day's load (load average 80 to 160 on 32 cores from ten concurrent agents); the tournaments ran at --threads 6 and the deterministic cohorts are load-independent. The confirmation halves ran concurrently with development halves on disjoint seeds for wall-time reasons; every stage's games completed before any interpretation.

Blending the learned tables with the hand-written leaf, and the endgame switches under the blend

Study patterns/leaf-blend. The learned tables are the leaf of the protocol baseline, and the search can also add the hand-written terms on top of them: leaf.hand scales the added terms (0 by default) and leaf.scale sets how many hand-written points one win is worth (1000 by default, which the trade margin, the threat premium, and the deepen gap all compare against). Neither knob had been measured. The question was whether each knob, and the two endgame leaf switches from containment/endgame-race (which are inert under the tables alone because they change hand-leaf terms), helps, hurts, or does nothing when the search evaluates with the tables.

Every contrast is a swapped pair on the same seeds: half A seats the candidate in slot 0, half B seats it in slot 1, the effect is the per-seed half-difference of the two slot-0-minus-slot-1 contrasts and the seating term their half-sum (analysis/seating_pair.py, analysis/leaf_blend.py). Stages: development on seeds 0 to 63 with the builders lineup (slots 2 and 3 eta and fast), confirmation on seeds 800 to 863 (never used by an earlier experiment), population on seeds 800 to 863 with the tables baseline in slot 2 and eta in slot 3, and an extension on seeds 864 to 927 in both lineups when the pooled L1 effect stayed positive with its interval within 0.03 of zero. Every cohort is 256 deterministic games at six threads, every cohort that ran completed all 256, and the registered rule reads the seating-corrected effect's 95 percent interval excluding zero as support or refutation and crossing zero as inconclusive. An arm refuted at a stage stops; pooled rows across stages are named after-the-fact pooling.

The orchestrator had started an unregistered screen of hand 0.25 and 1.0 that my first run interrupted; its completed files measured hand 0.25 at +0.074 (+0.011 to +0.138) and hand 1.0 at -0.207 (-0.284 to -0.130). When that screen arrived I had already registered the endgame arms on the hand 1.0 blend; the unstarted hand 1.0 registrations were withdrawn before running (below) and the arms were re-registered on the hand 0.25 blend in both seats, the blend that may become the default. My registered hand 0.25 stage 1 pair is the same games as the screen by construction, and it confirms the screen's arithmetic.

The blend arms

Seating-corrected effects, wins per game:

ArmStage 1 (0-63)Stage 2 (800-863)Stage 3 (L2, 800-863)Extension (864-927)Pooled L1Pooled L2
hand 0.25+0.074 (+0.011 to +0.138)+0.035 (-0.034 to +0.105)+0.049 (-0.008 to +0.105)L1 +0.088 (+0.006 to +0.170), L2 +0.080 (+0.015 to +0.146)+0.066 (+0.024 to +0.107)+0.064 (+0.021 to +0.108)
hand 0.5+0.045 (-0.028 to +0.118)+0.051 (-0.018 to +0.120)−0.027 (−0.094 to +0.040)L1 -0.047 (-0.113 to +0.019), L2 −0.010 (−0.072 to +0.053)+0.016 (-0.024 to +0.057)−0.019 (−0.064 to +0.027)
hand 1.0half A only -0.117 (-0.233 to -0.002); half B withdrawn, screen -0.207 (-0.284 to -0.130)withdrawnwithdrawn

The quarter-strength blend is supported: it is the only arm whose pooled intervals exclude zero, in both lineups, and its extension seeds came back stronger than its confirmation. The dose runs the wrong way from there: half strength is inside the noise pooled over 192 L1 seeds, and full strength lost from the seat that wins the seating term. The extension criterion triggered for hand 0.25 (pooled L1 +0.055, lower edge +0.008), for hand 0.5 (+0.048, lower edge -0.002), and the extension seeds cut hand 0.5 to +0.016 pooled.

What the hand terms add is visible in the stage 1 games (per seat per game over both halves): the tables seat built 1.23 cities, bought 4.03 development cards, settled 1.81, and discarded 5.20 cards; the hand 0.25 blend built 1.50 cities, bought 3.95 cards, settled 2.05, discarded 5.92, and finished at 7.95 points against the control's 7.47. The half blend traded cards for cities (1.62 cities, 3.74 cards, 7.62 discards) and the full blend abandoned the cards the tables win with (1.86 cities, 3.34 cards, 9.02 discards). The blend is also the one arm with a decision cost: within each cohort the hand 0.25 seat spent about 40 percent more per decision than its tables control (929 ms against 667 ms pooled over stage 1), because both evaluators run at every leaf.

The scale arms

ArmStage 1Stage 2Stage 3 (L2)Extension (864-927)Pooled
scale 500-0.059 (-0.121 to +0.004)-0.135 (-0.191 to -0.078), refutedwithdrawn-0.097 (-0.139 to -0.054) over 128 seeds
scale 2000+0.051 (-0.009 to +0.111)-0.010 (-0.069 to +0.050)+0.035 (-0.024 to +0.095)L1 +0.047 (-0.026 to +0.120), L2 +0.033 (-0.034 to +0.101)+0.029 (-0.008 to +0.066) over 192 L1 seeds; +0.034 (-0.011 to +0.079) over 128 L2 seeds

Halving the scale doubles every threshold in win probability and the arm shows it: the halved seat completed 2.32 player trades per game against its control's 3.70 in stage 1 and lost everywhere, so stage 2's refutation ended the arm. Doubling the scale makes the thresholds cheaper, the doubled seat traded more (5.13 against 4.06) and bought more cards (4.07 against 3.88), and six pairs never separated the effect from zero; it costs no decision time. The default scale of 1000 stands.

The endgame switches under the blend

Measured on the hand 0.25 blend in both seats, the blend alone as the control:

ArmStage 1Stage 2Stage 3 (L2)Extension (864-927)Pooled L1Under the hand leaf (seeds 64-127)
race-0.039 (-0.076 to -0.002)-0.035 (-0.080 to +0.010)+0.000 (-0.036 to +0.036)not triggered, pooled L1 negative-0.037 (-0.066 to -0.008)+0.018 (-0.018 to +0.053)
hidden points+0.025 (-0.010 to +0.060)-0.010 (-0.043 to +0.024)-0.025 (-0.067 to +0.016)L1 -0.006 (-0.042 to +0.031), L2 +0.008 (-0.029 to +0.044)+0.003 (-0.017 to +0.023)+0.006 (-0.030 to +0.041)

The race leaf, which under the hand-written leaf read +0.018 with an interval crossing zero, is a small loss under the blend: its stage 1 interval excludes zero on the wrong side and so does the pooled L1 estimate, so the registered rule reads refutation and no extension was run. Hidden points is the same at smaller size: its pooled L1 after two stages (+0.008, -0.016 to +0.032) met the extension criterion by the letter, and the extension seeds brought the pooled 192-seed L1 estimate to +0.003 (-0.017 to +0.023) with the population lineup slightly negative (-0.009, -0.037 to +0.019), so five pairs in both lineups never separated it from zero. The hidden-points pair that had already started on the full hand 1.0 blend was left to finish and read -0.029 (-0.075 to +0.016), a null on the full blend; no further cohorts on that blend were registered. Both switches stay off.

Withdrawals and failures

Withdrawn before running, with the orchestrator update's reason (the full blend measured much weaker than the tables alone, so a switch on top of it says little about a configuration anyone would use): hand 1.0 half B b6f5f82e-9a8a-4fd5-b9f5-bc7357fcaa9c and the race halves on the full blend 47a866d0-b46b-49d4-bf92-fd0b520bc19f and 348e041a-9c73-43d8-93dc-80ce0ae5ec10; no further full-blend cohorts were registered. Withdrawn after stage 2 refuted the arm: the scale 500 population halves 7bd62467-9637-490f-a3cf-d9fe1a4a1bca and 436be4ef-b624-4d11-b3cc-6de6851facbc. None of these has a run.

Failures, all mine: my first stage 1 run 6d41a494-392a-4df4-b18f-f8cfe7a2902e was killed 11 games in by its own controlling shell's command timeout; it is filed as interrupted and the half was rerun from scratch as 0a0e710b-9012-41fe-a947-393274a76c94. A race between two of my queue drivers started a duplicate of the completed scale 2000 half (71692536-8d3e-4ab0-90c9-3262835d2000, 69 games), which I stopped and filed as invalid. While stopping that duplicate I killed the wrong process, the legitimate hidden-points half A (82466126-f940-4a04-a239-7d918c9a3efc, 80 games, filed invalid), which was then rerun from scratch as f71f0519-603f-4735-8b7c-216a027b4bfa; the operator error is mine and both records stand. A second race between the same two queue drivers duplicated the last hidden-points extension half: the legitimate run 8d3434f3-4ff9-4f8e-b446-157887f3aa2b completed all 256 games, the duplicate 26c0b46f-e3fd-4100-aea3-32700c603aa9 (111 games) was stopped and filed invalid, and the analysis uses the completed run. An interim reading that paired the race stage 1 half A with the wrong half B (the scale 2000 run 75a28eed-d4f4-480a-95d7-8cec86ebdfec) read +0.016 and was corrected before anything was filed; the registered race half B is 62a9c08a-525d-4647-8039-74762ece8915 and the stage 1 effect is the -0.039 in the table above. No game was censored, no search errors or stalls appeared in any run, and the machine ran at a load of 100 to 160 from other agents' cohorts throughout, so wall-clock decision times are comparable only within a cohort.

Every cohort

All cohorts 256 of 256 completed; "contrast" is each half's registered slot-0-minus-slot-1 paired contrast, and the pair effect is its half-difference across halves. The report carries the same table with the diagnostics.

| hand 0.25 | 1 (0-63, L1) | A | 138 / 87 | +0.199 (+0.107 to +0.291) | 337fa8bf-6dac-4798-ac5d-ef898b9511fc | 0a0e710b-9012-41fe-a947-393274a76c94 | | hand 0.25 | 1 (0-63, L1) | B | 109 / 122 | +0.051 (-0.051 to +0.153) (control minus candidate) | 90b1cbe0-525c-440b-988e-f2ae7664e280 | 6df6bf94-1853-46dc-b169-c8a2e5d7e7ba | | hand 0.25 | 2 (800-863, L1) | A | 120 / 102 | +0.070 (-0.032 to +0.173) | 643e51c4-d1e7-4545-8b2b-3f4cb64fe22a | 02c6ea23-1d12-45c2-9b4c-f3b4d3c0ef61 | | hand 0.25 | 2 (800-863, L1) | B | 116 / 116 | +0.000 (-0.096 to +0.096) (control minus candidate) | 805db13b-33b8-4b74-aa92-69398e726fa9 | 6c737da9-c10a-46e5-9c53-b91c882e599a | | hand 0.25 | 3 (800-863, L2) | A | 92 / 74 | +0.070 (-0.012 to +0.153) | f97d1156-4294-4ad2-8331-234e206d72a0 | d016da61-ed26-4072-b3ff-98c8afb95705 | | hand 0.25 | 3 (800-863, L2) | B | 83 / 76 | -0.027 (-0.115 to +0.061) (control minus candidate) | 4924410e-b8e9-4752-9e0a-198bb826daaa | 8fcd82d8-09a4-4f85-968b-7f20120a83dc | | hand 0.25 | ext L1 (864-927) | A | 141 / 98 | +0.168 (+0.047 to +0.289) | c0c8534f-9256-4576-a468-1959395cedfe | 532b7ed6-b77c-4ab8-ac9f-37537a9a90f7 | | hand 0.25 | ext L1 (864-927) | B | 120 / 118 | -0.008 (-0.119 to +0.103) (control minus candidate) | fb7327b6-8b65-44f0-bbb0-6ed513c1ab20 | d828c9b6-e8e6-45bc-8ae8-08a9f7b80b26 | | hand 0.25 | ext L2 (864-927) | A | 107 / 75 | +0.125 (+0.031 to +0.219) | 9449ea85-5571-4a39-8ec3-f78a74c5c3c5 | 7697562f-eff1-4032-a32a-535ce8c323b5 | | hand 0.25 | ext L2 (864-927) | B | 84 / 75 | -0.035 (-0.124 to +0.054) (control minus candidate) | 7287289b-adfa-4a85-8644-9570d8c6c10b | 9bae1e81-3ef3-41ad-aa6b-55876d2c2167 | | hand 0.5 | 1 (0-63, L1) | A | 133 / 95 | +0.148 (+0.046 to +0.251) | 5f6a5f32-2629-4f89-8fc6-e3e8088e1e36 | 4a6bfee0-c5ca-4689-8c8b-0cac8df16a0d | | hand 0.5 | 1 (0-63, L1) | B | 104 / 119 | +0.059 (-0.045 to +0.163) (control minus candidate) | 9023a299-3644-4748-b349-4d6ff03b8ac5 | 39a0cdba-b3ab-4ed1-813d-537b3a60b103 | | hand 0.5 | 2 (800-863, L1) | A | 128 / 103 | +0.098 (-0.010 to +0.205) | f453131d-e920-4739-8f1c-fe0a2d57bdd7 | 81267946-c11f-4a2b-9c9a-bd31c7b102c0 | | hand 0.5 | 2 (800-863, L1) | B | 116 / 115 | -0.004 (-0.115 to +0.107) (control minus candidate) | 9b7d17c5-f145-4467-a452-98fc6d1c913e | 281c1452-fd54-4b8f-85fb-f1192b6fa15f | | hand 0.5 | 3 (800-863, L2) | A | 87 / 83 | +0.016 (-0.079 to +0.110) | ff2f050d-e848-4301-83ce-202d1abd1522 | 9bc75aea-a683-4d77-a99b-286a16083352 | | hand 0.5 | 3 (800-863, L2) | B | 77 / 95 | +0.070 (-0.029 to +0.169) (control minus candidate) | 82f2db3f-6d33-49eb-b8d9-6ba914b23217 | 807ae9e0-580f-4630-b4f6-d1c566eea0b7 | | hand 0.5 | ext L1 (864-927) | A | 120 / 114 | +0.023 (-0.084 to +0.131) | 245f9d8a-5ebd-4cc3-9cb6-2f3a7e99b6ce | 86c15927-05fb-4b44-bdc2-9a631f070f0d | | hand 0.5 | ext L1 (864-927) | B | 105 / 135 | +0.117 (+0.002 to +0.233) (control minus candidate) | a39dce2b-1918-4f22-b1c1-9584946b9e2f | 822ec329-678c-4dfd-9f2c-d347f5216438 | | hand 0.5 | ext L2 (864-927) | A | 86 / 80 | +0.023 (-0.068 to +0.115) | b4d35e5e-fbc9-4937-b236-b53f001d00f6 | b4e9e09c-4c38-4480-9cf6-23516107d05f | | hand 0.5 | ext L2 (864-927) | B | 79 / 90 | +0.043 (-0.051 to +0.137) (control minus candidate) | 905ad279-73cf-4145-a42f-b0ef6561192e | 32aa4be1-e50c-44e2-b7d2-8731f30257b4 | | hand 1.0 | 1 (0-63, L1), half A only | A | 93 / 123 | -0.117 (-0.233 to -0.002) | f2f21530-bf8d-400d-bfec-8614e6e0a607 | 0d12835e-5262-4daf-9f2f-6a9b7288f2d6 | | scale 500 | 1 (0-63, L1) | A | 117 / 108 | +0.035 (-0.046 to +0.116) | af67389d-785d-4bf0-894f-436836d8c2db | a1830777-dcba-4e54-b394-833fc04adc0e | | scale 500 | 1 (0-63, L1) | B | 91 / 130 | +0.152 (+0.052 to +0.253) (control minus candidate) | fe58e64c-b9bb-493b-a4a3-411c5aff3c9f | 5d969f99-0067-4244-bb11-b88a3805bf63 | | scale 500 | 2 (800-863, L1) | A | 107 / 117 | -0.039 (-0.143 to +0.065) | 1a694630-8483-4512-849b-cfc7ca54bae1 | e0efc71e-f9d0-4d77-a57e-988bb4607654 | | scale 500 | 2 (800-863, L1) | B | 87 / 146 | +0.230 (+0.147 to +0.314) (control minus candidate) | 07a0544f-008e-4dae-a3c9-e6c00985e6f0 | b8662419-bf13-4333-b02f-bee9037ed7cb | | scale 2000 | 1 (0-63, L1) | A | 141 / 94 | +0.184 (+0.089 to +0.278) | d5ed6196-0d94-4513-b8c4-6e8c83e39967 | d45f668c-558f-435e-9957-38e33e7ac864 | | scale 2000 | 1 (0-63, L1) | B | 101 / 122 | +0.082 (-0.016 to +0.180) (control minus candidate) | f10eb77e-ebb8-4711-90d8-a28b5e9ead0b | 75a28eed-d4f4-480a-95d7-8cec86ebdfec | | scale 2000 | 2 (800-863, L1) | A | 118 / 108 | +0.039 (-0.069 to +0.147) | ad20b42d-9937-4515-acb1-7669b0f20aa8 | f9eb5200-ee12-4d9e-bcc3-fde9a73d24d4 | | scale 2000 | 2 (800-863, L1) | B | 111 / 126 | +0.059 (-0.056 to +0.173) (control minus candidate) | 91718fce-02e4-4248-a9e1-3e43bd76c118 | 1e9155d6-7a37-4f4a-92f2-d911b4cdaed0 | | scale 2000 | 3 (800-863, L2) | A | 87 / 85 | +0.008 (-0.089 to +0.104) | a1c94c34-3de8-4b37-a06a-792d93d66a5c | 7b35abeb-7384-4b24-b5d4-b7ad8da5bc13 | | scale 2000 | 3 (800-863, L2) | B | 91 / 75 | -0.062 (-0.148 to +0.023) (control minus candidate) | 6dd18a29-bf0b-46e2-8ca4-bc815e07480d | bbc95080-0a94-4b8c-aad9-a298f2531349 | | scale 2000 | ext L1 (864-927) | A | 135 / 100 | +0.137 (+0.029 to +0.244) | 9d6eb9ca-7db0-4154-b64e-e15af957cac3 | 00a7596e-cbad-4576-8be7-0ea9849655d3 | | scale 2000 | ext L1 (864-927) | B | 110 / 121 | +0.043 (-0.057 to +0.143) (control minus candidate) | a2e97981-b6a7-4d3b-8a3b-ac416a6bfbac | 691cd581-79b3-46a8-89ba-4682c878cc3d | | scale 2000 | ext L2 (864-927) | A | 100 / 76 | +0.094 (+0.001 to +0.187) | 5e1b1d2c-8839-4bfb-8d65-0c3295df027a | bf588ca4-2392-4311-9783-9ecf88062a8b | | scale 2000 | ext L2 (864-927) | B | 83 / 90 | +0.027 (-0.072 to +0.126) (control minus candidate) | 4e2462ab-e524-439e-8242-c385d511bc0f | b04b06d7-eb29-4be3-b759-bee7e517fb9d | | race | 1 (0-63, L1) | A | 129 / 100 | +0.113 (+0.024 to +0.203) | 2539e502-82fd-4435-8037-36576576149e | a2305e39-c6ae-47cc-a48b-11a98a6a889f | | race | 1 (0-63, L1) | B | 92 / 141 | +0.191 (+0.099 to +0.284) (control minus candidate) | afbb74be-1797-488e-bf6d-f507a2f7d211 | 62a9c08a-525d-4647-8039-74762ece8915 | | race | 2 (800-863, L1) | A | 123 / 104 | +0.074 (-0.037 to +0.186) | 2d7728ec-73da-4373-9bab-173c7d0fd233 | 89995f9e-f3f9-476a-8d60-cea1c872882c | | race | 2 (800-863, L1) | B | 95 / 132 | +0.145 (+0.035 to +0.254) (control minus candidate) | 2ebd63d7-5030-44a7-aa22-e2c5b7eecf75 | a6160ac7-4b29-45fb-bede-7c7581ee49c3 | | race | 3 (800-863, L2) | A | 84 / 83 | +0.004 (-0.086 to +0.094) | 583bb9b9-93eb-46f0-b881-3c04a8a09a43 | a84adf0d-5d3e-4508-bae6-4895bb988a5c | | race | 3 (800-863, L2) | B | 81 / 82 | +0.004 (-0.075 to +0.083) (control minus candidate) | 062e4f27-86af-4f43-a785-403963a72faa | cfa68fe3-5a0a-4b8c-a272-b18eabcf8d7d | | hidden points | 1 (0-63, L1) | A | 137 / 97 | +0.156 (+0.064 to +0.249) | d7a3e2a6-12d7-49a3-bdea-73cb384d849f | f71f0519-603f-4735-8b7c-216a027b4bfa | | hidden points | 1 (0-63, L1) | B | 102 / 129 | +0.105 (+0.012 to +0.199) (control minus candidate) | 0cee9b32-0a0e-45e9-9417-00816fed3055 | ffb5282f-aca3-4b7d-b6e2-0043cbb3c8a9 | | hidden points | 2 (800-863, L1) | A | 125 / 104 | +0.082 (-0.025 to +0.189) | c1fa5380-eb76-4b2e-b0d5-a5bbcc1191d6 | 21e1875d-8d52-4b46-a236-bc6b0f1c9269 | | hidden points | 2 (800-863, L1) | B | 102 / 128 | +0.102 (-0.009 to +0.212) (control minus candidate) | fc9a2726-8e79-4922-9454-7f0adf034d56 | ebca2e51-db2d-4d95-bdc0-0f90abb85e03 | | hidden points | 3 (800-863, L2) | A | 83 / 84 | -0.004 (-0.092 to +0.084) | 707228f9-bf2c-480c-97bf-85e7915acbd6 | b7620d3e-e3c8-4f76-bd09-9cf142d9664f | | hidden points | 3 (800-863, L2) | B | 74 / 86 | +0.047 (-0.044 to +0.138) (control minus candidate) | dcb44409-a705-4ab1-81b4-1d2a42b77111 | 14d5ecc2-f876-4b89-bfc7-86afabbe2c5b | | hidden points | ext L1 (864-927) | A | 130 / 107 | +0.090 (-0.011 to +0.191) | cb65e133-a18f-4d33-b4ea-afb2e2112cfe | 48063a4d-6412-4cbd-9241-bf8be44de2cd | | hidden points | ext L1 (864-927) | B | 103 / 129 | +0.102 (-0.003 to +0.206) (control minus candidate) | 4de83cf0-edca-45c8-8ee4-ae2025495157 | c4037bf3-c3f0-4d66-9c1d-b6eacb8eee14 | | hidden points | ext L2 (864-927) | A | 91 / 82 | +0.035 (-0.046 to +0.117) | e612fc8c-038c-4115-a7fc-ae0b625fa2e3 | eee597b6-f2e5-4d72-898d-014f7b7c5567 | | hidden points | ext L2 (864-927) | B | 85 / 90 | +0.020 (-0.073 to +0.112) (control minus candidate) | 59099138-66bf-4389-b184-b5eb99e3bcec | 8d3434f3-4ff9-4f8e-b446-157887f3aa2b | | hidden points | 1 on hand 1.0 (0-63, L1) | A | 95 / 104 | -0.035 (-0.148 to +0.078) | e7b09434-e4a4-409c-9bbc-6eeb56c3f65a | b827db8d-00f4-43ba-95d3-6b726da9ce42 | | hidden points | 1 on hand 1.0 (0-63, L1) | B | 101 / 107 | +0.023 (-0.101 to +0.148) (control minus candidate) | f1d399f2-c7dd-4235-99d8-e2f997d6b006 | 66738182-65d1-4db7-9163-81008c59d149 |

Interpretation: a quarter of the hand-written terms improves the learned leaf by about +0.07 wins per game in both lineups and is the one candidate here worth a protocol cohort against ntuple-leaf; half strength is noise, full strength is worse than the tables alone, the scale default of 1000 is right (500 refuted, 2000 free but null), and the race and hidden-points leaves do not help under either leaf, so they stay off in the server and the browser. The browser build cannot load the tables, so the blend and scale knobs configure only the server-side policy; for the browser the endgame switches were already measured at +0.018 and +0.006 under its own leaf and add nothing now.

Attribution: GLM-5.3 (baseten/zai-org/GLM-5.3) through opencode.

Road switches under the learned leaf

Study expansion/roads-tables. The two road switches of expansion/road-blocking-swapped, weights.opponent_expansion 0.5 and weights.road_contention_gate 1.0, were re-measured with the learned n-tuple tables as the search's leaf, the protocol-arena baseline configuration. Both are leaf terms with a candidate-generation part in the road shortlist, so each was run twice: under the tables alone, where only the shortlist part acts, and on top of the blended leaf with "hand":0.25 in both seats, where the leaf term is live at quarter strength. Every contrast is a registered swapped pair on the same seeds, half A with the candidate in slot 0 and half B with the control in slot 0; the effect is the per-seed half-difference of the two contrasts and the seating term their half-sum. Stages: development on seeds 0-63 with the builders lineup (ETA and fast in slots 2 and 3, matching the hand-leaf cohorts), confirmation on seeds 800-863 in the same lineup, population on seeds 800-863 with the plain tables baseline in slot 2 and ETA in slot 3, and a gated extension on seeds 864-927 in both lineups. All tournaments ran at six threads on the shared machine. Hypothesis for each pair: the switch beats the unchanged control leaf, with the registered rule that the pair's seating-corrected 95% seed interval excludes zero in the hypothesized direction (support), excludes zero the other way (refutation), or neither (inconclusive).

Mid-study the blend moved: an unregistered screen by the leaf-blend agent measured hand:1.0 at −0.207 wins per game against the tables alone and hand:0.25 at +0.074, so the full blend is not a configuration anyone would ship. The ten registered full-blend cohorts that had not started were withdrawn before running and re-registered at 0.25; the one full-blend cohort already running (stage 1, blocking weight, half A) finished and is filed as a single seating. Withdrawn registrations, not run: abba442e-debf-4472-8343-c393b492b396 (stage 1 blocking half B), 0dd23ca1-a69e-486d-bbba-bb99dc530438 and 07d9c96b-ae49-40cd-be6a-dae5710a5cd1 (stage 1 gate), 0491a4a8-37e7-43f1-a42a-c30af6ff05a5 and 1509b074-b76c-4632-a978-ce0400600509 (stage 2 blocking), d7160c76-ce55-49b6-a5ca-362e151fa849 and 6df5f111-53f4-4408-ab8f-2d4faea0504d (stage 2 gate), c2b54a63-d983-4b85-83c1-0216757be515 and fef0e8b5-de13-42cd-989c-5ecdafe3466a (stage 3 blocking), 350442e0-cfc9-4499-98f8-947ef92f4a7e and 103764a1-fc44-4d9a-99e6-fb85a75ff089 (stage 3 gate).

Every cohort completed 256 of 256 games; no invalid moves, stalls, censoring, or interruptions. Experiment and run UUIDs in full:

Arm and stageHalf A experiment / runHalf B experiment / run
blocking, tables, dev 0-630b788486-7d5b-4d4c-a5c9-3989d6317337 / 4529da10-c5ab-49f8-be24-6bb5e7e317e1b8549250-edc9-4f21-a4b7-96fbaafd4782 / 86136b36-66e2-49a8-aa95-e5de0d802e61
blocking, tables, confirm 800-8637159bd47-2352-49de-9dd2-497f8a3247a0 / 4629e513-2dac-459e-a018-e5faef0ed50af10f72f3-3e38-4ed2-bb13-58283d529243 / 044327fe-d6f2-4c0e-8ae3-cfa7b0492ab5
blocking, tables, population 800-86382629df7-0f8a-4006-a042-60d0a6ebd16c / 36a7adfd-d1ce-49d3-a25f-ccec8f616c238e3cc677-7fcf-4a2c-842c-e663cc626632 / 4aa3d3a3-b395-4248-9837-ca3c09eb0ec1
gate, tables, dev 0-6325c0c3ef-acce-4275-aa62-58fd11bba45e / 10dead1d-160a-4c00-8b08-b1f77a5c75b30b2dc424-752f-422c-94a9-3b91c60838dc / 86184ec9-2a1a-4944-bca0-c6a983829794
gate, tables, confirm 800-863d8769e27-605a-4c7c-880a-bf2adaaed80e / 82e6046b-1ba5-44d9-998c-fa4ec398244fdba26122-eb55-425a-877a-510ccd1fbc35 / 773e53b5-26ce-42e4-8aa5-2565363f1f99
gate, tables, population 800-8635e8dd398-7515-4117-b0e0-bd0ab50e2a57 / c29e9c07-6499-464c-9cb7-4aa7c090c1591af5542d-6c6d-4334-a282-a51d481449a0 / ad9a07b9-939c-49c4-99d2-df93b7b51b47
blocking, blend 0.25, dev 0-6320520824-b14b-48a2-94d2-468b77fa4d3a / f9113c62-9c89-4095-9e81-cbb6c06d5dc019dcce6e-a687-42fe-9652-4ebd7e21b169 / ba368081-2db1-4998-9e81-902ef7a7bace
blocking, blend 0.25, confirm 800-863ab1261cd-a9b2-4828-8002-3706e6db088b / c07b2268-3e6b-4055-93f1-bc6405019ca08866aa31-389c-419c-b031-3040f00bb8d7 / 3fb6583b-bc5c-4b8e-a19e-c62cf6c8f650
blocking, blend 0.25, population 800-8630bf9d6ee-2cf7-4928-b3d1-0a7cc79799df / bd42145a-ca36-457b-954b-46c2980277879c0cf8af-99c2-42ab-ba96-e51b9aa6d3bd / f95c0335-c77f-4d94-8026-b05cb06e855c
blocking, blend 0.25, extension builders 864-927dd8dfd4f-9922-4621-b175-5c52db0df335 / 90d394ae-fc62-4426-aca0-5f04bd54f2a685c4582f-dd60-4705-a15b-7e0ec9aa757f / 4e5d2807-1875-431f-b3ea-60a88f1ed2d9
blocking, blend 0.25, extension population 864-927ddf036cd-b4b2-49cd-9473-aff82f0a336e / 66a398f5-9b69-442f-84f3-fd1fa219fd4638d6d46d-d777-45fb-87d6-81972cf3f570 / ff3fe1b1-e62e-4271-8c35-4bb44e07764f
gate, blend 0.25, dev 0-63849b3f9f-e311-41a9-8462-ca01898eda3d / eaec0233-a70b-4af4-8346-604a003e8f8c95a95d6d-de73-400b-bf2c-f999c4c9f04c / 160505ec-d7fb-4c53-b8a0-59f6ecccad22
gate, blend 0.25, confirm 800-8634915a44c-ca93-45cf-86f3-31e11c282d42 / 8d3680d8-d891-41be-a3e1-ca1ec203e7b2a8c21c94-a6d6-4b1b-9344-274989d58976 / 79e0863d-47ac-47c4-adc2-2ef8b800d544
gate, blend 0.25, population 800-86352a94b11-6ccc-4e9b-9396-6bb01d581011 / 4425d52b-8a9b-49f9-9c0d-1eecc7c4edb4a94f59d0-72bf-4245-af2b-2a3e1c7a7acc / 5b51b4e0-633d-43ac-bf47-59d5ccd532e0
blocking, full blend hand 1.0, dev half A only661b57ce-4262-40db-ab34-c2a84d6d5960 / 4af53f81-6e2b-4a10-bdff-26fc68d192c3partner abba442e-debf-4472-8343-c393b492b396 withdrawn before running

Seating-corrected effects per stage, with the seating term beside each:

ArmStageEffect (95% interval)Seating term
blocking, tablesdev−0.008 (−0.019 to +0.003)+0.098
blocking, tablesconfirm+0.002 (−0.010 to +0.014)+0.084
blocking, tablespopulation+0.002 (−0.007 to +0.011)−0.041
gate, tablesdev−0.020 (−0.062 to +0.023)+0.082
gate, tablesconfirm−0.018 (−0.066 to +0.031)+0.033
gate, tablespopulation−0.023 (−0.060 to +0.013)−0.047
blocking, blenddev+0.027 (−0.011 to +0.065)+0.152
blocking, blendconfirm+0.006 (−0.049 to +0.061)+0.061
blocking, blendpopulation−0.059 (−0.096 to −0.021)+0.070
blocking, blendext builders−0.004 (−0.051 to +0.043)+0.109
blocking, blendext population−0.008 (−0.046 to +0.030)+0.027
gate, blenddev−0.061 (−0.107 to −0.014)+0.111
gate, blendconfirm−0.059 (−0.112 to −0.005)+0.063
gate, blendpopulation+0.022 (−0.026 to +0.069)+0.022

After-the-fact pooling: blocking under the tables is −0.003 (−0.011 to +0.005) over the 128 builders seeds and −0.001 (−0.007 to +0.005) over all 192 boards; on the blend it is +0.010 (−0.017 to +0.037) over the 192 builders seeds and −0.033 (−0.060 to −0.006) over the 128 population seeds. The gate is −0.019 (−0.051 to +0.014) over the 128 builders seeds under the tables and −0.060 (−0.095 to −0.024) under the blend, the one refutation with an interval excluding zero across the builders stages; its population stage crosses zero. The extension fired only for the blocking blend arm (128-seed read +0.017 with the interval reaching −0.017, inside the 0.03 gate) and faded it to +0.010. The combination arm was not registered: the two switches never both read positive in one leaf context. The full-blend half A read +0.039 (−0.066 to +0.144) as a single seating and counts for nothing on its own.

Interpretation: the learned leaf already prices expansion pressure, so the blocking shortlist's extra candidates (0.04 to 0.08 blocking builds per game against the control's 0.02 to 0.05) change the board too little to move wins, in line with the hand-leaf corrected estimate of +0.008. The gate does what it says (award held at game end 38% against 53% on the blended development boards) and the races it declines were worth entering: it loses about 0.06 wins per game under the blend. Decision cost: the blocking weight adds about 14% per decision under the tables and about 30% under the blend; the gate is free or slightly cheaper. Neither switch is worth the browser, which runs the hand-written leaf where both already measured zero. The report has every cohort table, the comparison with the hand-leaf numbers, and the diagnostics.

Failures and notes: my first queue scripts passed --threads through just engine-run, which takes no such argument; the failure was immediate, before any game was played, and the registrations were reused once the scripts called python3 -m harness.engine run directly. One session ended with an opencode error while cohorts ran; no run was affected, and the lane runners survived it. The machine ran at a load average of 80 to 170 for most of the day (ten agents on 32 cores), so wall times say nothing about search cost; the decision-time ratios are taken within each run. Two smoke games against throwaway seeds (kept under /tmp/opencode/roads-tables-smoke/) verified the seat specifications before registration; plumbing only, not evidence. All 29 runs are archived with verified receipts under records/artifacts/.

Attribution: Kimi K3 (baseten/moonshotai/Kimi-K3) through OpenCode.

Build prediction under the learned leaf

Study adaptation/prediction-tables. The three build-prediction switches of the hand-leaf study (a denial leaf weight, the predicted opponent model, and the predicted space threat) were retested under the learned n-tuple tables leaf, each as a swapped pair (candidate in slot 0 against the unchanged tables-baseline control in slot 1, then the same two searches with slots swapped) at depth 2, deterministic, four rotations, 256 games per half, six threads. The denial weight is a leaf term and is inert under the tables alone, so that arm runs on a blended leaf. Its first registrations used the full blend (leaf hand 1.0 in both seats); the patterns/leaf-blend screen then measured that blend 0.207 wins per game below the tables alone, so all six were withdrawn before any of them ran and the arm was registered again on the quarter blend (hand 0.25, which the screen measured +0.074 above the tables). Withdrawn before running: 2324c88f-9407-455f-a76c-daafd52bf7e1, adb816b7-c2f2-4a47-a545-60b035870e45, d160d8e0-2d2a-45cb-ba12-f5fa82956d3a, 6f0f27f8-286c-424a-9786-7b43875e62cb, c62b41d6-5c90-447a-8196-6acb9b6200f1, and ff104571-dcc2-48f0-9dd5-0bae29a7cff5.

The predicted space threat ran its population stage first, as directed, because the switch only changes trades and the builders lineup trades less. Population lineup: candidate and control in slots 0 and 1, a second tables-baseline search in slot 2, eta in slot 3. Builders lineup: eta in slot 2, fast in slot 3.

Predicted space threat, under the tables alone:

StageHalf A experiment and runHalf B experiment and runEffect (95% interval)Seating term
Population, seeds 800-8632a3e7ddb-a627-4e0a-a5ea-0f1934e6d166, 98b12730-0997-4f13-932a-671536080240078dc121-0ee7-44f2-80c6-25b150fe5c14, 5d4485eb-5a7d-4525-8d5e-83b059633c39+0.047 (-0.004 to +0.098)-0.027
Development, seeds 0-637a37ead7-5990-4ced-8ea6-cc139c14d3cb, 2fb51aa4-ec78-441a-ac88-4f3a1a1b077de8ed1b4d-9b55-41c0-b81a-72ca3446a6f0, 7c07bce7-df9f-4bfb-b95c-73f1cc1a0f54+0.014 (-0.037 to +0.064)+0.150
Confirmation, seeds 800-863721e6d22-cda9-4bbd-920f-a4c97caa1293, 97c2c3c7-f23c-484f-8316-d8ef40f35728d9e60b56-b687-4452-8a44-8e7a342a1f97, e6694d7e-7ca2-4a3c-b63a-7f98ad345a59-0.006 (-0.057 to +0.045)+0.100

Pooled over the 128 builders-lineup seeds, an after-the-fact pooling: +0.004 (-0.032 to +0.040). The extension rule asks for a positive mean and an interval that comes within 0.03 of zero; the mean is positive but the nearest endpoint is 0.032 away, so no extension runs, and 64 more seeds could not separate +0.004 from zero anyway.

Predicted opponent model, under the tables alone:

StageHalf A experiment and runHalf B experiment and runEffect (95% interval)Seating term
Development, seeds 0-630f311f07-69b0-43a2-b00d-e65260e78c68, cd0eef08-680b-4639-9dba-8eb9e98ff79af7646e35-5a6e-4923-92eb-8ed00c0dbc55, 4dc942bd-5343-444d-aef8-9e89b60cc004-0.010 (-0.066 to +0.046)+0.096
Confirmation, seeds 800-863131bd98f-9842-4da4-9ce6-4f818f018982, 596e8dd0-957e-49e8-bd30-47df5d0a6312906aeeee-fb36-4c4c-8e4c-bfb515c8e3b9, 26be7683-0b30-4cdb-a27a-1900a11adcc4+0.000 (-0.063 to +0.063)+0.055
Population, seeds 800-863832402a0-649a-4afe-a6b5-0120eafe42f7, 3e1db769-42a7-48e3-842e-311d45776d327bed7450-6301-44bb-81cb-bafb69a54399, 15282f9d-520d-4290-8931-bf0739e88983-0.004 (-0.060 to +0.052)-0.012

Pooled over the 128 builders-lineup seeds: -0.005 (-0.047 to +0.037). The mean is not positive, so no extension runs.

Denial leaf weight 0.5, on the quarter blend (hand 0.25 in both seats):

StageHalf A experiment and runHalf B experiment and runEffect (95% interval)Seating term
Development, seeds 0-6339f22891-3b02-4f8b-9d2a-54a68ecf8d65, 3bbbfea8-c08e-4910-9926-566ba647d534ad623e9c-d09c-4328-8f90-868cc0cc719c, b0c63544-f1ba-4a4c-924d-03ef381c4dbb+0.002 (-0.040 to +0.044)+0.123
Confirmation, seeds 800-8633b404013-a489-4f0f-8c72-d5139030896a, 106ab3c6-89e2-47f5-a17b-50f4e91ecbc8f454b374-037c-4ea9-9dcc-34b9222d3fe6, 591c905a-0d87-4216-8b35-df28b3256109-0.037 (-0.071 to -0.003)+0.057
Population, seeds 800-8631fda980d-5933-4182-8629-bb38219163ef, 5463cc1a-fd0f-467b-a33a-63992e8ebe0829355633-9630-484b-893c-5fa59b8bd158, ec5e3a3e-e989-40a6-bc77-701a2bbfc519+0.023 (-0.009 to +0.056)-0.004

The confirmation interval excludes zero on the wrong side: the denial term is refuted on fresh seeds, repeating the hand-leaf study's fall from +0.061 to -0.025. Pooled over the 128 builders-lineup seeds: -0.018 (-0.045 to +0.010), so no extension runs. The term also costs: the denial seat's mean decision time was about double its control's in every half (1257 against 600 ms, 922 against 454, 199 against 105, and the mirrors), because the predictor runs at every leaf it evaluates.

Diagnostics from the retained games: the threat candidate made about 1.5 more offers per game than its control (16.3 against 14.8 on the population lineup) and declined about 1.4 fewer, so the switch does change who the seat trades with. The opponents candidate's own counters (trades, offers, builds, robber shares) match its control within noise. The denial candidate lost slightly fewer frontier sites per game than its control on the builders lineup (1.78 against 1.84, from sites_lost), as it did under the hand leaf, without turning the board into wins.

Prediction accuracy, from one observer seat's public knowledge on the population lineup (unregistered diagnostic, seeds 800 to 815, 64 games, --predict-diag 0): the predictor named eta's next completed build in 59.0 percent of turns (256 of 434) and a tables-baseline search's in 20.0 percent (348 of 1739). Under the hand leaf it scored 52.7 against eta and 28.5 against the hand-leaf search, so the learned leaf is a less predictable opponent, not a more predictable one, and builder-directed terms have even less to read at a table of searches.

Interpretation: none of the three switches separates from zero under the learned tables. The threat switch is the only arm with a positive-leaning reading anywhere (+0.047 on the population lineup, -0.004 to +0.098, matching its hand-leaf fresh reading of +0.031), but no interval excludes zero, its builders-lineup estimate is +0.004, and the worth-the-browser rule needs at least +0.03 pooled with the interval excluding zero. The denial term is refuted on fresh seeds for the second time at double the decision cost. All three switches stay off under both leaves; the baseline and the evidence boundary do not change. The report has the tables and the browser reading.

Failures: run 83989250-85e2-4fe5-a9fd-c2a1c5aedef7 (experiment 2a3e7ddb-a627-4e0a-a5ea-0f1934e6d166) was interrupted after 6 of 256 games when my session tooling killed the detached process; the six completed games are retained and not pooled, the run is filed as interrupted, and the half was rerun from scratch as 98b12730-0997-4f13-932a-671536080240. One pair's effect was first computed with the halves reversed in a scratch note and corrected before anything was filed. The machine was shared with nine other agents, so wall times (about 1.5 to 2 hours per 256-game half at six threads) say nothing about decision cost; the within-run decision times above do. All 18 completed halves finished 256 of 256 games with no invalid, stalled, forced, or failed decision.

Attribution: GLM-5.3 (baseten/zai-org/GLM-5.3) through opencode.

Robber targeting under the learned leaf

Hypotheses: four candidate-generation switches, each tested alone against the unchanged tables-leaf baseline (v2:{"depth":2,"leaf":{"tables":"/home/keshav/settlers/research/artifacts/ntuple/hex-portfolio-main.bin"}}) as a swapped pair, half A the arm in slot 0 and half B the arm in slot 1, 64 deterministic seeds per half. Predictions, each falsifiable: blocking the points leader's best hex (robber.leader) wins more than blocking the most pips; choosing the victim by the resource this seat needs (robber.need) beats hand size; threat-weighted blocking that spares low-threat partners (robber.threat) beats ignoring threats; and the late-game leader bias (endgame.block_leader) beats the default after two thirds of the game. Stages for every arm: development seeds 0-63 and confirmation seeds 800-863 in the builders lineup (eta and fast in slots 2 and 3), population seeds 800-863 with a third tables search in slot 2 and eta in slot 3, and a preregistered extension to seeds 864-927 in both lineups for arms whose pooled builders effect was positive with an interval within 0.03 of zero. Decision rule: all games complete; support only if the seating-corrected effect's 95 percent seed interval excludes zero in the predicted direction.

Experiments under containment/robber-tables (36 registrations, 36 runs, all 256 of 256 games complete, 9,216 games). Development half A / half B (experiment, run): leader 792be780/00c2cbe1 and 96d43c3b/38728ce3; need 65b1ddb2/5c2f8ab4 and 55e137f4/c8749e28; threat 7bbc7aa7/47060353 and 2d811991/e0c6acab; block_leader a01d63ec/2321b99f and 20ec74b1/56625a37. Confirmation: leader bdf5010a/8129fb6c and f1fadb40/026bd4f5; need 26a2fb68/20b15545 and 284171c8/3c579646; threat 3420701a/227b8813 and 565a46fd/059e8938; block_leader 6e645e60/d8adbaf5 and 4e9d4801/6278b419. Population: leader 1dde9819/6b0408e8 and b2878c09/44be36ac; need fef82bc6/a75e3de9 and 2385270c/2b2182d5; threat 62b6c4e8/7a435890 and f85f55d3/8319a450; block_leader 72d97267/f2207f5e and 458b1c88/a626fe42. Extension, need: 2b68a0f5/54d7090b and 3e6d14bf/d55af6e8 (builders), 924f0b5b/33d3b566 and 3203b993/da3ec107 (population). Extension, block_leader: 4d64e731/06d296f3 and 57c39f3a/38ecd1ca (builders), 4094eeea/3a4f4e34 and 7ef0acfd/844109d4 (population). Final combination (need + block_leader) on fresh seeds 928-991: b5d23033/9e11f6ff and da65be79/ffc247e0 (builders), 2043385b/97c0c56c and fc2983ec/3d8efaee (population). Full UUIDs are in the report's cohort table and in the run records; every run has a verified archive receipt under artifacts/.

Interpretation. Every stage's seating-corrected effect is inconclusive: development leader −0.020 (−0.079 to +0.040), need −0.004 (−0.047 to +0.039), threat +0.006 (−0.051 to +0.063), block_leader +0.010 (−0.020 to +0.039); confirmation +0.033 (−0.025 to +0.091), +0.014 (−0.031 to +0.058), −0.016 (−0.065 to +0.034), +0.000 (−0.029 to +0.029); population +0.031 (−0.030 to +0.092), −0.008 (−0.045 to +0.030), +0.043 (−0.005 to +0.091), −0.038 to +0.030 for block_leader at −0.004; extension need +0.039 (−0.001 to +0.079) builders and +0.025 (−0.013 to +0.064) population, block_leader +0.023 (−0.003 to +0.050) builders and +0.033 (+0.007 to +0.060) population, the only cohort of the program whose interval excludes zero. Pooled after the fact over stages: builders leader +0.007 (−0.035 to +0.049, 128 seeds), need +0.016 (−0.008 to +0.041, 192), threat −0.005 (−0.042 to +0.033, 128), block_leader +0.011 (−0.005 to +0.027, 192); population leader +0.031 (−0.030 to +0.092, 64), need +0.009 (−0.018 to +0.036, 128), threat +0.043 (−0.005 to +0.091, 64), block_leader +0.015 (−0.007 to +0.036, 128). No arm reaches the worth-the-browser bar of +0.03 pooled with an interval excluding zero. The mechanisms fire: the leader arm lands the robber on the leader's best hex on 31.1 percent of its moves against 27.0 for its controls and robs the leader on 49.9 against 42.2 percent, and the threat arm robs the leader on 47.3 against 42.2 percent while shifting theft toward the other search; the game's other statistics barely move. Decision cost is nil: arm and control decide within two percent of each other in every pair. The raw dev contrasts under the tables (+0.117, +0.105, +0.074, +0.094) are again the size of the seating term, as under the hand leaf. The hand-leaf refutation of the need rule does not reproduce under the tables (hand −0.045 excluding zero, tables +0.016 crossing zero), and the leader and threat population readings point up while their builders pools sit at or below zero, so the honest summary is noise around zero in both leaves. Combining the two arms that read positive, need and block_leader, gave +0.035 (−0.015 to +0.085) builders and −0.039 (−0.090 to +0.012) population on fresh seeds: disagreeing, both crossing zero. All four switches stay off in the server and are not worth enabling in the browser, where the hand-leaf evidence is the deciding tier and reads −0.023, −0.045, −0.033, and +0.012.

Failures and notes: one run was interrupted, b3a6c3ac-f9f6-4468-9259-835b8200f8d7 (leader dev half B, first attempt), killed at 143 of 256 games by a shell timeout on my controlling session; it is filed as interrupted with a manual bundle and the half was rerun from scratch as 38728ce3. No other run failed, and no incomplete game entered any comparison. The machine was shared with nine other agents through most of the program (system load around 150 on 32 cores), so the first stages took about 100 minutes per 256-game cohort and the last ones about 13 minutes after the load fell; deterministic cohorts give the same games either way, and only within-pair decision-time ratios are quoted. The extension arms were selected by the preregistered pooled-positivity rule, which is a data-dependent choice and is named as such in the report. No server change was needed; the switches behaved under the tables in every cohort.

Attribution: GLM 5.3 (zai-org/GLM-5.3) through opencode.