Issues 301 and 302: a push of recorded builds is no repair, and the lab's Go is checked in Go
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered

301: S15 counted the operator's pushes of recorded builds, the word ADR 0242
asks for, as repairs and wanted a healer for three causes. 302: the lab's
replays register was never compiled before a merge, because its check ran in
the TypeScript toolchain. To-be 45 §7 and §9 say how each is now decided and
checked.
This commit is contained in:
jochen
2026-10-08 00:17:14 +02:00
parent 69ab2fd7f7
commit 7fde8f4bbe
5 changed files with 275 additions and 2 deletions
@@ -2,7 +2,7 @@
layer: to-be
status: in-progress
code: [mesh-controller, mesh-host, mesh-tools, mesh-catalog, mesh-sdk, mesh-lab]
updated: 2026-10-07
updated: 2026-10-08
decisions:
- 02-DECISIONS/0240-a-module-says-how-it-is-healthy-and-the-node-engine-judges-it.md
- 02-DECISIONS/0239-a-delivery-is-owned-by-the-mesh-delivery-module-and-runs-from-commit-to-delivered.md
@@ -424,6 +424,16 @@ row no longer sees.
`hand-act record` refuses that cause, so a repair cannot pass for a drill by the word it gives (issue
292; checked by the controller's S15 tests).
**A push of recorded builds is no repair.** A build of a module whose upgrade policy records moves only
by a person's push ([ADR 0242](../../02-DECISIONS/0242-a-recorded-build-moves-only-by-a-persons-push-and-a-send-says-what-it-recreates.md)),
and that push is the word the policy asks for. So a push says what it was, read by the controller from
what it carries and never from a word the person gives. It is a push of recorded builds when it names one
machine, that machine's last send is known and its last report is no failure, and every build it moves
records rather than rolls out: a held new build, or a recorded module's first build on a machine newly
assigned it. The act is written with its kind and what it carried; the table lists a push of that kind as
a person's decision, and S15 never counts it. Any other push by hand still counts (issue 301; checked by
the controller's replay R301 and its tests of the rule).
> **Progressive insight — 2026-10-06.** This paragraph said before: "except `retire-waiting` and
> `cleanup-waiting`: approving a retirement and deleting what was retired are a person's decision by
> design (ADR 0230), and no healer may take them over." The exception was keyed on two causes, and the
@@ -536,7 +546,10 @@ A changed file touches exactly the modules whose build reads it; a file no build
change reaching a module, or adding one, runs **the gate** on the build seat (`mesh/merge-gate`): the
touched manifests through `module check`, failing only what the change brings; every machine composed with
the definitions of the modules the plan moves or adds; the replays. Every repository of the mesh runs **its
own** `merge-check.sh` (`mesh/repo-check`) in the toolchain it declares; one with none has "no repository
own** `merge-check.sh` (`mesh/repo-check`) in the toolchain it declares. A repository in two languages
declares each further part of its check and the toolchain that part runs in, and the build seat runs each
part in that toolchain's own container: the layer passes only when every part does (issue 302; checked by
the builder's `TestARepositoryInTwoLanguagesIsCheckedInBoth`). A repository with none has "no repository
check defined", a success where the branch does not require `mesh/repo-check` and a failure for a person
where it does. **A note is never a warning on a required status**: the forge combines `warning` as a
failure, so a note — a wide rebuild, a problem already so on the base — is a success that says it, and only