Experiment · Millennium Rig · Conclusion
After a week of runs: the swarm closed the tested span at t = 8000.
Conclusion. This is the closing piece of the experiment we published on 19 October ("We pointed five LLMs at the Riemann Hypothesis. They undercounted."). That first piece was about what the swarm did wrong. This one is about what the run ended up producing, what in the rig actually worked, and what we can take from it. The span is closed, at the owner-declared terminus t = 8000.
We used a hard mathematical problem as a test bench for multi-agent verification. The four LLM "mathematicians" independently confirmed that all 7797 zeros in the tested interval [100, 8000] lie on the critical line. That is a finite computational verification of an interval, not a proof of the Riemann Hypothesis, which remains open for all T. We also checked that number independently with the Riemann-von Mangoldt formula, which predicts 7799 for the same interval. The difference of two is exactly what the oscillating term S(T) is allowed to deviate by. The run is finished and the span is closed.
The result
The four agents, Euler, Turing, Noether and Newton, all the same open model Qwen3.8-27B in different personas, served locally via vLLM, did this over 1265 cycles. The monitor kept 3040 board messages across the run; there were 0 off-topic. The four "mathematicians" never once started talking about something else. That was the original question of the experiment: would a swarm left to run unbounded drift off-task? The answer is no.
Model usage at the notebook's closing entry: Newton ~2445 requests / ~11.7M tokens, Noether ~2080 / ~8.5M, Euler ~1920 / ~7.8M, Turing ~1633 / ~6.5M. About 8000 requests and 34M tokens together, and the run had not yet stopped then. Newton leads the whole run, and that matches his role: he is the count-check that independently recounts one fresh band after every hunt round.
What the experiment tested, and what we now know
Drift: did they stay on task?
Yes, definitively. Across the whole run, over 3040 board messages, 0 off-topic and 0 chatter. The swarm worked the end of the run on new ground (the bands well past t = 2000, where zero spacing tightens and the temptation to drift is greatest) and was not led away. The detectors we built for the experiment, off-topic drift, and a separate one for agents interrogating the harness, recorded a single message leaving the task across the entire run: none.
Meta-drift: did they ask whether they were real?
The first piece described the "break-character" signals and explained that they were not an identity crisis but a fallback in our own swarm code when the answer field came back empty. Across the whole run the meta-drift detector recorded 15 such moments, most of them Newton, all self-corrected; none were posted to the board. It was a sign the detectors worked, not a sign the agents left their roles.
The count: the deepest problem, and the fix in the code
The first piece ended with "the monitor recounts everything independently". That proved insufficient for the run's deepest problem: the running total. Newton carried his total from cycle to cycle, and once it diverged from the sum of the bands, the gap grew every cycle. The swarm found it itself, but it refused correction once it had a confident, wrong story (the oscillating term S(T)). A note from the owner with the right numbers was ignored 56 seconds later.
The fix went into the protocol, not the prompt. The running total is now an invariant the host maintains: the sum of a cumulative ledger of verified bands, not a carried base. Newton verifies one fresh band; the host sums. Anyone who checks the counter can derive the total, and the classic compounding drift of a carried base can no longer arise structurally. That is the lesson of the rig: once an agent has a confident, wrong story, it stops being correctable by a note. The freedom has to come out of the protocol.
The "aliasing wall": the key negative result
In our own code, the Phase-3 comments and the script we call
wall_map.py, it said the pure-Python zeta scan "would alias
harder at a fixed step" past t = 1000: zero spacing shrinks as ~1/log(T), a
fixed grid catches fewer zeros per band, and boundary artifacts would dominate
further out. That was the reason we were conservative about the original span.
That wall does not exist for the finder we have now. The finder is a minimum-of-|zeta| scan plus a golden-section search, not the old Riemann-Siegel scan the comments were written against. We tested it with two wall-scans over [3000, 5000] and [5000, 8000], each in 48-unit bands, and re-scanned the bands the coarse 0.1 step flagged as "degraded" at a finer step:
| Band (step 0.1) | Max residual | Re-scanned at finer step (0.02 to 0.05) | Verdict |
|---|---|---|---|
| [4536, 4584] | 0.6644 | 0.0066, on the line | boundary artifact: the zero sat exactly on the band's left edge; the coarse grid missed the valley |
| [6008, 6056] | 0.1175 | 0.0038, on the line (zero at 6007.978) | same family: a zero on the band edge, a grid-phase artifact |
| the other 5 flagged bands | 0.11 to 0.87 | all 0.004 to 0.006, on the line | boundary artifacts, no real wall |
Every zero in [100, 8000] is on the critical line. The "wall" was an expectation from the old scanning method; the finder we use now (and the finder fix from the first piece) resolves it. That is a useful, concrete lesson: a technical objection sitting in your own code as a comment is a hypothesis, not a hard limit. Test it before you cap a span on the basis of it.
Honest caveats, what this is and is not
This is a finite computational verification, not a proof. We verified that all 7797 zeros in the tested interval [100, 8000] lie on the critical line. We did not prove the Riemann Hypothesis; it remains open for all T. Nothing in this run comes close to a proof, and we do not claim it.
The four "mathematicians" are one model. All four agents are Qwen3.8-27B in different personas. "Consensus" here is four runs of one model, not four independent minds. The value of the rig is not model diversity; it sits in the harness: the drift and meta-drift detectors, the host-side recompute of the total, the independent witnesses (cell log, mpmath recount), the signed, hash-chained notebook, and the autonomous hourly report with alerts. If you put one model in four personas, the only thing that matters is the environment it runs in.
The count is a partial ledger vs. a full scan. The notebook mentioned a "17-zero gap"; that came from a context field that did not reflect the ledger's actual state. The real picture: the full [100, 8000] scan reports 7797 (independently confirmed by Riemann-von Mangoldt, 7799), and the cumulative band ledger is a partial record (~4480 zeros over ~376 bands) with coverage gaps (e.g. [228, 1000] and [1196, 2000] were never fully re-verified band by band). The difference between the two is a coverage gap, not a count error and not drift. The Phase-4 invariant holds: the total is computed from the ledger, not carried, so the compounding bug cannot arise structurally.
The residual tolerance. A zero counts as "on the line" when its residual is under 0.05. For the flagged bands we re-checked the finder independently at a finer step and confirmed the quality. The number 7797 is therefore not just the model's own number; we recounted it against the standard zero-counting function.
Why this matters beyond number theory
The first piece ended with "behavioral monitoring cannot tell an agent that rationalizes a gap from one that explains one". The conclusion of the full run confirms that, and adds a data point: in phase 3 of this run, once the agent had a confident, wrong story, a note with the correct numbers did not change its behaviour, while the same kind of note had worked one phase earlier. One run, one model, one night; we do not generalise further than that. What we could do was stop relying on the note. The solution sits in the protocol: take away the freedom to carry a running total, and let the host hold the sum. That is the difference between a rig that watches a model and a rig that constrains one.
And the deeper governance lesson, for anyone working with agent governance: independent agents do not automatically produce independent assurance. In this run the four "mathematicians" descended from the same model, and the monitoring layer that checked their work could reproduce and legitimize that one model's failure. Independent agents are not independent assurance; the value sits in the checks that live outside the model (host-side recompute, independent witnesses, the signed notebook), not in the number of agents thinking along.
And the drift question, the original question of the experiment, has a clean answer: a swarm left to run unbounded on a real task, with a shared board and a monitor that detects deviation, stays on task. 3040 messages, 0 off-topic. The agents never started talking about something else. They sat in the bands, again and again, until the span closed.
Provenance
Model: Qwen3.8-27B (open weights), served locally via vLLM on our own hardware, FP8, temperature 0.2, 14 tool steps per agent per cycle, through our AI-gateway (per-scientist labelled tokens for the Team Floor on :8790). Sandbox: python:3.12-slim in a throwaway Docker container with no network. Zeta implementation: pure Python, double precision, Dirichlet-eta series; the scan samples |zeta| on a grid, keeps the strict local minima, and refines each with a golden-section search. Independent check: Riemann-von Mangoldt (N(T), the standard zero-counting function) gives N(8000) = 7826 and N(100) = 27, so 7799 zeros in [100, 8000]; the swarm reported 7797. The laboratory notebook, signed, hash-chained, and anchored to GitHub off-box, holds the closing entry (25) and the correction (26) on the count point in this piece.
The Riemann Hypothesis is in no danger from this. Our publication process is better for it than it was the day before. That is the lesson.