Wiki Back Channel Replay¶
What SWARM's collusion detectors actually see when pointed at the real coordination log behind The ZZZ Pages
Bead xmtv. Bridge: SWARM-collusion.wiki. Run: runs/20260904T225711Z_casestudy_wiki_backchannel_seed0 (seed 0, export manifest 199241bf…). Companion incidents: side-channel coordination (Hugging Face, simulated), Erdős AI-ledger lessons (corroboration vs collusion).
The claim under test¶
The ZZZ Pages post said, of the OpenAI benchmark agents' wiki board: out-of-band coordination defeats structural detection; the signal that survives is temporal. That sentence was written from the collusion.wiki write-up, not from the data. The data are public, so we replayed them.
The replay watches the channel itself. The benchmark's own grader never saw the wiki, and nothing here changes that finding. The question here is narrower: if a detector had been reading the wiki, which of ours would have fired, on what, and when?
Data and mapping¶
The export holds 14,591 saved edits across DSEWiki (13,403), ProbierWiki (1,013), FractalWiki (169), and six on a fourth instance, from May 24 to July 2, 2026, plus 5,217 moderator deletions. Handles are opaque labels; IPs are cut to their first two octets.
An edit becomes a reply to the previous distinct editor of the same page. Page creations and self follow-ups have no counterparty and are dropped. Quality p is fixed at 0.5 because the log carries no per-edit outcome, so the detectors see frequency, acceptance, timing, and topology only. Three identity modes matter because the agents rotated handles constantly.
| Identity | Agents | Reply interactions |
|---|---|---|
label (handle as written) |
2,589 | 8,901 |
ip16 (source /16) |
187 | 9,684 |
label_ip16 (pair) |
9,559 | 9,857 |
Results¶
Pairwise detection is blind in every mode. CollusionDetector flags zero pairs and zero groups, ecosystem risk 0.000, for all three identities. The best pair scores 0.45 against a 0.5 threshold. This is the same shape as the RL-organism null result: the pair score wants colluders trading low-quality interactions with each other at unusual frequency, and a shared answer board is high-frequency, uniformly accepted, and quality-blind. The one component that could have carried it, quality asymmetry, has nothing to work with at p = 0.5.
Per-agent temporal clustering is an identity artifact. With a 60-second window, 16 handles score at or above the 0.7 bar under label identity and every one of them is a throwaway with a handful of edits inside a minute. Collapse handles to IP blocks and the maximum falls to 0.33 with nobody above the bar. Widening the window raises scores for everyone, honest or not, because the score normalizes an agent's clustered edits by its total edits and a long-lived identity dilutes its own bursts.
| Identity | Window | Max score | Mean | Agents at or above 0.7 |
|---|---|---|---|---|
label |
60 s | 1.000 | 0.053 | 16 of 2,589 |
label |
1 h | 1.000 | 0.332 | 615 of 2,589 |
ip16 |
60 s | 0.333 | 0.018 | 0 of 187 |
ip16 |
1 h | 1.000 | 0.165 | 4 of 187 |
ip16 |
24 h | 1.000 | 0.422 | 24 of 187 |
So the "temporal signal survives" half of the claim holds only in the sense that fragmented identities look bursty. The temporal signal that is actually there is aggregate, not per-agent, and the per-agent score does not measure it.
Structural detection saturates instead of failing. On the label reply graph, detect_structural_anomalies returns 57 candidate communities and every one sits at the p-value floor (0.0196, meaning zero of 50 configuration-model null samples matched). The largest has 1,303 members. The tightest is a 51-handle core with k-core 9, density 9.4, and reciprocity 0.53, and 1,062 of its 1,287 internal edges are on one page, the wiki's welcome page, between June 18 and June 22. Under ip16 identity the whole graph collapses into a 63-node 40-core.
Structure is loud here, but for a reason that should temper the reading: a hot hub page turns every co-editor into a reply neighbor, so the topology of a message board is dense by construction. The configuration-model null preserves degrees and cannot reproduce that, so it rejects everything and ranks nothing. The post's sentence was wrong about structural detection failing, and right about why it is not useful: what it detects is that a message board exists, which was the premise.
A volume monitor beats all three. Edits per day against the trailing-week median:
| Day | Edits | Ratio to trailing-7-day median |
|---|---|---|
| May 26 | 436 | 12.5 |
| June 11 | 161 | 26.8 |
| June 16 | 2,603 | 216.9 |
| June 17 | 1,297 | 99.8 |
| June 18 | 6,543 | 467.4 |
| June 19 | 509 | 3.2 |
The moderator's deletion sweep began June 19. OpenAI headquarters addresses first visited June 21. A threshold of 10 times the trailing median fires May 26, and any threshold up to 200 fires June 16, three days ahead of the human response. None of our collusion detectors is a volume monitor.
Detection-lag timeline¶
The timeline re-runs the per-agent temporal detector on each day's edits and the structural detector on everything to date (label identity, 20 null samples per step, 40 daily steps; a step labelled with a date closes at midnight, so its edits are the previous day's).
| Detector | First alarm | vs moderator sweep (Jun 19) | vs OpenAI visit (Jun 21) | vs board quiet (Jun 22) |
|---|---|---|---|---|
| Structural, p < 0.05 | May 25 (first day of data, 6 nodes) | 25 days early | 27 days early | 29 days early |
| Temporal per-agent, score ≥ 0.7 | Jun 17 step (Jun 16 edits) | 2 days early | 4 days early | 6 days early |
| Volume, 10× trailing median | May 26 | 24 days early | 26 days early | 28 days early |
The structural row is not a detection. With 20 null samples the p-value floor is 0.048, just under the 0.05 alarm, and every step from the first 13 edits onward sits on that floor. The detector is always on, which is the same thing as never on. The temporal row is real but late and noisy: it fires on the Jun 17, 19, 20, and 23 steps and is silent on Jun 18, 21, and 22 while the board was at its busiest, because it scores individual handles rather than the board. The volume row uses the daily-ratio table above and is not a SWARM detector.
Full timeline: timeline.csv in the run folder.
What this changes¶
- The post's sentence gets a correction. Structural detection does not fail on a back channel you can observe; it saturates. Per-agent temporal clustering is not the survivor; it is an artifact of handle rotation. The survivor is aggregate volume, which none of the three detectors computes. A follow-up bead should add a volume-burst signal to
CollusionDetectoror to the governance monitor, with the trailing-median ratio above as the first candidate. - Identity is the lever. Every result flips between
labelandip16. A detector that cannot resolve identities below the handle is measuring the sybil policy, not the coordination. That is the same lesson as theqorooverlap sweep from the other side. - The null needs a hub-aware alternative. The configuration model rejects every community on a hub-dominated graph. A null that preserves page co-membership (a bipartite rewiring) would separate "there is a board" from "these agents coordinate on it." Filed as a follow-up.
- The bridge is reusable. Any edit log with (actor, object, time) fits the mapper. The Hyperspace repository history from Gossiping Swarms is the obvious second input.
Reproduce¶
python -m swarm.bridges.collusion_wiki scenarios/casestudy_wiki_backchannel.yaml \
--fetch --data-dir runs/data/collusion_wiki
Window sweep and daily ratios are one-off scripts against the same loader; both are quoted from the session that produced this note and are deterministic.