The workplan list read as though GROUND-WP-0002, 0003 and 0005 each existed twice. They did not: three inbound clay-borg finding reports were filed in workplans/ borrowing the number of the workplan they bear on, and each was registered in State Hub as a workplan. A report is correspondence, not a unit of work. The three move to reports/YYMMDD-<slug>.md with their own id space (GROUND-RPT-0001..0003), keeping type: report, status: informational and the extends: link to the workplan they relate to. Their state_hub_workstream_id bindings are dropped and the hub registrations archived, so the hub's workplan list matches the files. Five workplans, one file per number. AGENTS.md records the convention, since the reports arrive regularly and nothing in the repo said where they go. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5.3 KiB
| id | type | title | domain | repo | status | owner | topic_slug | created | extends |
|---|---|---|---|---|---|---|---|---|---|
| GROUND-RPT-0002 | report | clay-borg difficulty measurement, 2026-08-05 — and a retraction of what we nearly sent instead | consumer | ground-game | informational | bernd | whynot | 2026-08-05 | GROUND-WP-0005 |
clay-borg difficulty report — 2026-08-05
GROUND-WP-0005 (difficulty tiers and the Pressure dial) has both tasks
in wait, blocked on a measured baseline. This is that baseline, with its
limits stated.
Generated by make difficulty
(games/ground/examples/difficulty.rs), governed by
clay-borg/specs/RetrospectiveAnalysis.md §4, under
CB-WP-0025 T06.
0. First, what we nearly sent you and did not
Earlier today this report was going to say: "a greedy bot wins 200 of 200 games at five and six seats — the game is too easy there."
It would have invited you to move thresholds. It was wrong, and an adversarial review caught it before it left our repo.
A FirstLegal policy — take the first legal command, no heuristic
whatsoever — scores 0% at five and six seats on the identical deals
where GreedyPolicy scores 100%. At two seats it beats greedy
(76.7% vs 60.0%).
Two unsophisticated agents span the entire range. A single policy's win rate is therefore a statement about the policy, not about GROUND, and we have written that into our spec as a prohibition rather than a preference.
This is the fifth claim we would have sent you on a wrong premise. It is the second stopped before sending.
1. The measurement
make difficulty, 60 seeds per cell:
| seats | winnable | greedy | random | first-legal | spread | undecided |
|---|---|---|---|---|---|---|
| 2 | 60% | 60.0% | 5.0% | 76.7% | 71.7 | 0 |
| 3 | 93% | 88.3% | 6.7% | 25.0% | 81.7 | 2 |
| 4 | 100% | 93.3% | 6.7% | 30.0% | 86.7 | 4 |
| 5 | 100% | 100.0% | 3.3% | 0.0% | 100.0 | 0 |
| 6 | 100% | 100.0% | 3.3% | 0.0% | 100.0 | 0 |
winnable is the column that is not about a bot. It is the fraction
of deals in which an exhaustive search finds a winning line in the final
round. The other three columns are what named policies actually achieve,
and spread is the range between them.
2. How to read it, including what it is not
Read spread first. It ranges from 71.7 to 100.0 percentage points.
Wherever it is large — everywhere — no single policy's rate tells you
anything about the game. That is the finding behind §0.
winnable is conditioned on greedy's play up to the final round. It
is "winnable from where greedy got to", not a property of the deal
alone. A genuinely policy-free figure would search from round 1, which we
measured as unaffordable: our search exceeded 2×10⁶ nodes at two seats
over two rounds. We are telling you this rather than presenting the number
as cleaner than it is.
It is a lower bound. A one-round search cannot see a line that needed an earlier round, so the true winnable fraction is at least these figures.
undecided deals are excluded, not counted as losses. Those are deals
whose search hit the node budget. Folding "we stopped looking" into
"not winnable" is the collapse our spec forbids.
3. What we think this supports, offered as reading not as ruling
The rules are yours. This is what the numbers appear to say.
- Two seats is the tight configuration. 60% winnable in the final round, and every policy struggles. If any seat count is under-tuned for difficulty, the evidence does not point here.
- Four seats and up: every deal we sampled was still winnable in the final round. 100% at 4, 5 and 6 seats. That is compatible with "too generous at high seat counts" — but it is not the claim we withdrew in §0, because it is a statement about deal winnability rather than about a bot's success.
- The 5–6 seat rows deserve the most suspicion.
first-legalscores 0% there whilegreedyscores 100%, which is the widest spread in the table. Something about those configurations makes play matter more, not less — the opposite of "too easy" — and we do not yet understand it.
We are not proposing threshold changes. The measurement's confound (§2) is large enough that we would rather you saw it than acted on it.
4. What would make this a better instrument
- Search from round 1 rather than the last round, which removes the greedy confound entirely. Needs transposition or move-ordering; we have neither.
- A resolution figure — the smallest threshold change the measurement can distinguish, with its N. Our spec requires it and we cannot yet supply it.
- Your Pressure dial, if it lands, gives a second axis to measure against and would make the table two-dimensional.
5. Reproduction
Per GROUND-WP-0004 T02, arithmetic findings cite their reproduction by path:
clay-borg$ make difficulty # the table above
clay-borg$ make self-tests # includes the difficulty controls
Controls, so the figure can fail rather than merely print: a witness must replay to a win; an unwinnable position must be reported as searched out rather than as a budget cut; a budget of one node must not claim exhaustion; and the policy panel must actually disagree, or reporting three policies would be ceremony.