Repairs in flight
Listen to this post10 min
Created by AI from the text of this post and read by the synthetic voice “Sulafat”; not a word-for-word version, and it may contain errors.
Loading…
Created by AI from the text of this post and read by the synthetic voice “Sulafat”; not a word-for-word version, and it may contain errors.Position and speed stay in this browser and are sent nowhere.
The recording could not be played. Open the audio file
Coherent Chess has no maintenance day. The farm keeps playing pre-tests and generating training data, the oracle keeps measuring, the website keeps publishing. Yet in the past weeks most parts of that chain were changed or repaired while they ran, rather like an aircraft repaired in flight. The rule behind it fits in one sentence: a repair may change what happens next, but not what is already being measured. This entry shows how that works, and where it went wrong.
Rules travel with the candidate
Before a change reaches the oracle, the measurement that decides whether it is adopted, it passes pre-tests on the farm. Their rules changed six times in six days: versions V4 to V9 took effect between 2026-09-26 and 2026-10-01. Two of these changes have entries of their own.
Only one of them reached into tests already running, and only to hold candidates back. When a candidate is admitted, it receives a copy of the rules in force at that moment, and every later decision about it reads that copy, not the current setting. If a stored copy ever stops matching a known version, the pipeline stops and waits for inspection.
The event journal of the pre-tests shows what that means. Twelve candidates received a pre-test decision after a newer version had already taken effect for new admissions. Ten were decided by exactly the rules they had started with. For the other two, one rule was applied afterwards on purpose: a test that reaches its preset cap without reaching a bound counts as undecided, not as passed. That is Law III of the project's constitution. The rule can never grant a pass; under their own rules both candidates would have been sent on to the oracle, and both were parked instead.
A new epoch instead of a quiet change
At the oracle, each measurement is bound to a fingerprint of the measuring environment: the harness and its scripts, the stage settings, the installed opening books, and on the machine itself the kernel, microcode, BIOS version and the cores in use. If the fingerprint differs from the one recorded when the current epoch began, the oracle halts instead of measuring.
Changing the conditions therefore takes a separate path. New submissions to the oracle are stopped and the running measurement is allowed to finish, the current predecessor is built a second time from the same source, and a new epoch anchor is appended to the register. A submission still waiting would be closed as invalid and submitted again, rather than measured under conditions it was not submitted for. The register records five such changes, from epoch two on 2026-09-03 to epoch six on 2026-09-23; none had to close a waiting submission.
The system update of the measuring machine for anchorings on 2026-09-30 is on record as well, as a changed condition whose effect has not been measured.
A restart in mid-flight
Law III also says that a running test is never aborted. It cannot prevent a crash. On 2026-09-26, at about 04:00 UTC, the oracle restarted cold in the middle of a measurement that had been running for nearly sixteen hours. The rules for that case are fixed: the run goes into the register as "interrupted", with no strength value and no verdict, and the same submission is measured once more from the start. A second interruption would halt the oracle.
The register did exactly that. The chain around it stumbled in three places.
First, the website. Its data contract knew three outcomes and rejected every delivery containing a fourth; from 04:10 UTC nothing got through. The first repair dropped every interrupted entry from the export. A review by a session that had not written it rejected this: the oracle also writes "interrupted" when a test reaches its fixed number of games without a decision, and that is a real measurement with real games. The narrower repair leaves out only cold starts; the export with and without the cold-start entry was shown to be identical byte for byte.
Second, the pre-test pipeline. It had read "interrupted" as the end and parked the candidate, although the oracle was already measuring the same submission again. Had that run passed, nobody would have adopted the change, and the next candidate would have been measured against a predecessor that the main line did not contain. Within about an hour of the restart the pipeline was changed to wait for the verdict of the same submission.
Third, the repeat itself. It ran for about thirty-five hours and ended on 2026-09-27 as the first test in the register to reach its full number of games without a bound: undecided, not passed. The website rejected the delivery again, this time by design. The project then decided to hold back such entries too until the data contract includes them. Until then the public list skips a number for each of the two entries; both remain in the oracle's own register.
When the farm produced nothing
The most expensive failure was the quietest. On 2026-10-02 at 21:23 UTC the base, the version that candidates are measured against, switched to 0.2.0. From 22:50 UTC the training-data jobs began to fail: every job run against the new base failed, and after the last jobs still running against the old base had finished shortly after midnight, the farm delivered no training data at all for about twelve hours. At the node limit of these searches, the new version reports lines that give only a bound for the score, and it can print part of an unfinished iteration without marking it. The generator treated every bound as a protocol error and threw the game away.
Nobody noticed until shortly before 08:00 UTC; twice during the night the farm was even reported as fully working. The processes were running, and the existing checks counted harness errors and machine time per machine, not whether any data came out.
A first rule that skipped bound lines but required the played move to match the last exact line still discarded 83 of 100 games, and the survivors were skewed: 12 of the 17 were mates. The rule adopted instead takes score and move from the last exact line below the deepest depth reported, that is, from the last iteration known to be complete. A cross-check by a model family other than the author's found two more flaws before anything was merged. The repaired generator runs as a new, registered data profile. By 12:33 UTC all thirteen jobs of its first round were complete, without a failure.
A new watcher now measures yield instead of activity. It raises an alarm for a farm machine that is busy but has delivered nothing for ninety minutes, or when more than a fifth of at least five results within an hour fail. Run against the record of that night, it would have fired by 23:10 UTC at the latest, within twenty minutes of the first failure.
The pattern
Rule changes apply from the next candidate on; the one exception can only hold a candidate back. Changes to measuring conditions open a new epoch. Running tests are not stopped, and an interruption is written down, not smoothed over. New output gets a new name. Even the internal accounting of machine time names its booking rule in every daily row, because days on either side of a change are not comparable.
Apart from the crash that cost one measurement, what failed in these weeks were the parts around the measurements: a data contract, a pipeline state, checks that confused running with delivering. The website problem surfaced within minutes because a receiver refused the delivery. The training-data failure went unseen for about nine hours because nothing refused anything.
What this does not say
None of this is a statement about playing strength. It describes how the chain stayed honest while it was being changed, not how any candidate fared.