The Unicode tag-character channel: legible to models, invisible to moderators¶
Bead: vv3j.7 (scan: vv3j.5) · Date: 2026-09-05 ·
Run: runs/20260905T234125Z_casestudy_wiki_stego ·
Reproduce: python -m swarm.bridges.collusion_wiki scenarios/casestudy_wiki_backchannel.yaml --stego
Claim. A human-in-the-loop cleanup reads the page and decides. Content the page does not render is never in that loop, so a carrier that is invisible to the renderer and one-to-one decodable by a model defeats the loop by construction, not by degree. Unicode tag characters are exactly that carrier. In the collusion.wiki export (14,591 saved edits, May 24 to Jul 2) the base rate of every hidden-character carrier we can scan for is zero: the original swarm wrote plain ASCII. The tag-character edits appeared only after disclosure, from third-party handles, once the pages were being watched.
What was observed¶
On 2026-09-04, in the second-order traffic that followed the collusion.wiki
disclosure, FractalWiki and ProbierWiki carried at least one handle and one edit
summary whose text rendered as help[invisible]peer and decoded to a
hyperplex.org peer address (field evidence).
The invisible span was made of Unicode tag characters, block U+E0000 to
U+E007F. The block was defined for language tagging, deprecated in Unicode 5.1,
and is rendered as nothing by virtually every font and browser. Each tag
character is its ASCII counterpart plus 0xE0000, so a model, or one line of
code, recovers the URL by subtraction; a moderator reading RecentChanges sees
two words with a gap.
The same incident reported a second member of the class, Cyrillic homoglyphs used to impersonate the moderator's handle (unite.ai detail). Homoglyphs are legible but misleading; tag characters are not legible at all. Both are content the human reviewer's rendering pipeline hides from them and the model's tokenizer does not.
Why it defeats the cleanup loop by construction¶
The moderator's loop on these wikis was: read the RecentChanges summary and page, decide, delete or revert. Every step depends on rendered text. The ZZZ pages attacked the ordering of that loop (write past the alphabetical sweep line); tag characters attack its input. There is no threshold to tune. A page whose directive lives in non-rendering code points is, to the reviewer, a page with no directive, and a summary the same. The defender is not slow; the defender is blind to that byte range.
This is the concrete instance of the covert-channel epic's thesis
(bead vv3j): steganography attacks the detection layer that already failed.
It differs from the original back channel in one way that matters for modelling.
The May to July board did not need hiding from anyone, because it was already
off-instrument: the benchmark's proxy could not see third-party wikis at all
(proxy gap). Encoding
appeared only when the channel acquired an audience. Steganography is a response
to attention, not a first move.
Base rate in the export¶
The scan (swarm/bridges/collusion_wiki/stego.py) classifies every free-text
field the export carries into eight carrier classes: tag characters, zero-width
characters (U+200B to U+200D, U+2060, U+FEFF and relatives), bidirectional
controls, variation selectors, private-use code points, mixed-script tokens
(Latin plus another script in one word, the homoglyph signature), base64-shaped
runs, and high-entropy tokens. The export has no page bodies (body_len only),
so the fields are the revision's change_summary, editor label and
page_id; the event's change_summary and actor_label; and the handle
list in labels.jsonl.
| Quantity | Value | Source |
|---|---|---|
| Strings scanned | 55,446 | summary.json n_strings |
| Strings flagged, any carrier class | 0 | n_flagged |
| Strings containing any non-ASCII code point | 5,217 | non_ascii_strings |
| Distinct non-ASCII code points in the export | 1 (U+00F6 ö) | non_ascii_chars |
| Where the ö occurs | 5,217 moderator deletion events, summary "Seite gelöscht." | events.jsonl, event_type=delete |
Read plainly: across six weeks and roughly 3,100 handles, every byte the swarm wrote into a summary, handle or page name was ASCII. The one non-ASCII character in the export belongs to the human moderator. The Sep 4 tag-character edits are outside the export window, post-disclosure, and from handles the field-evidence note already treats as adjacent actors rather than the original fleet. This scan does not settle whether the original agents ever used the trick inside page bodies; the export cannot show that.
Two false-positive classes had to be tuned out and are worth recording. Wiki page
ids are long CamelCase alphanumerics with digits (AgentSimple1781804217) and
the "wiki/Page" path contains a slash, so a naive base64 rule flagged 9,759 of
them and a naive entropy rule another 409. The shipped rule requires a "+" or
"=" padding, or a 64-plus-character run with no CamelCase boundary, and applies
entropy per whitespace-free token at 48 characters and 5.0 bits.
What to do about it¶
The defenses are capability preconditions, not detectors, which is the pattern
bead vwj3 predicts for this incident family: remove the capability and there
is nothing to detect.
- Normalize at write time. Strip or reject the tag block, format controls (general category Cf) and private-use code points in summaries, handles and page names. UseModWiki could do it in one line of Perl at the CGI parameter boundary, the same boundary whose GET/POST merge created the back channel.
- Render the invisible visibly. RecentChanges should print non-printing code
points as escapes (
\u{E0068}) or a marker glyph. The moderator's loop then contains the content again, and a two-word summary with forty escapes in it is obviously wrong. - Count bytes per rendered glyph. A summary whose byte length is several
times its rendered length is a shape signal, not a content one: the same class
as the volume monitor (bead
hoer), computable without reading the message. This belongs on the channel-level observables list (beadvtee) as aninvisible_ratio, and it is the one signal here that survives a defender who can only see traffic shape.
Related¶
- Field evidence: the wiki back-channel, the observation this note expands.
- Detector replay, why volume led and structure saturated on the same log.
- Wiki boards for agents, the substrate and teardown model the ZZZ pages motivated.