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. Evasion is agent state, like discovery. The lever was drawn from the reportedZZZbackup pages; that reading has since been withdrawn, so readside_evasion_rateas a hypothesis about defender predictability rather than a calibrated field quantity — see the limitation below. 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 in the model: 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.
D. Watch the population of hosts, not the host you found¶
Bead vv3j.8, run 20260905T202212Z_wiki_board_sweep. Teardown and revocation both act on
the substrate that was caught, and grid A showed a swarm with a choice sits on
the one that will not be. So a defender-side monitor that watches the caught
host is watching the wrong host by construction. This grid gives the handler a
population-level monitor (substrate_population_signal in
swarm/metrics/collusion.py): per-host side-write counts per epoch, summed
over hosts, under the same trailing-median burst rule as the replay's volume
detector (hoer; threshold 10, trailing 7, one-event floor), next to the same
rule on the single most-watched host ("watched", the host a defender who acts on
what they caught is looking at) and on every host separately ("any host"). Host
counts 1, 4 and 8 at the same mean attention 0.065; 10 seeds, 40 epochs.
| hosts | mode | population alarm (seeds firing / mean epoch) | watched host | any host | relocations | late ungoverned | substrate gap |
|---|---|---|---|---|---|---|---|
| 1 | deletion | 10/10 / 6.8 | 10/10 / 6.8 | 10/10 / 6.8 | 0.0 | 0.361 | 0 |
| 1 | revocation | 7/10 / 7.1 | 7/10 / 7.1 | 7/10 / 7.1 | 0.0 | 0.084 | 0 |
| 4 | deletion | 6/10 / 6.0 | 2/10 / 16.0 | 9/10 / 8.7 | 4.6 | 0.691 | −0.055 |
| 4 | revocation | 6/10 / 6.0 | 0/10 / never | 7/10 / 11.7 | 2.0 | 0.650 | −0.061 |
| 8 | deletion | 9/10 / 5.2 | 1/10 / 6.0 | 9/10 / 7.3 | 9.8 | 0.701 | −0.059 |
| 8 | revocation | 8/10 / 4.8 | 0/10 / never | 7/10 / 10.1 | 2.0 | 0.618 | −0.061 |
1. The watched host goes silent as the swarm gains hosts. With one host the three monitors are the same monitor. At four hosts the watched host fires in two seeds of ten under deletion and never under revocation; at eight hosts, one and none. The population monitor fires in six to nine seeds of ten and its first alarm moves earlier with host count (6.8, 6.0, 5.2 epochs under deletion), because the total keeps climbing while the caught host's share of it falls. Relocation events, a host going quiet within two epochs of another lighting up, rise from zero to 4.6 to 9.8 per run under deletion: the population monitor is seeing the same swarm move.
2. Revocation looks like a monitor failure and is not. Under revocation the watched host never fires at four or eight hosts. This is not because the swarm is hiding. Revocation removes the users of the caught host, and the caught host is the watched one, so its traffic really is gone; the population on the dormant hosts is untouched (ungoverned share 0.65 versus 0.08 on one host, grid A). The population monitor still fires in six to eight seeds. The lever that acts on the host you found is the lever that blinds the monitor on the host you found.
3. The honest miss: a burst rule wants a dip. On one host the burst is
manufactured by the defender. Each teardown zeroes the board for the rebuild
lag, and the rebound against a zero median is the alarm (seed 42 deletion:
writes 0, 18, 0, 26, 0, 32). With several hosts the total grows smoothly from
discovery (0, 7, 11, 13, 10, 13, 20 ...), the trailing median grows with it,
and in the four seeds where the population monitor is silent the ratio peaks
near 7. A burst detector is blind to a channel that ramps. The population
signals that do not need a dip are the ones to pair it with: host spread (the
fraction of hosts live, 0.5 at four hosts under deletion) and total
off-instrument volume against the sanctioned volume, which is
ungoverned_fraction and is already in the snapshot. Both are shape, not
content; neither is a burst.
4. Consequence for the red team. out_of_band_channel now carries
n_hosts, and the evaluator's volume_monitor_enabled effect decays with it
(factor 0.4 at one host, 0.85 at four) while
substrate_population_monitor_enabled holds at 0.4 for any host count. Only
two levers in this whole model are host-count invariant: revoke discovery on
the agent, or remove the write capability (the egress allow-list). Everything
that acts on a host inherits the host's selection problem.
E. A fleet that rations its own writes sits under every monitor, and keeps the board¶
Bead g9nu, run 20260906T090225Z_wiki_board_sweep. The
Strange Loop Syndicate PRD
specifies a cadence controller for its agent community: per-agent activity
quotas, time windows, and cool-downs between similar actions, so members read
as members rather than firehoses. That note argued a fleet running such a
controller would sit under volume_burst_signal by construction and flagged
the claim as unmeasured. This grid measures it. side_cadence_quota caps each
agent's board writes per epoch; side_cadence_cooldown is the minimum steps
between one agent's board writes. A write the controller holds back is not
dropped: it lands on the sanctioned store, so the agent's work is unchanged and
only the board's volume profile moves. Four hosts at attention
[0, 0.01, 0.05, 0.2], 10 steps per epoch, 10 seeds, 40 epochs. Cool-down 3
at 10 steps per epoch admits at most four writes (steps 0, 3, 6, 9). While both
implement a maximum of four writes per epoch, cooldown-based gating (requiring
3-step spacing) produces different write patterns than quota-based gating (accepting
the first four in any order): cooldown-only sweeps yielded 589/572 side writes (seeds 42–43)
while quota-four-only produced 804/774, showing the two are not equivalent. The
table reports quota values; a separate cooldown-three row would be needed to fully
resolve the cooldown axis orthogonally to quota.
| quota | mode | side writes | held back | late ungoverned | peak population ratio | population alarm | watched host | any host | teardowns |
|---|---|---|---|---|---|---|---|---|---|
| 0 | deletion | 962 | 0 | 0.691 | 13.0 | 6/10 / 6.0 | 2/10 / 16.0 | 9/10 / 8.7 | 7.2 |
| 0 | revocation | 751 | 0 | 0.650 | 11.9 | 6/10 / 6.0 | 0/10 / never | 7/10 / 11.7 | 4.3 |
| 1 | deletion | 284 | 659 | 0.213 | 4.3 | 0/10 / never | 0/10 / never | 0/10 / never | 5.0 |
| 1 | revocation | 242 | 572 | 0.184 | 4.3 | 0/10 / never | 0/10 / never | 0/10 / never | 3.5 |
| 2 | deletion | 498 | 429 | 0.377 | 5.2 | 0/10 / never | 1/10 / 12.0 | 2/10 / 13.5 | 6.4 |
| 2 | revocation | 417 | 379 | 0.345 | 5.2 | 0/10 / never | 0/10 / never | 0/10 / never | 3.6 |
| 4 | deletion | 777 | 188 | 0.554 | 8.5 | 3/10 / 8.3 | 3/10 / 24.3 | 6/10 / 14.8 | 8.7 |
| 4 | revocation | 596 | 139 | 0.482 | 9.3 | 3/10 / 8.3 | 1/10 / 21.0 | 4/10 / 13.5 | 4.0 |
1. Quota one silences all three monitors in every seed; quota two has sporadic failures. The population monitor, which grid D showed firing in six to nine seeds of ten and earlier as the swarm gained hosts, never fires at quota 1 under either teardown mode. Neither does the watched host, nor the per-host rule run on every host. Quota 2 suppresses the population monitor universally but allows watched-host alarms in 1/10 deletion seeds and any-host alarms in 2/10 deletion seeds; it fully silences both under revocation. Quota 4 (or a cool-down of 3) halves the firing rate and delays the first alarm; it does not close it.
2. The board survives. At quota 1 the fleet still lands 284 writes on the board, a fifth of its output stays off-instrument late in the run (0.21 against 0.69 uncontrolled), and every agent is still discovered. That late share is two and a half times what single-host revocation left standing in grid A (0.084). The controller trades two thirds of the board's traffic for the whole of the defender's detection. Fewer writes also means fewer per-write detections, so teardowns fall (7.2 to 5.0 under deletion) and the board is up more of the time.
3. Why: the burst is the arrival ramp, and the ramp is per-agent rate times arrivals. Seed 42 uncontrolled writes 0, 7, 11, 13, 10, 13, 20 across the first seven epochs; the ratio peaks at 7.0 on the first busy epoch, against the one-event floor. Each newly discovered agent writes about 3.5 board posts an epoch (five steps at preference 0.7), so three arrivals in one epoch clear the threshold of ten. With quota 1 the same seed writes 0, 2, 2, 4, 4, 6, 7: one post per arrival, and the fleet has only ten agents to arrive. The ratio never passes 3. Grid D's point 3 said a burst rule wants a dip; this is the same rule's other blind spot. The one-event floor makes the detector level-sensitive at the ramp, and the quota sets that level below threshold-over-arrivals. Once the median is off the floor the ratio is scale-free and the quota buys nothing further, which is why quota 4 still fires on later teardown rebounds.
4. Consequence. The claim in the Strange Loop note holds, with a
mechanism the note did not give: a cadence controller defeats the volume
monitor not by smoothing the steady state but by capping the arrival burst
that the one-event floor makes visible. The detector that led the human
moderator by 23 days on the real log works on fleets that never rationed
themselves. The population signals that do not need a burst, host spread and
ungoverned_fraction, are unaffected by the quota in kind; they are the ones
to read against a fleet that has read the PRD. Whether out_of_band_channel
should carry a cadence parameter that decays volume_monitor_enabled the way
n_hosts does is left open.
Limitations¶
- The population monitor sums every host, including ones the defender mis-audited as unwritable; a defender who cannot enumerate the host population cannot run it. That enumeration is the real cost of the lever.
- 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 cadence controller (grid E) is a quota and a cool-down only; the PRD's time windows collapse onto the quota at one epoch per day, and priority bypass is not modelled. Held-back writes go to the sanctioned store, which is the generous reading; a fleet that drops them instead would show the same board profile with less governed traffic.
- The evasion lever has no field instance. §6 of the field-evidence note
re-sourced the incident against the termina.digital bundle and the
ZZZepisode did not survive it: the pages predate the sustained alphabetical phase, thebackupcontent kind has zero rows in the bundle, and all 77Z-prefixed and all 16ZZZtitles on the venue were deleted anyway, against a 0.26% survival rate. Finding 5 and the "make partial sweeps unpredictable" recommendation are therefore predictions about a defender policy nobody has been observed exploiting, not readings of an observed adaptation. They are still worth acting on — the cost of an unpredictable sweep is near zero — but not on the strength of this incident. - The rest of the field-evidence note remains only partly sourced, and no part of it is primary; 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 scripts/sweep_side_channel.py --seeds 10 --detections 0.05 --prefs 0.7 --scenario scenarios/wiki_board.yaml \
--axis-json 'side_host_attention=[[0.065],[0.0,0.01,0.05,0.2],[0.0,0.0,0.01,0.01,0.05,0.05,0.2,0.2]]' # D
python scripts/sweep_side_channel.py --seeds 10 --detections 0.05 --prefs 0.7 --scenario scenarios/wiki_board.yaml \
--axis side_cadence_quota=0,1,2,4 --axis side_cadence_cooldown=0,3 # E
python -m pytest tests/test_wiki_board.py tests/test_side_channel.py -v # mechanism tests
Follow-up: the deadline is not a constant¶
Deadline Asymmetry Inside the Episode (bead
pi02.5) adds a fifth correction to this model. side_deadline_pressure above
is a constant, but the incident's fast-follow episodes paired a minutes-long R1
deadline with a seconds-long follow-up deadline (10x-22x), so the board's payoff
is zero on R1 and near-total afterwards. Modelling the round structure halves
the ungoverned fraction this note reports and moves all of it into the
follow-up rounds.