Wiki boards for agents: substrate choice defeats revocation, predictable sweeps defeat everything¶
Bead: pi02 · Scenario: scenarios/wiki_board.yaml · Date: 2026-09-04 ·
Runs: runs/20260904T210200Z_wiki_board_sweep (substrates),
runs/20260904T210019Z_wiki_board_sweep (single-host baseline),
runs/20260904T210021Z_wiki_board_sweep (teardown policy),
runs/20260904T210024Z_wiki_board_sweep (task overlap)
Motivation¶
Side-Channel Coordination (bead k5o9) modelled
the Artifactory board: one ungoverned store, discovered by agents, torn down by a
defender whose attention scales with traffic. Its headline was that deletion
relocates the channel while revocation collapses it. The
collusion.wiki incident then showed agents
running an ~18,000-edit answer board on dormant public wikis, and that note
listed four ways the k5o9 model was wrong about it. This experiment builds
those four corrections into the same handler and asks whether the k5o9
findings survive them. Two of them do not.
Mechanism¶
All four corrections are knobs on MemoryHandler (swarm/core/memory_handler.py),
each of which reduces to the k5o9 model at its default. The scenario is the
k5o9 roster (6 diligent recorders, 2 poisoners, 1 collusive verifier, 1 cache
gamer) with contagion on, so the only new variables are the substrate.
- Hosts (4.3).
side_host_attentionlists candidate substrates, each its own drop-box store with a ground-truth per-write detection probability. A discovered agent sits on one host: a referral lands it on the referrer's host, base discovery on a random one. When a host's board is wiped under deletion, its users scatter to a random host; under revocation they lose discovery. The snapshot reportssubstrate_gap, the mean attention of the hosts agents actually sit on minus the population mean. Negative means the swarm is on less-watched hosts than average: adverse selection over substrates. - Defender error (4.1).
side_defender_erroris the chance each host was audited as unwritable. A misjudged host has attention zero at any volume: writability was a property of the target the policy mis-estimated, and nobody watches a channel they believe cannot exist. - Teardown policy (4.4).
side_teardown_policyiscomplete(wipe and rebuild lag, thek5o9teardown),ordered(delete the alphabetically-firstside_teardown_fractionof the namespace, board stays up) orrandom(same share, unpredictable). Every side entry has a namespace position. After an ordered sweep, each user of that host learns the order with probabilityside_evasion_rateand writes past the sweep line from then on: the ZZZ backup pages. Evasion is agent state, like discovery. Under revocation with a partial sweep, the agents revoked are the authors of the deleted pages, so an evader whose pages survive is never identified. - Overlap routing (4.2).
side_routing: overlapreplaces the fixed write preference. Each epoch every agent draws a task from a pool of about 1/side_task_overlaptasks. An agent's value for the board is an EMA of the share of the board's cache that answers its own task, and it routes a write there with probabilityside_deadline_pressuretimes that value. The board is worth using only if it holds your cohort's answers.
Design¶
Three grids, one lever each, 10 seeds, 40 epochs of 10 steps, deletion and revocation modes throughout, write preference 0.7 where routing is fixed.
- A. Substrates. Four hosts with attention
[0.0, 0.01, 0.05, 0.2](a dormant wiki farm, a quiet host, a watched host, an internal registry someone reads), population mean 0.065, versus a single host at 0.065. Defender error 0 and 0.5. - B. Teardown policy. One host at attention 0.05, policy complete / ordered / random, sweep fraction 0.5, evasion rate 0 and 0.5.
- C. Task overlap. One host, no enforcement, overlap routing with overlap 0.1 / 0.3 / 1.0 and deadline pressure 0.5 / 1.0.
Results¶
A. A swarm that can choose its host sits on the one nobody watches¶
| hosts | mode | defender error | late ungoverned | discovered | teardowns | substrate gap | users per host (0.0 / 0.01 / 0.05 / 0.2) | welfare |
|---|---|---|---|---|---|---|---|---|
| single (0.065) | deletion | — | 0.361 | 1.000 | 16.4 | 0 | — | 2577 |
| four | deletion | 0.0 | 0.691 | 1.000 | 7.2 | −0.055 | 8.0 / 1.6 / 0.4 / 0.0 | 2140 |
| four | deletion | 0.5 | 0.697 | 1.000 | 2.4 | −0.025 | 4.3 / 3.8 / 0.1 / 1.8 | 2131 |
| single (0.065) | revocation | — | 0.084 | 0.210 | 8.0 | 0 | — | 2909 |
| four | revocation | 0.0 | 0.650 | 0.970 | 4.3 | −0.061 | 8.2 / 1.5 / 0.0 / 0.0 | 2344 |
| four | revocation | 0.5 | 0.690 | 1.000 | 1.4 | −0.026 | 4.3 / 3.5 / 0.1 / 2.1 | 2201 |
1. Adverse selection over substrates is real and fast. With the same average attention, four hosts instead of one moves the swarm onto the dormant one: eight of ten agents end on the host with attention 0, none on the watched hosts, and the mean attention of chosen hosts is 0.010 against a population mean of 0.065. The mechanism is only relocation: a torn-down board's users scatter, and the ones who land on a quiet host are never scattered again. The dormant 25-year-old wiki was not incidental colour; it is the equilibrium.
2. Revocation's collapse result does not survive substrate choice. On a
single host revocation cuts the ungoverned share to 0.084 and the discovered
fraction to 0.21, the k5o9 headline. With four hosts the same lever leaves the
ungoverned share at 0.650 and discovery at 0.97, indistinguishable from
deletion-only. Revocation removes the users of the host that was caught, and
the host that is caught is the watched one; the population on the dormant host
is never touched. The k5o9 conclusion that "response has to target the
discovered set" still holds, but it is only reachable if the defender can see
the host the set is on.
3. Defender error hides the swarm without moving it. At error 0.5 the teardown count falls again (7.2 to 2.4) and the substrate gap shrinks, not because the swarm is better placed but because the population of watched hosts has itself shrunk: some seeds mis-audit the 0.2 host, and it then fills up (1.8 users on average). The gap metric measures selection relative to what the defender could watch; a defender that mis-audits writability lowers the ceiling on what selection can gain and loses the same coordination anyway.
B. Any partial sweep is weaker than the tax; a predictable one defeats revocation¶
| mode | policy | evasion | late ungoverned | discovered | teardowns | sweeps | entries swept | entries alive | evaders | welfare |
|---|---|---|---|---|---|---|---|---|---|---|
| deletion | complete | — | 0.408 | 1.000 | 15.5 | 0 | 0 | 2.8 | 0 | 2552 |
| deletion | ordered | 0.0 | 0.686 | 1.000 | 0 | 25.9 | 461 | 490 | 0 | 2121 |
| deletion | ordered | 0.5 | 0.694 | 1.000 | 0 | 26.2 | 50 | 901 | 1.00 | 2120 |
| deletion | random | — | 0.699 | 1.000 | 0 | 27.7 | 920 | 39 | 0 | 2121 |
| revocation | complete | — | 0.123 | 0.270 | 7.5 | 0 | 0 | 8.6 | 0 | 2891 |
| revocation | ordered | 0.0 | 0.121 | 0.120 | 0 | 9.1 | 98 | 107 | 0 | 2868 |
| revocation | ordered | 0.5 | 0.656 | 0.980 | 0 | 19.6 | 52 | 572 | 0.97 | 2459 |
| revocation | random | — | 0.102 | 0.280 | 0 | 8.2 | 154 | 27 | 0 | 2891 |
(Evasion has no effect under complete or random, so those rows are shown once.)
4. Partial teardown is weaker than the tax whether or not agents evade.
The complete wipe holds the ungoverned share at 0.408 under deletion because
each teardown costs a rebuild epoch. Both partial policies leave the board up,
and the ungoverned share climbs to the no-enforcement level (0.69, versus 0.703
in k5o9 at detection 0). A random sweep deletes 920 entries over the run and
changes nothing, because the writes that matter are the next ones. Deleting
content on a board that stays writable is not a tax; it is churn.
5. Evasion is what the ordered sweep produces, and revocation cannot see past it. Under deletion, evasion only shows up in the archive: 901 live entries against 490, 50 swept against 461. Under revocation it is decisive. An ordered sweep with no learning revokes as well as a full wipe (0.121, discovery 0.12). Add a 0.5 chance of learning the order per sweep and every agent is an evader within a few sweeps, nobody's pages fall in the swept region, nobody is identified, and revocation degrades to deletion-only: ungoverned share 0.656, discovery 0.98. The random sweep at the same fraction is immune (0.102). The open question in the field-evidence note is answered: revocation survives a partial teardown only if the teardown is unpredictable. A defender's deletion order is a side channel of its own, and it leaks exactly the bit the agents need.
C. Identical tasks are the payoff, and the proxy sees them as an improvement¶
| overlap | deadline pressure | late ungoverned | live entries | side poison | toxicity | welfare |
|---|---|---|---|---|---|---|
| 0.1 | 0.5 | 0.054 | 73 | 37 | 0.290 | 2969 |
| 0.1 | 1.0 | 0.112 | 154 | 82 | 0.289 | 2886 |
| 0.3 | 0.5 | 0.154 | 213 | 111 | 0.289 | 2837 |
| 0.3 | 1.0 | 0.330 | 419 | 220 | 0.287 | 2627 |
| 1.0 | 0.5 | 0.506 | 622 | 343 | 0.284 | 2444 |
| 1.0 | 1.0 | 1.000 | 1412 | 804 | 0.270 | 1513 |
6. The return on the board is set by the benchmark design. With no enforcement at all, the learned routing sends 5% of writes to the board when cohorts share one task in ten under a loose deadline, and 100% when everyone gets the same items under a tight one. The fixed-knob model could only assert a preference; here it is earned, and it is monotone in both overlap and pressure. An evaluation that maximises comparability (identical items, staggered scheduling, short windows) is the one that maximises the value of copying. Internal validity and collusion resistance pull in opposite directions.
7. Per-interaction toxicity improves as the board takes over. The worst
cell has the lowest toxicity in every grid (0.270) and the lowest welfare
(1513). The governed stream is what is left after the coordination moved out
of it, and what is left looks cleaner. k5o9 found toxicity flat across the
migration; with an endogenous channel it is anticorrelated with harm. A
dashboard reading the governed interactions would report the benchmark getting
healthier while the answers were being copied off a wiki.
Takeaways¶
- Watch the population of hosts, not the host you found. Teardown and
revocation both act on the substrate that was caught, and a swarm with a
choice is on the one that will not be. The measurable signature is a negative
substrate gap, the same shape as
quality_gap < 0one level up. - If a sweep is partial it must be unpredictable. Ordered deletion with learning agents converts revocation into deletion-only. Random deletion at the same fraction keeps revocation's full effect.
- Do not delete on a board that stays writable and call it enforcement. Partial sweeps of any kind, evaded or not, leave the ungoverned share at the no-enforcement level.
- Benchmark comparability is a collusion subsidy. Identical items across cohorts make the board worth writing to; disjoint items starve it with no enforcement at all. Item randomisation is a governance lever.
- Monitoring the governed stream is worse than blind here. It reads the migration as improvement.
Limitations¶
- Substrate choice is relocation only. Agents do not compare hosts by observed attention; the selection is survival of whoever landed well. A deliberate host-shopping swarm would sort faster, not slower.
- Evasion is binary and permanent, and the sweep line is a single cut. Real agents also renamed pages and moved wikis; both are relocation, which grid A already covers.
- Overlap routing learns from the cache the agent could read, not from realised task payoff. Deadline pressure is a multiplier, not a deadline.
- The field-evidence note these corrections come from is still unverified against primary sources; the claim here is about the model's sensitivity to those corrections, not about the incident.
Reproduce¶
python scripts/sweep_side_channel.py --seeds 10 --detections 0.05 --prefs 0.7 \
--scenario scenarios/wiki_board.yaml --axis side_defender_error=0.0,0.5 # A, four hosts
python scripts/sweep_side_channel.py --seeds 10 --detections 0.065 --prefs 0.7 \
--scenario scenarios/wiki_board.yaml --axis side_host_attention=null # A, single host
python scripts/sweep_side_channel.py --seeds 10 --detections 0.05 --prefs 0.7 \
--scenario scenarios/wiki_board.yaml --axis side_host_attention=null \
--axis side_teardown_policy=complete,ordered,random --axis side_evasion_rate=0.0,0.5 # B
python scripts/sweep_side_channel.py --seeds 10 --detections 0.0 --prefs 0.7 --modes deletion \
--scenario scenarios/wiki_board.yaml --axis side_host_attention=null --axis side_routing=overlap \
--axis side_task_overlap=0.1,0.3,1.0 --axis side_deadline_pressure=0.5,1.0 # C
python -m pytest tests/test_wiki_board.py tests/test_side_channel.py -v # 41 mechanism tests