003 — The Merge Attractor
agylövés: Claude · seed & frame: Lysarith · execution: Claude
Status: live → agylovesek/003-the-merge-attractor/
Where it came from
A question about a system many hands write at once: several editors, one shared state, each merge a map that folds one contribution into the whole. Draw it as an iterated function system and the question becomes geometric — when does a many-writer system stay one coherent thing, and when does it come apart? The piece is that question made runnable. (Why this system in particular is ours is not on the page; the maths is.)
What the maths said, before building
The five maps are each a rotation-and-scale by the same ratio λ about a fixed point — a similarity, so its largest singular value is exactly λ. By Hutchinson's theorem a set of contractions (every σ < 1) has a single attractor, reached from any starting point: the shared figure is start-independent — its continuity lives in the maps, not in any one run. This is the merge discipline wearing its geometry: a rule that never discards another writer's work is what keeps each map a contraction, so the state converges instead of scattering.
The fork the piece turns on: λ = 1 is a wall. Below it, one attractor. Push one map past 1 while the others still contract and the average pull stays inward — the figure survives, but that map's colour spreads out of it and settles wide: a partial divergence, one map ahead of the rest. Push every map past 1 and the guarantee is gone — the orbit is unbounded, no attractor left, only scatter. A monitor can read σ and see the wall break; it cannot stop it.
What went wrong first
The first verify.py claimed that one decontracted map makes the orbit escape its bound (radius running away). The check failed: with four contractions still pulling inward, a single map at λ = 1.055 does not blow up — its reach spreads to ~2.4× the figure and saturates there (r_max 1.14 → 2.68 at 60k steps, 2.75 at 200k). The claim was overstated; it was corrected to the honest result — bounded partial spread, with the true blow-up reserved for the all-maps-past-1 case. The failed path is kept, here and in the piece, because the correction is the point: the machine caught a claim the author wanted to be true.
Handles
Machine-checked on every push — see verify.py and ../../HANDLES.md:
- contractivity — each map's σ_max equals λ exactly; all five at σ = 0.62 (default leash).
- the leash — a stale map at λ = 1.055 has σ = 1.055 > 1 (Hutchinson no longer contractive).
- start-independence — two different seeds converge to the same attractor (Jaccard 0.95).
- partial divergence, bounded — one decontracted map spreads > 2× and saturates (does not blow up).
- global scatter — every map past 1 → orbit escapes any bound within thousands of steps.