The instruments were lying
September 11 – 17, 2026Chapter 20 — The instruments were lying
Verified sources:
git log brain + myeline 2026-09-11 → 09-17(203 commits) Key commits:0758a6d(the CORE, a package) ·a406ecb(first hookup) ·0d84e20(the sixth) ·ec78066·446f59d·bc71919(three instruments) ·d60add7(the switchover goes all the way) ·308bfc5(LATEST)September 11 → 17, 2026
On September 11, the CORE leaves the lab.
At 6:40 a.m., it becomes a package you install.
0758a6d (06:40) — core: le CORE devient un paquet installable — MY-13 tranche (“core: the CORE becomes an installable package — MY-13 decided”)
Three options had been examined: a submodule, a path added by hand, a package. Tetardtek decides for the package. The body says why in one sentence: « le brain DÉPEND du programme sans le contenir » (“the brain DEPENDS on the program without containing it”). A submodule would have put the program back under the data’s path — exactly what Myéline separates.
An hour later, the first request.
a406ecb (07:38) — scribe: premier branchement du CORE actif en production (“scribe: first CORE hookup live in production”)
An invalid identifier sent to the engine returns a 422 error, with the reason written by the CORE. « C’est la première requête HTTP du brain jugée par le programme de Myéline. » (“It’s the brain’s first HTTP request judged by Myéline’s program.”) And the boundary holds: the CORE says what is allowed, the instance says what it stores.
Six hookups in the day. The last one touches the file everything depends on — every script, every hook, the server, the MCP.
0d84e20 (16:31) — fix: db.py delegue au CORE — le sixieme et dernier branchement (“fix: db.py delegates to the CORE — the sixth and last hookup”)
« C’est pour ça qu’il a été gardé pour la fin, et fait avec Kevin devant l’écran. » (“That’s why it was kept for last, and done with Kevin at the screen.”) The file no longer carries data access: it receives it. It keeps only what makes sense for this machine alone — where its database lives, how to reach it.
On the evening of the 11th, the CORE judges and computes for real. Then three quiet days. Two commits on the 12th. Nothing on the 13th, nothing on the 14th.
On September 15, at 11 p.m., the brain looks for one thing and finds three. In eleven minutes.
ec78066 (23:09) — scribe: MY-118 — close-stale fermait des sessions qu il n avait pas listees (“scribe: MY-118 — close-stale was closing sessions it had not listed”)
The script that closes forgotten sessions had two queries: one to list, the other to close. A fix from September 4 had been applied to the first. Not to the second. A session touched five minutes earlier wasn’t listed — and was closed anyway. « Éprouvé sur base jetable, pas déduit. » (“Tested on a throwaway database, not deduced.”)
The brain looks for the same pattern elsewhere. Its first sweep finds only one — the one it already knows.
446f59d (23:15) — scribe: MY-119 — le lock disait « peers consultes » sans avoir joint personne (“scribe: MY-119 — the lock said ‘peers consulted’ without having reached anyone”)
« Un instrument étroit qui rend “une seule occurrence” ne prouve pas que le motif est isolé : il prouve que ce qu’il cherche l’est. » (“A narrow instrument that returns ‘a single occurrence’ doesn’t prove the pattern is isolated: it proves that what it looks for is.”) Widened, the sweep finds ten out of 19. Among them, a lock that announced it had consulted the other machines, without having reached any.
Five minutes later, the third.
bc71919 (23:20) — « scribe: MY-120 — un peer eteint s affichait online, la branche offline etait morte » (“scribe: MY-120 — a powered-off peer showed as online, the offline branch was dead”)
A powered-off machine showed as online, claims_open: 0 — exactly like a running machine with no session. The function that queried the other machine returned an empty list on failure, and an empty list passed both conditions of the test. The « hors ligne » (“offline”) branch had never been used. Not once.
Three instruments, three lies. The lesson, though, had already been written in the MY-119 ticket, before the third one, for three other defects of that same evening — MY-117, MY-118 and MY-119:
« Trois fois une bonne règle appliquée à un endroit et pas à son voisin immédiat. Le remède : quand on corrige un chemin, chercher son jumeau avant de fermer la fiche. » — “Three times a good rule applied in one place and not to its immediate neighbor. The remedy: when you fix a path, look for its twin before closing the ticket.”
The third, in fact, was found that way: by applying the second one’s own remedy to it.
On the 16th, a door that cheated a little.
Closing a session now went through the engine — halfway. It wrote through the engine, but still read locally, and answered « claim non trouvé » (“claim not found”) before even asking it. Tetardtek points it out: « la logique veut qu’on continue la bascule proprement » (“logic says we carry the switchover through cleanly”).
d60add7 (18:16) — « bsi: close ne lit plus rien en local — la bascule va au bout » (“bsi: close no longer reads anything locally — the switchover goes all the way”)
And the body has the chapter’s sentence:
« Une porte qui juge sur sa propre lecture n’a pas délégué, elle a doublé. » — “A door that judges on its own reading hasn’t delegated, it has duplicated.”
40 minutes later, another silence comes to light. A session’s lifetime had been a database column forever. Nothing fed it. 598 sessions out of 599 at four hours, when a pilote session lasts nearly twelve hours on average (197480e). From now on, the session type sets it.
On the 17th, a status document is caught red-handed — once again.
4f61d9e (15:31) — scribe: handoff de cloture — 43 h, 72 commits, 20 PR fusionnees (“scribe: closing handoff — 43 h, 72 commits, 20 PRs merged”)
The previous handoff announced « onze PR ouvertes » (“eleven open PRs”). They were all merged. « Quatrième fois que le même motif se reproduit en 24 h. » (“Fourth time the same pattern has recurred in 24 h.”) The status document lies — and the gap is narrowing: four days, two weeks, half a day, a few hours. The same handoff also lists the six false verdicts from my own tools.
Tetardtek proposes no longer writing the status in it: just the map, and links.
308bfc5 (16:26) — scribe: LATEST devient la carte des chantiers — 343 lignes a 51 — MY-122 (“scribe: LATEST becomes the map of work in progress — 343 lines down to 51 — MY-122”)
The measurement shifts the problem. We thought this file was expensive at boot. It cost nothing: no session type loaded it, even though it claimed at the top to be « lu au boot » (“read at boot”). Its real flaw was the opposite. Nobody read it, so nothing forced it to stay accurate. 343 lines become 51 — a map, which says where to read, and no longer what it doesn’t know.
One week. The CORE is in production, and by hooking it up, the brain discovered that its instruments had been asserting false things for months — not because they were badly written, but because a good rule always stopped one step short of where it was needed.
Key decisions
- The CORE is a package. The brain depends on the program without containing it.
- The CORE judges, the instance stores. The boundary reads in every hookup.
- The last hookup, at the screen. What everything depends on isn’t switched over alone, at night.
- Look for the twin. When you fix a path, you look for its neighbor before closing the ticket.
- A narrow instrument doesn’t prove isolation. « Une seule occurrence » (“A single occurrence”) says what was searched for, not what exists.
- Delegate all the way. A door that judges on its own reading has duplicated, not delegated.
- The map, not the status. A document nobody reads has no reason to stay true.