From 79de22423de10d7a18ad5ef508b2cca6ea6de3c7 Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 9 Oct 2026 03:24:10 +0200 Subject: [PATCH] ADR 0270: how a failed new-module build is said, a one-machine module is never covered, and which gate tests the forge module 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. --- ...f-and-a-hold-whose-reason-is-gone-lifts.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/02-DECISIONS/0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md b/02-DECISIONS/0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md index c2f37025..c884e940 100644 --- a/02-DECISIONS/0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md +++ b/02-DECISIONS/0270-a-held-delivery-that-moves-nothing-or-that-a-later-delivered-merge-contains-ends-by-itself-and-a-hold-whose-reason-is-gone-lifts.md @@ -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.