Date 2026-09-09
Status Recorded
Code cargo run --release -p tinyhivemind-hive --example bench -- --scale-sweep
on scale-topology, with --hidden-profile --episodes 1000 --sizes 3,5,8,16,32,64;
the federation figures from --swarm --desks N --per-desk 4 --episodes 200.
Sample 1000 seeded rooms per size, every arm deciding the same rooms.
Simulated participants, so the numbers are reproducible from the seed rather
than sampled from a model.
Every recorded number in this repository is for a room of five. The size table
on the wiki already shows something moving — hive+'s margin over the
matched-budget vote decays from +3.2 at three members to +1.2 at eight —
and it stops at eight because a fixed eight-name table in the harness stopped
it, not because anything about the library does.
So: at what room size does the way members reach each other start to matter, and which way.
MEMBER_ROLES was a fixed array of eight and --agents clamped to its length;
DESK_NAMES was four and --desks clamped to that. Both are now generated past
the named entries, and both keep the original names for the first entries so
every recorded number reproduces exactly rather than approximately — verified:
ladder 57.6 · vote 78.5 · hive 73.3 · hive+ 82.1 at 5000 rooms, unchanged, and
the swarm arm still lands on swarm 77.0 · pooled 74.5 against a record of
77.5 · 74.5.
Run the ladder past eight on the default task and the answer is that nothing matters:
agents 8 16 32 64
vote 83.3 96.7 99.3 100.0
hive+ 83.3 95.0 99.3 100.0
A plurality of independent noisy readings converges on the truth by itself as the room grows, so by sixteen members there is nothing left for a protocol to add and both arms saturate. A benchmark run there measures the law of large numbers.
The regime worth sweeping is the one where pooling does not trivially win.
Hidden profile — a decoy above every member's own argmax except one, who alone holds the fact that rules it out. 1000 rooms per size.
arm 3 5 8 16 32 64
ladder 44.6 33.8 28.4 27.0 22.5 19.4
vote 31.2 15.9 7.4 1.1 0.0 0.0
hive+ 31.3 16.0 8.7 1.0 0.0 0.0
hive+fact 24.1 15.8 9.8 0.9 0.0 0.0
hive+rounds 31.3 16.1 9.1 1.1 0.0 0.0
hive+fact° 56.7 44.7 32.9 17.6 6.4 1.1
hive+pooled 95.7 91.9 87.0 85.2 87.4 89.8
Three things fall out, and the third is the one worth building on.
Every floor-bound channel dies. vote, hive+ and on-floor pairwise
(hive+fact) all reach 0.0% by thirty-two members. Growing the room makes a
hidden profile monotonically worse for any majority mechanism, because the lone
fact-holder is one voice among more and more of them.
The information never leaves the room. hive+pooled — every reading and
every fact in every member's hands, free — is flat at 85–96% across the whole
ladder. Nothing is lost as the room grows; what fails is every mechanism for
moving it.
Only an off-floor channel survives. hive+fact°, the aimed check carrying
the fact rather than a number, held before the episode opens so it spends no
turn, is the single arm above zero at every size. At five members it is
44.7 against hive+'s 16.0; at thirty-two it is 6.4 against 0.0. In
absolute points its lead decays — but it is the only thing that is not nothing.
This is the same law ADR 0011 and ADR 0012 established at five members, and the room size is what makes it loud: an exchange that costs a turn cannot pay for itself, and the bigger the room the more turns the floor is already spending.
contacts/ep 3 5 8 16 32 64
hive+rounds 13.5 32.0 76.5 275.3 1059.1 4173.7
hive+rounds — continuous off-floor exchange, everybody contacting somebody on
every turn — costs model calls that grow roughly with the square of the room and
buys nothing: 31.3 → 0.0, identical to hive+ at every size. What works
is the aimed, bounded, fact-carrying single check, not volume. A host reading
this should size exchange_cap against who needs reaching, never against how
many peers exist.
Correction, 2026-09-10. The diagnosis below names the wrong side of the exchange. It says a referral costs the answering desk a floor turn; the code says otherwise —
Board::deliverappends the answer without callingstep, so the answering desk spends no budget at all. What costs a turn is the ask:Board::take_turnlets a member spend the turn the episode authorized on asking, and the host's width bound permitsD - 1asks against a budget of3 x per_desk. At twelve desks of four that is eleven asks against twelve turns, which is the exhaustion reported here. The mechanism is the same one — an exchange tied to the floor cannot pay for itself — and the implied fix is the same, but it belongs on the ask. It is implemented and measured in2026-09-10-hive-at-scale.md, which also reproduces this collapse at a hundred desks and closes it.
desks 3 6 12 24
swarm 78.0 66.5 0.0 0.0
pooled 74.5 87.0 97.5 99.5
At twelve desks the swarm arm decides nothing at all. The diagnostic says why, and it is not that referral cannot reach:
arm correct decided turns crossings stranded
swarm 0.0% 0 370.0 246.0 20.0
swarm desk endings: converged 0 · deadlocked 0 · exhausted 2400 · idle 0
Every desk exhausted its turn budget, and the cost is on the ask.
Board::take_turn lets a member spend the turn its episode authorized on
asking another channel, and the host's width bound permits one ask per peer —
D - 1 of them — against a budget of 3 x per_desk. At twelve desks of four
that is eleven asks against twelve turns. The number of peers grows with the
federation while a desk's budget stays whatever its own size earned, so the
federation spends itself asking and never decides. Twenty answers are stranded
on top of that, because the desks that asked had closed before the replies
arrived.
(An earlier reading of this table blamed the answering desk. It is wrong:
Board::deliver appends an answer without calling step, so answering spends
no budget at all. The retraction at the head of this section has the detail.)
That is the on-floor exchange law again, one level up: inside a room an
exchange tied to the floor costs the asker a turn, and between desks it costs
the asker one there too. The fix implied is that a referral should be askable
off the floor, and it is implemented and measured in
2026-09-10-hive-at-scale.md.
- One task. A hidden profile is the adversarial case on purpose. It says nothing about a room whose members are merely noisy, where the uniform table above shows every mechanism saturating.
- Simulated members. The participants are arithmetic. What is measured is whether a policy moves information, not whether a model would write a useful row.
hive+fact°is given oracle targeting. It picks its peer from private room state rather than from the transcript, so it is an upper bound on what an aimed off-floor check is worth, not an implementable arm. The gap between it andhive+factis what aiming plus scheduling are jointly worth; the gap between it andhive+pooledis what is still on the table.- Nothing here was run live. No model, no desk, no PE 1006.