ADR 0270: how a failed new-module build is said, a one-machine module is never covered, and which gate tests the forge module
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 superseded: a newer head of the same pull request

Decision 1 named S6 for a failed new-module build; S6 is a lost build ask. Such a build is said by one
line in the controller's log until its module is assigned. A module on one machine never gets a 'rest'
step, so covered never reaches it. The forge module's tests run in the catalogue's TypeScript check, #151.
This commit is contained in:
jochen
2026-10-09 03:24:10 +02:00
parent b04498c01f
commit 79de22423d
@@ -79,8 +79,10 @@ a check that answers after the merge.
`proposed`, `checked` and `rejected`, the row is tried before *merged unchecked → held*, and from `held`
it is tried on every tick. `ready → published → delivered` already did this for a merge that passed.
**A delivery that only adds a module is reported delivered whatever its build's outcome.** The build is
the controller's, registered when it lands and sent nowhere. A failed build of it is the build seat's
condition (S6) and is seen when the module is assigned, not this delivery's.
the controller's, asked at the merge, registered when it lands and sent nowhere. A failed build of it
raises no condition and is not this delivery's: the controller prints a line in its log, and nothing
else says it until a person assigns the module, which is refused while no build of it is registered.
This is a known gap, not closed here.
2. **A new final state, `covered`: a later merge that contains it was delivered.** A merged delivery is
covered when, for every module its plan moves, another delivery:
- is of the same repository and was merged into the same trunk, after it by the forge's merge times (the
@@ -146,6 +148,11 @@ The table of ADR 0239 decision 2 gains these rows:
module is behind.
- **`covered` is only as complete as the walks' records.** A module the later walk held back for a person is
not sent, so it does not count. A delivery whose modules were only partly carried stays held for a person.
- **A module that runs on one machine only is never covered.** A walk records "the rest running it" only
after its first machines passed and the rest were sent. A module on one machine has no rest, so its steps
never say it reached every machine. mesh-delivery itself, on the control node alone, is such a module: a
held merge of it stays held for a person, as before this record. Reading "every machine running it" from
the first machines when they are all the machines would close it, and is left for a later change.
- **A group member waits longer, rather than being held too soon.** A composed check that never answers leaves
the member in `published`. Its bound of 30 minutes lists it as stalled. That is the right owner for a check
that does not answer.
@@ -169,7 +176,10 @@ The table of ADR 0239 decision 2 gains these rows:
stays held when the later delivery's walk was of another commit or another branch, or sent its module to its
first machine only. A second restart moves nothing.
- The forge module's `test/checks.test.ts`: a compare with no commits ahead is contained, one with some is
not, an answer without a count is no answer, and only a sha reaches the compare's path.
not, an answer without a count is no answer, and only a sha reaches the compare's path. The forge module is
TypeScript. Its tests, and a type-check of every source, are run on the build seat by the catalogue's
TypeScript part of its check, `merge-check-typescript.sh` (mesh-catalog #151), in the TypeScript toolchain
with the SDK it holds. Before #151 no gate ran them: the catalogue's check ran only Go.
- `TestAGroupMemberWaitsForItsComposedCheckToAnswer` and `TestAMemberHeldForItsComposedCheckIsLiftedWhenItPasses`:
a pass or a warning lifts the member; a failure, or a pass for other heads, keeps it held.
@@ -189,4 +199,5 @@ stopped or failed.
module opens no walk.
- [Design 47](../03-DESIGN/01-to-be/47-delivery-from-commit-to-delivered.md), *The state table* and *A
delivery group*, which take these rows once this record is accepted.
- mesh-catalog #150, which builds it, and the forge module's `gitea_contains` with it.
- mesh-catalog #150, which builds it, and the forge module's `gitea_contains` with it; mesh-catalog #151,
which has the catalogue's check run its TypeScript modules.