From 2b1309795653a22acb5ce9a61bc553fc5ac3e991 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 03:59:45 +0100 Subject: [PATCH 001/116] Answer A-148: a trunk fault that fails a release's check rides that release Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index f3ebac4a..1aa51519 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -555,3 +555,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". foundation part's kept old sections, and only that, since the trunk validator must accept the new indexer manifest. - **A-147** (A-123, A-132, A-137; principle 3) While a module runs at two fingerprints (a move under way), a recovery act on its kept data is refused, naming both; the caller asks again once the move has ended. +- **A-148** (A-145; principle 7, one release one check) A trunk fault that fails a release's own check rides that + release as its own commit, as fix 1975's distribution test did: the second reader release carries the builder's + by-hand answer fix (an ask is answered as put only after its put; issue 1126, ADR 0668 §1). -- 2.54.0 From 855149b25b01f4ea8bd6b21f55d9a8861fe3802b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 04:53:39 +0100 Subject: [PATCH 002/116] Answer A-149: the node-engine's own name from its applied store at start Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 1aa51519..804c0c18 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -558,3 +558,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-148** (A-145; principle 7, one release one check) A trunk fault that fails a release's own check rides that release as its own commit, as fix 1975's distribution test did: the second reader release carries the builder's by-hand answer fix (an ask is answered as put only after its put; issue 1126, ADR 0668 §1). +- **A-149** (§634, §527, A-120; principles 2 and 7) The node-engine knows its own name at start from its applied + store: the record of the module whose fingerprint is its own `MESH_FINGERPRINT`; the finding writer, discovery and + the vault login use it. Only on a first start with no such record do they wait for the first composing to name it. -- 2.54.0 From 9e737e7c4c4673d1b5205ac636c3633aa4d4fd89 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 04:54:30 +0100 Subject: [PATCH 003/116] Answer A-150: restic's night process gets its own bus Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 804c0c18..ac261486 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -561,3 +561,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-149** (§634, §527, A-120; principles 2 and 7) The node-engine knows its own name at start from its applied store: the record of the module whose fingerprint is its own `MESH_FINGERPRINT`; the finding writer, discovery and the vault login use it. Only on a first start with no such record do they wait for the first composing to name it. +- **A-150** (§563, A-107, A-115; principles 1 and 7) restic's `night` process, which dumps, gets a `bus` of its own + (its own broker account, as the recovery module's process has) and says item-started and item-ended and reads the + recovery module's events itself; no local request to the tools runtime, and the backup does not move into it. -- 2.54.0 From df569ad63a4cdb8f2f96e57bc5e221d103738a92 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 04:57:52 +0100 Subject: [PATCH 004/116] Answer A-151: the build modules read the artifact store through its provision Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index ac261486..57af4354 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -564,3 +564,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-150** (§563, A-107, A-115; principles 1 and 7) restic's `night` process, which dumps, gets a `bus` of its own (its own broker account, as the recovery module's process has) and says item-started and item-ended and reads the recovery module's events itself; no local request to the tools runtime, and the backup does not move into it. +- **A-151** (§465, ADR 0614 §2; principle 7) The three build modules `require` the provision `artifact-store` to read a + group member's build, with a `binds` file as go-package-registry's (`at`, `serves.port`), and read the blob by the + store's own path `:/v2///blobs/`; they never write into it, so ADR 0614 §2 + holds, and their manifest tests assert the read. -- 2.54.0 From 82c483fccc5f6387d1e4dd8750d61adb7a813b9c Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 04:58:10 +0100 Subject: [PATCH 005/116] Answer A-152: the toolchain digest is the sha256 of the program run Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 57af4354..9a409873 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -568,3 +568,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". group member's build, with a `binds` file as go-package-registry's (`at`, `serves.port`), and read the blob by the store's own path `:/v2///blobs/`; they never write into it, so ADR 0614 §2 holds, and their manifest tests assert the read. +- **A-152** (§472, §492; principles 3 and 7) The toolchain's `digest` is the sha256 of the toolchain program the build + module runs (the `go` or `node` it finds), computed at its start and again when the toolchain's version changes; no + field is added to the provision. -- 2.54.0 From 9a90bec9519d188cd9610ed3a7eaf8588c89d127 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 04:59:12 +0100 Subject: [PATCH 006/116] Answer A-153: a subscription's key resolves through mesh-sdk's EventSubjects Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 9a409873..55ce7387 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -571,3 +571,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-152** (§472, §492; principles 3 and 7) The toolchain's `digest` is the sha256 of the toolchain program the build module runs (the `go` or `node` it finds), computed at its start and again when the toolchain's version changes; no field is added to the provision. +- **A-153** (§559, E §1; principles 7 and 8) The tool runner resolves a `deliver: new` subscription's key + `.` to its subjects with mesh-sdk's `buscompose.EventSubjects`, the one rule from an event name to + its subjects (a seat's event subject or the module's); a pattern with a wildcard is refused with `{error}`. -- 2.54.0 From 79d8ec7a5274ac6265690d7b708cf396d2c66cd9 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:03:06 +0100 Subject: [PATCH 007/116] Answer A-154: the approval mark's findings scope and id Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 55ce7387..5639d495 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -574,3 +574,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-153** (§559, E §1; principles 7 and 8) The tool runner resolves a `deliver: new` subscription's key `.` to its subjects with mesh-sdk's `buscompose.EventSubjects`, the one rule from an event name to its subjects (a seat's event subject or the module's); a pattern with a wildcard is refused with `{error}`. +- **A-154** (design 46 approval mark §4, §16, §19; principles 7 and 8) The approval mark's three findings take scope + `machine` and the id `.`, `.` or `.approvals`, escaped as a key's name, with the + subject of the tool runner on that machine, as the runner's first-view findings already do. -- 2.54.0 From 95e47c27766ebb66915c9a92367c77f27c299c01 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:10:11 +0100 Subject: [PATCH 008/116] Answer A-155: restic's put-off wait is a bound key on the bus Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 5639d495..6af3b904 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -577,3 +577,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-154** (design 46 approval mark §4, §16, §19; principles 7 and 8) The approval mark's three findings take scope `machine` and the id `.`, `.` or `.approvals`, escaped as a key's name, with the subject of the tool runner on that machine, as the runner's first-view findings already do. +- **A-155** (§561, §563, §302, A-77; principles 1, 2 and 3) restic's put-off wait for a restore is a bound key in a + state of its own on the bus, bounded by the setting `put-off-bound`: the key is the put-off record `backed-up` reads, + its expiry raises `backup-waits` and ends the wait, so the night never holds its lock without a bound and no file + or timer keeps it. BKP7 is not built: §555 gives `restore` its class's default with no own-item limit. -- 2.54.0 From b054da9141f7df169e6c627258a8dbc2da6849f4 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:13:47 +0100 Subject: [PATCH 009/116] Answer A-156: distribution's build modules are the build seats' claimers Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 6af3b904..3de24fe0 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -581,3 +581,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". state of its own on the bus, bounded by the setting `put-off-bound`: the key is the put-off record `backed-up` reads, its expiry raises `backup-waits` and ends the wait, so the night never holds its lock without a bound and no file or timer keeps it. BKP7 is not built: §555 gives `restore` its class's default with no own-item limit. +- **A-156** (§610, A-82, design 51 *The move*; principle 7) Once distribution's `callers` list goes, the windows' + driver takes "every build module" as the modules that claim a build seat (`node-build-*`) in the catalog half it + follows, the one source A-82 gives; the holder's own per-verb `Allowed` checks go with the list, since §610's class + defaults are applied where the call is read, and the refusal of an unproven caller is that reader's. -- 2.54.0 From 4020ff8b70f2f75bf3c69b3400539785bc89bacd Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:14:12 +0100 Subject: [PATCH 010/116] Answer A-157: warranted asked again on the holder heard; call-unanswered on a bound key Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 3de24fe0..291cef16 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -585,3 +585,8 @@ names the principle that settles it, and is cited as "design 47 G A-n". driver takes "every build module" as the modules that claim a build seat (`node-build-*`) in the catalog half it follows, the one source A-82 gives; the holder's own per-verb `Allowed` checks go with the list, since §610's class defaults are applied where the call is read, and the refusal of an unproven caller is that reader's. +- **A-157** (design 46 approval mark §16, §19, ADR 0668 §1, A-77; principles 1 and 3) Each try of `warranted` is a + `DoKept`; past its bound the call is made again when the hand-act seat's holder is heard again (the seat-holders + view the runner follows) and at each start; `call-unanswered` is raised on the expiry of a five-minute bound key per + ask, not a timer. A failed read or write of `approvals` is made again at the next marked call and at the next + membership change the runner hears. -- 2.54.0 From a6ffb0a7a1419424817868f1ec578e1811da933e Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:14:53 +0100 Subject: [PATCH 011/116] Answer A-158: a marked call answers {answer, approval} Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 291cef16..bbb4c91c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -590,3 +590,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". view the runner follows) and at each start; `call-unanswered` is raised on the expiry of a five-minute bound key per ask, not a timer. A failed read or write of `approvals` is made again at the next marked call and at the next membership change the runner hears. +- **A-158** (design 46 approval mark §16, §677; principle 8) A marked call's answer is `{answer, approval}`: the tool's + own answer and the line naming the approval, the form a process holder's `gated-ended` has, so a caller reads one + form from both gates. A-157's bound key lives in the runner's state `bound` as `.unanswered.`. -- 2.54.0 From 644a9484abfcfcb0d16091f5cc355fc2c6137d40 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:17:41 +0100 Subject: [PATCH 012/116] Answer A-159: resolved names the commit and the digest of what was laid Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index bbb4c91c..150af96c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -593,3 +593,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-158** (design 46 approval mark §16, §677; principle 8) A marked call's answer is `{answer, approval}`: the tool's own answer and the line naming the approval, the form a process holder's `gated-ended` has, so a caller reads one form from both gates. A-157's bound key lives in the runner's state `bound` as `.unanswered.`. +- **A-159** (§466, §472; principles 3 and 7) A build's `resolved{package, version, digest}` names what was used: its + `version` is the commit the ask names, and its `digest` the sha256 of what was laid (the Go module cache zip, the + npm tarball), or the member build's digest when it was laid from `builds`. -- 2.54.0 From e89d0ce8306d36364aad9b0c4f9bec770acb528e Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:28:59 +0100 Subject: [PATCH 013/116] Answer A-160: a run's candidate from the branch take-in of its members Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 150af96c..7f8165ab 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -596,3 +596,8 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-159** (§466, §472; principles 3 and 7) A build's `resolved{package, version, digest}` names what was used: its `version` is the commit the ask names, and its `digest` the sha256 of what was laid (the Go module cache zip, the npm tarball), or the member build's digest when it was laid from `builds`. +- **A-160** (§64, §190, §321, A-85, A-93; principle 7) A run's candidate is keyed by its run id `run-` from the + runner's `run-started`, beside `try-`; each member {module, commit, branch} maps to its repository by the + registrations and to the branch's revision view as its trunk; its manifests and fingerprints come from the same + branch take-in the indexer computes for any commit (its files read through the seat `git`), so no checker preview + is heard. -- 2.54.0 From 7098d550f3595bf2e385387b851831d2e4ddd96b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:29:53 +0100 Subject: [PATCH 014/116] Answer A-161: the teller's events carry the fields it says Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 7f8165ab..5b6e7a07 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -601,3 +601,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". registrations and to the branch's revision view as its trunk; its manifests and fingerprints come from the same branch take-in the indexer computes for any commit (its files read through the seat `git`), so no checker preview is heard. +- **A-161** (§522, §81, §170; principle 1) An event carries what its hearers need to say it: `recovery-merged` gains + `module` and `branch`, and a forge-made record's `record-opened` gains `repository`, `pull`, `commit` and `branch`, + in their contracts and from their emitters; the teller makes no call per message. -- 2.54.0 From ea4cb84ce1f2c661995ec0a93d7e25c72c7f2db1 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:30:07 +0100 Subject: [PATCH 015/116] Answer A-162: build.ended for every end, the assigner reads no builder bucket Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 5b6e7a07..accd1134 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -604,3 +604,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-161** (§522, §81, §170; principle 1) An event carries what its hearers need to say it: `recovery-merged` gains `module` and `branch`, and a forge-made record's `record-opened` gains `repository`, `pull`, `commit` and `branch`, in their contracts and from their emitters; the teller makes no call per message. +- **A-162** (amends A-100; §575, A-94, ADR 0596; principle 1) The builder's `build.ended` is said for every end of a + build, carrying `outcome` (done or failed) and, when failed, `error`; the assigner's hold says "failed: " + from it and "is being built" while no `build.ended` of that fingerprint is heard. The assigner never reads the + builder's `builds` bucket; its read there (put.go:85, the manifest's `reads`) goes. -- 2.54.0 From 01d8328758c9d29ccef55f5769990182fc58fddf Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:31:47 +0100 Subject: [PATCH 016/116] Answer A-163: an ask's asker is its seat's name, checked against the definition's callers Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index accd1134..6830bea5 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -608,3 +608,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". build, carrying `outcome` (done or failed) and, when failed, `error`; the assigner's hold says "failed: " from it and "is being built" while no `build.ended` of that fingerprint is heard. The assigner never reads the builder's `builds` bucket; its read there (put.go:85, the manifest's `reads`) goes. +- **A-163** (§543, §544; principles 7 and 8) The asker in an ask's accept subject is the asking seat's own name + (`mesh-pipeline-runner`, `mesh-catalog`, `mesh-wants`, `mesh-builds`, `mesh-delivery-checker`), not a nickname, so + steprun checks it against the callers the build seat's definition lists, read from the seat list; no table of its + own and no name map. A body's kind is the word the seat definition gives; a queue keeps its own name. -- 2.54.0 From 28c38dc2b97ed514ade6962ec20c6609765c1b17 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:32:41 +0100 Subject: [PATCH 017/116] Answer A-164: runner_health reads the consumer ages its process writes Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 6830bea5..43da4f84 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -612,3 +612,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". (`mesh-pipeline-runner`, `mesh-catalog`, `mesh-wants`, `mesh-builds`, `mesh-delivery-checker`), not a nickname, so steprun checks it against the callers the build seat's definition lists, read from the seat list; no table of its own and no name map. A body's kind is the word the seat definition gives; a queue keeps its own name. +- **A-164** (§468, §76, §495, A-115; principles 4 and 7) The runner's process writes each durable consumer's oldest + unacknowledged age into a state of the runner's own when it changes; the bundle's `runner_health` reads that state, + its own module's, and asks no seat verb of itself; tools stay the bundle's (A-115). -- 2.54.0 From d71bd5d0fa8373d6f83b5a8dc7dd2b43872b1b39 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:33:08 +0100 Subject: [PATCH 018/116] Answer A-165: seat servers apply the class defaults Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 43da4f84..6492891c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -615,3 +615,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-164** (§468, §76, §495, A-115; principles 4 and 7) The runner's process writes each durable consumer's oldest unacknowledged age into a state of the runner's own when it changes; the bundle's `runner_health` reads that state, its own module's, and asks no seat verb of itself; tools stay the bundle's (A-115). +- **A-165** (§610, A-156; principles 3 and 7) The class defaults of §610 are applied where a seat's verb is answered: + mesh-sdk's seat server (`conn.AnswerSeat`) and the tool runner's `serveSeats` read `seatdef.EffectiveCallers` and + refuse a caller outside them, the unproven one included, before the holder runs; a holder keeps no caller check of + its own. -- 2.54.0 From 7ebdfb32781bb542996d6d92fff9606fa373cf83 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:33:20 +0100 Subject: [PATCH 019/116] Answer A-166: the runner keeps when, the health works out the age Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 6492891c..9d6f13b1 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -619,3 +619,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". mesh-sdk's seat server (`conn.AnswerSeat`) and the tool runner's `serveSeats` read `seatdef.EffectiveCallers` and refuse a caller outside them, the unproven one included, before the holder runs; a holder keeps no caller check of its own. +- **A-166** (A-164, §76, §495; principles 1 and 7) The runner keeps a state `consumers` (history 1, a key per + consumer) holding the time its oldest unacknowledged message was delivered, written when a message is delivered or + acknowledged; `runner_health` works the age out as now minus that time when it is read, so nothing is read on a + timer. -- 2.54.0 From b13dc2bfc490bc4051d86ad8a48daa5ba2cf7345 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:33:59 +0100 Subject: [PATCH 020/116] Answer A-167: the assigner's composition step, held entries, reverts Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 9d6f13b1..36454650 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -623,3 +623,12 @@ names the principle that settles it, and is cited as "design 47 G A-n". consumer) holding the time its oldest unacknowledged message was delivered, written when a message is delivered or acknowledged; `runner_health` works the age out as now minus that time when it is read, so nothing is read on a timer. +- **A-167** (§354, §63, §22, §64, §357, §298; principles 1, 2, 3 and 7) For the assigner's composition step (AS5): its + `run` builds the node-engine's composer (`mesh-compose`) at the fingerprint the node-engine runs; each machine's + input is asked of that node's engine by `compose-candidate`; the machines are the nodes the branch's revision places + the module on; a node is asleep when the watchman's `machine-away` is heard for it; `mesh-compose` reading + `MESH_RUN_INPUT` and answering the run's output is the node-engine's, a row of its own. An entry held for want of a + provider (AS14) carries a field `held` naming the candidates, never only a log line. A revert (AS17) is a want that + goes back to an earlier fingerprint, which the assigner computes itself; a kept data's `form` is read from the + catalog entry's kept declarations (`catalogue.KeptDeclarations`). AS14's named seat and contribution edge, and + AS17's ask of the operator, go to a design line. -- 2.54.0 From 19f969b2db1a191255bec0ed6582a0c6a29431ad Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:34:12 +0100 Subject: [PATCH 021/116] Answer A-168: marked waits take the union of every branch's newest entry Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 36454650..a8063dd6 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -632,3 +632,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". goes back to an earlier fingerprint, which the assigner computes itself; a kept data's `form` is read from the catalog entry's kept declarations (`catalogue.KeptDeclarations`). AS14's named seat and contribution edge, and AS17's ask of the operator, go to a design line. +- **A-168** (E §33, design 46 approval mark §5; principle 3) For a marked wait on a module the runner does not serve, + the marks are the union of the newest entry of every followed branch; where the runner serves the module, its + served entry is added to that union. A mark is never lost. -- 2.54.0 From a2f2e5b98df61e78e35b8b7c5985134789d6cc8b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:35:18 +0100 Subject: [PATCH 022/116] Answer A-169: one key form for every holder of pins Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index a8063dd6..704023b4 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -635,3 +635,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-168** (E §33, design 46 approval mark §5; principle 3) For a marked wait on a module the runner does not serve, the marks are the union of the newest entry of every followed branch; where the runner serves the module, its served entry is added to that union. A mark is never lost. +- **A-169** (§579; principles 2 and 7) A pins state keys a revision by the revision object's own name (the assigner's + `trunk.`, the indexer's `.`), value `{records, missing?}`, and holds two more keys in the same + form in every holder of pins: `made`, written once by create-only when the state is first used, and + `pins-stated`, the `at` of the applied event; pins count only once a `pins-stated` later than `made` is applied. -- 2.54.0 From 17f8ec2fbb98d7170f2c58765892e4f8b74fb3b6 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:36:51 +0100 Subject: [PATCH 023/116] Answer A-170: an ask's kind is in its body, the subject names queue and asker Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 704023b4..18a2d134 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -639,3 +639,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". `trunk.`, the indexer's `.`), value `{records, missing?}`, and holds two more keys in the same form in every holder of pins: `made`, written once by create-only when the state is first used, and `pins-stated`, the `at` of the applied event; pins count only once a `pins-stated` later than `made` is applied. +- **A-170** (§600, §481, §415, A-163; principles 7 and 8) Every ask to a build seat rides `accept..`; + its kind is in its body only, as §600 says. A build seat definition's `stream` names only the queue, and the + generated accept subjects follow; the kind in the subject goes. §543's main subject takes `build` and `run` as + written, the checker's asks riding it until it goes. -- 2.54.0 From d8dade2563d1620648d037deae82232c65724ee0 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:37:04 +0100 Subject: [PATCH 024/116] Answer A-171: a pinned catalog revision names its branch Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 18a2d134..cadf1049 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -643,3 +643,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". its kind is in its body only, as §600 says. A build seat definition's `stream` names only the queue, and the generated accept subjects follow; the kind in the subject goes. §543's main subject takes `build` and `run` as written, the checker's asks riding it until it goes. +- **A-171** (§579, A-169; principles 2 and 8) The `pinned` event's `catalog` entries name their branch: each is + `{branch, revision}`, in the mesh-delivery seat's definition and from the gate that says it, so a holder keys the + pin `.` from what the event says. -- 2.54.0 From db726d734e5eff513e391a710ab1321bcc8c915c Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:37:40 +0100 Subject: [PATCH 025/116] Answer A-172 and A-173: the teller's merge path goes; the view per branch Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index cadf1049..a6659cd3 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -646,3 +646,12 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-171** (§579, A-169; principles 2 and 8) The `pinned` event's `catalog` entries name their branch: each is `{branch, revision}`, in the mesh-delivery seat's definition and from the gate that says it, so a holder keys the pin `.` from what the event says. +- **A-172** (§653, §431, A-161; principles 1 and 7) With the Approve per merge gone, the teller's merge-ask path goes + whole (its reads of the gate's `asks`, its handlers and their tests); the teller keeps `answers` and `answered` for + the assigner's asks only. A view's answer reaches it by the view's event, as §431 says, never by reading the + view's state. The gate fills `recovery-merged`'s `branch` from the branch it merged into and its `module` from the + catalog half's registrations; while no path of the gate opens a forge-made record, the teller says none. +- **A-173** (§507, §512, §532, A-103; principle 7) The view derives each watched branch's source on its own: the + source row and `delivered` per branch, a repository's reach from the source of the first branch of its + registration (before the first registrations, the branches `source` answers), and `view_tiers` with no revision + answering per branch; no branch is named in its code. -- 2.54.0 From 4c7b86af2cd786c6efb232af111a07867d67b85d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:37:52 +0100 Subject: [PATCH 026/116] Answer A-174: the indexer keeps its runs; an unwatched branch takes the trunk's view Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index a6659cd3..2458deb1 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -655,3 +655,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". source row and `delivered` per branch, a repository's reach from the source of the first branch of its registration (before the first registrations, the branches `source` answers), and `view_tiers` with no revision answering per branch; no branch is named in its code. +- **A-174** (§64, §190, A-160, A-93; principles 2 and 7) The indexer keeps a state `runs` (key `run-`, value the + members and the modules whose pipeline ended), written on `run-started` and on each of the run's `pipeline-ended`, + removed with the candidate, so a restart loses nothing. A member on a branch its registration does not watch takes + the trunk's revision view as the base of its take-in; one on a watched branch takes that branch's. -- 2.54.0 From 65dcc83bf1f5275a5603a27273d48441047c0b13 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:39:32 +0100 Subject: [PATCH 027/116] Answer A-175: the teller and the view follow each other's answers by views families Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 2458deb1..f84a1013 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -659,3 +659,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". members and the modules whose pipeline ended), written on `run-started` and on each of the run's `pipeline-ended`, removed with the candidate, so a restart loses nothing. A member on a branch its registration does not watch takes the trunk's revision view as the base of its take-in; one on a watched branch takes that branch's. +- **A-175** (§512, §431, A-43, A-172; principles 1 and 7) The teller says its `answers` as a plain views family + `views.answers`, and the view says its own `answers` the same way; each follows the other's by mesh-sdk's + `ProcessReader.Follow` (first view through the owner's tool, then its views family). That is the "event" A-172 and + §431 mean; no own follower and no module-event adopt are added. -- 2.54.0 From 0afac8d52ec552c4386d7335632e3f77268b9978 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:40:13 +0100 Subject: [PATCH 028/116] Answer A-176: one mesh-sdk helper writes a process's consumer facts Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index f84a1013..07f4495c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -663,3 +663,8 @@ names the principle that settles it, and is cited as "design 47 G A-n". `views.answers`, and the view says its own `answers` the same way; each follows the other's by mesh-sdk's `ProcessReader.Follow` (first view through the owner's tool, then its views family). That is the "event" A-172 and §431 mean; no own follower and no module-event adopt are added. +- **A-176** (A-166, §579, §76; principle 7; code shared between modules is in mesh-sdk) A process writes its durable + consumers' facts (stream, name, acknowledged sequence, pending, last event applied and its `at`, and when its oldest + unacknowledged message was delivered) into its module's own state `consumers` (history 1, a key per consumer) through + one mesh-sdk helper, after each message it applies; the runner and the indexer use it, and their tools read that + state. -- 2.54.0 From 9c6a6d2f005069f755cc003480db4bf12d8c5a42 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:41:02 +0100 Subject: [PATCH 029/116] Answer A-177: a compiled verb carries its approval mark Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 07f4495c..6fcfd8a0 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -668,3 +668,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". unacknowledged message was delivered) into its module's own state `consumers` (history 1, a key per consumer) through one mesh-sdk helper, after each message it applies; the runner and the indexer use it, and their tools read that state. +- **A-177** (design 46 approval mark §4; principle 7) mesh-sdk's compiled `catalogue.Verb` gains `NeedsApproval`, + copied by `SeatsFromDefinitions` from the definition, so the validator and every reader of the seat list read a + verb's mark from one place. -- 2.54.0 From 07aa46a02d911e6128b17101ebc423321b7e0e14 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:41:48 +0100 Subject: [PATCH 030/116] Answer A-178: the view and the teller say their answers with a read tool and marks Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 6fcfd8a0..82f04149 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -671,3 +671,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-177** (design 46 approval mark §4; principle 7) mesh-sdk's compiled `catalogue.Verb` gains `NeedsApproval`, copied by `SeatsFromDefinitions` from the definition, so the validator and every reader of the seat list read a verb's mark from one place. +- **A-178** (A-175, A-43; principles 7 and 8) The view says its `answers` as other owners say theirs: a read tool + `view_read_answers` (mesh-sdk `views.ReadTool`, in the view's tools bundle, the teller among its callers) and a + marks state `view-marks` (history 1), as the assigner and the indexer have; the teller's side is the same, with + `teller_read_answers` and `teller-marks`. -- 2.54.0 From f053779abe3b25e126a470509e3529eb6a2367fc Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:43:02 +0100 Subject: [PATCH 031/116] Answer A-179: the seat server refuses the unproven; the grants hold the rest Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 82f04149..7562b147 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -675,3 +675,8 @@ names the principle that settles it, and is cited as "design 47 G A-n". `view_read_answers` (mesh-sdk `views.ReadTool`, in the view's tools bundle, the teller among its callers) and a marks state `view-marks` (history 1), as the assigner and the indexer have; the teller's side is the same, with `teller_read_answers` and `teller-marks`. +- **A-179** (refines A-165; §610, §336; principles 3 and 7) Where a seat's verb is answered, an unproven caller is + refused, and so is every caller when the verb's effective callers are empty; a proven caller is taken as among + them, since the grants part composes a verb's call subject only for the callers its effective list names, so the + bus holds the rest out. `seatdef.DefaultCallers` follows §610 (act, warrant and accept: operator, sessions and + invokers). -- 2.54.0 From 7f7eefdb44de1db61c2e41e02eefcaa78477754e Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:43:40 +0100 Subject: [PATCH 032/116] Answer A-180: a run is placed on its candidate's catalog revision Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 7562b147..4428779f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -680,3 +680,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". them, since the grants part composes a verb's call subject only for the callers its effective list names, so the bus holds the rest out. `seatdef.DefaultCallers` follows §610 (act, warrant and accept: operator, sessions and invokers). +- **A-180** (§64, §420, A-160, A-174; principles 1 and 7) The runner places a run's pipelines when it hears the + catalog seat's `catalog-revision` for the candidate `run-` (a candidate's revision, its subject naming it), + reading the candidate's entries and fingerprints through the seat's `revision` verb with the candidate's group; + `` is a random 12-hex id the runner makes, so two runs of one commit are two pipelines. -- 2.54.0 From c518e59b9b1ff7739de0ddc416d13276fd980ffb Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:44:06 +0100 Subject: [PATCH 033/116] Answer A-181: build.ended kept last per fingerprint, read whole at start Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md index 4428779f..26864c96 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md +++ b/03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md @@ -684,3 +684,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". catalog seat's `catalog-revision` for the candidate `run-` (a candidate's revision, its subject naming it), reading the candidate's entries and fingerprints through the seat's `revision` verb with the candidate's group; `` is a random 12-hex id the runner makes, so two runs of one commit are two pipelines. +- **A-181** (amends A-100 and A-162; §556; principles 1 and 2) The builder's `build.ended` stream keeps the last + message per subject (one per fingerprint), and the assigner reads it whole at its start as §556 reads a kept + stream, then hears it; so what was built, and a failed build's error, survive its restart and it reads no builder + bucket. `assigner_put`'s fingerprint-prefix form goes: a put names the whole fingerprint. -- 2.54.0 From 23be8beda93f40b4726a1297dfef5f17d6a9ded5 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:44:31 +0100 Subject: [PATCH 034/116] Answer A-182 in a new part: a superseded step's drop is asked where it stands Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- .../47-milestones/G-22-lead-answers-2.md | 18 ++++++++++++++++++ 03-DESIGN/01-to-be/47-milestones/G.md | 1 + 2 files changed, 19 insertions(+) create mode 100644 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md new file mode 100644 index 00000000..4aafebeb --- /dev/null +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -0,0 +1,18 @@ +--- +layer: to-be +status: in-progress +design: 47 +milestone: G +updated: 2026-11-12 +decisions: + - "ADR 0667" +--- +# 47, milestone G — the lead's answers to develop's questions, continued + +The answers of [G-20](G-20-lead-answers.md) go on here, since that part reached its size bound: each one line, naming +the principle that settles it, cited as "design 47 G A-n". + +- **A-182** (§31, §350, §119; principles 2 and 7) A superseded step's ask is dropped where it stands: a taken step + keeps the node `ask-taken` named, and the drop is asked of that node's holder of the build seat; an untaken ask's drop + is asked of any holder, which records it in the seat's shared drop key, so no holder takes it. Steps on `mesh-builds` + and `mesh-wants`, whose seats serve no `drop`, are only ended superseded. diff --git a/03-DESIGN/01-to-be/47-milestones/G.md b/03-DESIGN/01-to-be/47-milestones/G.md index 19ede5c2..a71562b7 100644 --- a/03-DESIGN/01-to-be/47-milestones/G.md +++ b/03-DESIGN/01-to-be/47-milestones/G.md @@ -104,5 +104,6 @@ The part is eighteen files, each read whole, its design lines numbered across th - [G-18-fix-round-six-seven](G-18-fix-round-six-seven.md): the fix round of §587 to §676: the approval mark once no verb names its callers, the keeper's snapshots, the recovery module's verbs, the node-engine's kept entries, the gate before a marked verb's running, develop's D-16 to D-49, and a delivery's wait on another machine's network (§677 to §705). - [G-19-outside-wait-and-refusals](G-19-outside-wait-and-refusals.md): a delivery's wait on an outside cause, written whole once (§706, in place of §705), and the finding writer's own refusals in every bundle (§707, amending §580). - [G-20-lead-answers](G-20-lead-answers.md): the lead's one-line answers to develop's questions, each tested against the principles (A-1 on). +- [G-22-lead-answers-2](G-22-lead-answers-2.md): the lead's answers continued, from A-182. Design 34's milestone [every-event](../34-milestones/every-event.md) and design 46's milestone [7-approval-mark](../46-milestones/7-approval-mark.md) ship in milestone G's release, built in its repositories beside G's lines (lead-47, 2026-11-11 15:30 CET); where one of their lines and a line of G differ, G's later line holds and the other is corrected in place (§624 to §626). -- 2.54.0 From 1bfbeda9ec4da6cf21bc761c0e382461ad1251dc Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:44:43 +0100 Subject: [PATCH 035/116] Answer A-183: an unenforced mark is refused by both validators Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 4aafebeb..1e6c0a53 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -16,3 +16,6 @@ the principle that settles it, cited as "design 47 G A-n". keeps the node `ask-taken` named, and the drop is asked of that node's holder of the build seat; an untaken ask's drop is asked of any holder, which records it in the seat's shared drop key, so no holder takes it. Steps on `mesh-builds` and `mesh-wants`, whose seats serve no `drop`, are only ended superseded. +- **A-183** (design 46 approval mark §4, §23; principles 3 and 7) A manifest that marks a verb nothing enforces is + refused by the validator wherever it runs, as every rule's problem is; the indexer's "set aside to wait" is only its + reading of a field it does not yet know (the reader edge of §23), so no new waiting verdict is added. -- 2.54.0 From 8834af8bd020e6ee7d0bf21a9a8cd3a07d6a70ad Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:45:27 +0100 Subject: [PATCH 036/116] Answer A-184: main's subject keeps the checker's asks until it goes Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 1e6c0a53..83fa5e40 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -19,3 +19,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-183** (design 46 approval mark §4, §23; principles 3 and 7) A manifest that marks a verb nothing enforces is refused by the validator wherever it runs, as every rule's problem is; the indexer's "set aside to wait" is only its reading of a field it does not yet know (the reader edge of §23), so no new waiting verdict is added. +- **A-184** (clarifies A-170; §543; principle 3) Until main's subject goes, it also takes the checker's `check` and + `recheck` asks, so no ask that runs today is refused by G; a queue is only `delivery`, `check` or `recheck`, and + steprun's `AskKinds` lists no `step` queue. -- 2.54.0 From ae6d3ddecc71b7d0bc5f70cc4d28a895163b8557 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:45:40 +0100 Subject: [PATCH 037/116] Answer A-185: the catalog client hands a candidate's revision to a hook Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 83fa5e40..df7c2d2c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -22,3 +22,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-184** (clarifies A-170; §543; principle 3) Until main's subject goes, it also takes the checker's `check` and `recheck` asks, so no ask that runs today is refused by G; a queue is only `delivery`, `check` or `recheck`, and steprun's `AskKinds` lists no `step` queue. +- **A-185** (A-180; principle 7) The catalog client (`meshcatalogclient`'s catalog follower), which already hears every + `catalog-revision`, hands a candidate's revision it does not keep to a hook its caller sets; the runner sets it to + place a run's pipelines. mesh-sdk's event hub keeps its one handler per pattern. -- 2.54.0 From 0a10272f3dc50acf58e5d1977160d52010fedc0d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:46:58 +0100 Subject: [PATCH 038/116] Answer A-186: the seat server takes the definition from its caller's seat list Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index df7c2d2c..097aa54f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -25,3 +25,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-185** (A-180; principle 7) The catalog client (`meshcatalogclient`'s catalog follower), which already hears every `catalog-revision`, hands a candidate's revision it does not keep to a hook its caller sets; the runner sets it to place a run's pipelines. mesh-sdk's event hub keeps its one handler per pattern. +- **A-186** (A-179; principles 3 and 7) `conn.AnswerSeat` takes the seat's definition from its caller, which reads it + from the seat list it already follows; a verb the definition does not hold, or a definition not yet read, is + refused for every caller and said so, so a holder answers only once its seat list is read. -- 2.54.0 From 2f5268d97a2c9deb59cb2168f7c700d449434490 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:47:38 +0100 Subject: [PATCH 039/116] Answer A-187: the consumer ledger keeps a message's first delivery time Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 097aa54f..37de8ef0 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -28,3 +28,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-186** (A-179; principles 3 and 7) `conn.AnswerSeat` takes the seat's definition from its caller, which reads it from the seat list it already follows; a verb the definition does not hold, or a definition not yet read, is refused for every caller and said so, so a holder answers only once its seat list is read. +- **A-187** (A-176, §76; principle 3) The consumer ledger keeps a message's first delivery time: a message delivered + again (asked again, or after a restart) keeps the time it was first delivered, so a message that never settles + grows old and §76's check fires for it. -- 2.54.0 From 92709ec3114c0c3931ebe21d6d8ae9bd435f78a7 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:47:54 +0100 Subject: [PATCH 040/116] Answer A-188: a take-in writes its entries into the gate's record Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 37de8ef0..f98dcbdb 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -31,3 +31,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-187** (A-176, §76; principle 3) The consumer ledger keeps a message's first delivery time: a message delivered again (asked again, or after a restart) keeps the time it was first delivered, so a message that never settles grows old and §76's check fires for it. +- **A-188** (A-172, §170, §151; principles 3 and 7) A take-in writes its entries (each with its module) into the + gate's record, so `recovery-merged`'s `module` is filled from the record; no forge-made open path is built, since + G ends the mark (§151). A record of the old milestone form, made before G, says no branch. -- 2.54.0 From 0d153c98e07280ae081671fd1b2b57315947d023 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:48:09 +0100 Subject: [PATCH 041/116] Answer A-189: version-delivered and version-released read whole at start Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index f98dcbdb..0373731f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -34,3 +34,8 @@ the principle that settles it, cited as "design 47 G A-n". - **A-188** (A-172, §170, §151; principles 3 and 7) A take-in writes its entries (each with its module) into the gate's record, so `recovery-merged`'s `module` is filled from the record; no forge-made open path is built, since G ends the mark (§151). A record of the old milestone form, made before G, says no branch. +- **A-189** (§376, §374, A-181; principles 1, 2 and 7) At its start the assigner reads whole, as A-181 reads + `build.ended`, the streams of its own `version-delivered` and of the catalog seat's `version-released`, so it says + each version delivered once and knows the released ones. A dependent whose want changes fingerprint waits, by an + edge of kind 2, 4 or 6, for its dependency's newest released version on the dependent's branch not yet said + delivered; on a branch where no version is released there is no wait. -- 2.54.0 From d01e1121f833a722b660782f1b43941223df8410 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:48:55 +0100 Subject: [PATCH 042/116] Answer A-190: the indexer's kept calls are open while what they serve stands Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 0373731f..0bb30635 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -39,3 +39,8 @@ the principle that settles it, cited as "design 47 G A-n". each version delivered once and knows the released ones. A dependent whose want changes fingerprint waits, by an edge of kind 2, 4 or 6, for its dependency's newest released version on the dependent's branch not yet said delivered; on a branch where no version is released there is no wait. +- **A-190** (ADR 0668 §1, §2; principles 3 and 7) A kept call is kept only while what it serves still stands; for the + indexer's four: `messageVia` while the commit's take-in is still pending, `stepsVia` while the candidate is held, + `sourceVia` while the branch is watched, `versionsVia` while the module is in that branch's newest view. Once + that ends, the call stops and is not said unanswered. `pin-missing` takes scope `module`, id + `mesh-delivery-indexer.pin.`. -- 2.54.0 From 88e0ca6f2d2ab038e86bdabc808362303ee3e79f Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:49:41 +0100 Subject: [PATCH 043/116] Answer A-191: a failed pipeline with no known author has no owner Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 0bb30635..6188026b 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -44,3 +44,6 @@ the principle that settles it, cited as "design 47 G A-n". `sourceVia` while the branch is watched, `versionsVia` while the module is in that branch's newest view. Once that ends, the call stops and is not said unanswered. `pin-missing` takes scope `module`, id `mesh-delivery-indexer.pin.`. +- **A-191** (§33, §540; principle 3) A `pipeline-failed` finding whose commit no pull request merged, or whose `pull` + read fails, is written with no `owner` (so it reaches the operator at once) and says why in its explanation; a + failed read is said and the owner is written at the next step end of that commit. -- 2.54.0 From 39b41496877e45c040e07f4b633b6e715dd841b4 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:50:28 +0100 Subject: [PATCH 044/116] Answer A-192: the watchman hears waits and running, reads no other state Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 6188026b..1d8929c7 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -47,3 +47,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-191** (§33, §540; principle 3) A `pipeline-failed` finding whose commit no pull request merged, or whose `pull` read fails, is written with no `owner` (so it reaches the operator at once) and says why in its explanation; a failed read is said and the owner is written at the next step end of that commit. +- **A-192** (ADR 0596, ADR 0603 §8, §499, §541, §520; principles 1 and 7) The builder says `wait-held` and `wait-ended` + for a key queued behind a package, in the one wait form with its `part`, and the watchman times it from those; its + reads of the builder's `builds`, the node-engine's `have` and `mesh-host.health` go, replaced by the node-engine's + `running` (with `healthy`) and its wait events. -- 2.54.0 From 18a5617fa4bae1d5188acdf3acac9c22059e22a1 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:51:24 +0100 Subject: [PATCH 045/116] Answer A-193: how a run is kept, placed and said Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 1d8929c7..69eea799 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -51,3 +51,11 @@ the principle that settles it, cited as "design 47 G A-n". for a key queued behind a package, in the one wait form with its `part`, and the watchman times it from those; its reads of the builder's `builds`, the node-engine's `have` and `mesh-host.health` go, replaced by the node-engine's `running` (with `healthy`) and its wait events. +- **A-193** (§64, §73, §373, §420, A-180, A-185; principles 2, 3 and 7) For a run: `run` writes each member's + pipeline at once (key `..`, running, no steps, `Run` its id), and the candidate's + revision places its steps by compare-and-set; `pipeline-started` is said when the steps are placed, with the + fingerprint and the candidate's revision; `run-started`'s subject names one member's module, branch and commit, or + for several the first member's module and branch and `run-`; a member naming no branch is refused. The hook is + called once per candidate revision at the catalog follower's one subscription, whatever branches are followed, so + a runner following none still hears it. As §373 says, a run builds each member and its dependents: the dependents' + pipelines come from the candidate's entries whose fingerprints the members change. -- 2.54.0 From 19a1d9342e5e1b2344ea204425fdf0cb087d5adb Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:52:17 +0100 Subject: [PATCH 046/116] Answer A-194: the indexer's runs get a read and a drop tool Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 69eea799..a496f27f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -59,3 +59,6 @@ the principle that settles it, cited as "design 47 G A-n". called once per candidate revision at the catalog follower's one subscription, whatever branches are followed, so a runner following none still hears it. As §373 says, a run builds each member and its dependents: the dependents' pipelines come from the candidate's entries whose fingerprints the members change. +- **A-194** (principle 4; §64) The indexer's state `runs` and its run candidates get tools as every kept thing does: + `indexer_runs` reads them and `indexer_run_drop` drops one by hand (its hand act written first); a run id is + `run-` and the runner's random 12-hex id, which the indexer's wider pattern accepts. -- 2.54.0 From 2188dfaffec44ec54fe73f1b7cc3f44c5e81b1b3 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:52:34 +0100 Subject: [PATCH 047/116] Answer A-195: the runner's pipeline wait Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index a496f27f..ea07643a 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -62,3 +62,9 @@ the principle that settles it, cited as "design 47 G A-n". - **A-194** (principle 4; §64) The indexer's state `runs` and its run candidates get tools as every kept thing does: `indexer_runs` reads them and `indexer_run_drop` drops one by hand (its hand act written first); a run id is `run-` and the runner's random 12-hex id, which the indexer's wider pattern accepts. +- **A-195** (§65, §266, §276, §534, §19, A-77, A-149; principles 2, 3 and 7) The runner's `pipeline` wait is a field on + each held pipeline's record (`held`: since, and the fingerprint awaited), no new state. A take-in changes the runner + when its own module's entry (its own name, A-149) gets a new fingerprint; every pipeline started after that take-in + is held. The pipelines' records are on the bus, so whichever runner holds the seat when the wait ends starts them: + the wait ends on the node-engine seat's `running` for the runner's module at the awaited fingerprint with `healthy` + true, on any node; its 30 minutes are a bound key, whose expiry starts the held pipelines and writes a finding. -- 2.54.0 From 24df2be69a3ab26d1fa214f03607e2bc2b254725 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:52:48 +0100 Subject: [PATCH 048/116] Answer A-196: an empty status never asks the operator for approval Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index ea07643a..5952eda2 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -68,3 +68,6 @@ the principle that settles it, cited as "design 47 G A-n". is held. The pipelines' records are on the bus, so whichever runner holds the seat when the wait ends starts them: the wait ends on the node-engine seat's `running` for the runner's module at the awaited fingerprint with `healthy` true, on any node; its 30 minutes are a bound key, whose expiry starts the held pipelines and writes a finding. +- **A-196** (§553 with A-91; principle 7; the operator, 2026-11-09: merges need no approval) An empty status makes a + step `optional`, as §553 says, except the approval step: a policy that names no approval status asks the operator + nothing, as A-91 says; only a policy that names approval asks for it. -- 2.54.0 From 9adfad11082bba7fa4ffeddd2b37104cbaaf984d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:53:54 +0100 Subject: [PATCH 049/116] Answer A-197: the node-engine raises its own findings, the watchman reads none of its state Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 5952eda2..84b032a9 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -71,3 +71,8 @@ the principle that settles it, cited as "design 47 G A-n". - **A-196** (§553 with A-91; principle 7; the operator, 2026-11-09: merges need no approval) An empty status makes a step `optional`, as §553 says, except the approval step: a policy that names no approval status asks the operator nothing, as A-91 says; only a policy that names approval asks for it. +- **A-197** (ADR 0596, A-192, A-149; principles 1, 3 and 7) What only the node-engine knows of itself it raises as its + own findings through its finding writer: a have's failed or removed phase and its detail, its kept-data findings, + an unreachable tunnel, and every part of its health report (machine network, rewritten network, machine units, + relogin needed, directory used as found, node account fallback). The watchman stops reading `node-engine.have` and + `mesh-host.health` and raising those; it keeps only what it sees across parts. -- 2.54.0 From e0f23683b0ca6575dc5a4b0a72d0b9d802796aaf Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:54:17 +0100 Subject: [PATCH 050/116] Answer A-198 and A-199: the act's form in mesh-sdk; AdoptEvent for the candidates hook Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 84b032a9..01797517 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -76,3 +76,9 @@ the principle that settles it, cited as "design 47 G A-n". an unreachable tunnel, and every part of its health report (machine network, rewritten network, machine units, relogin needed, directory used as found, node account fallback). The watchman stops reading `node-engine.have` and `mesh-host.health` and raising those; it keeps only what it sees across parts. +- **A-198** (§677; principle 7; shared code is in mesh-sdk) The act's form, `ActDigest` and the ask's form move from + `operatorchannelclient` into mesh-sdk's `go/operatorask`, which the client re-exports, so the seat server in + `go/process` holds the gate with no import of mesh-contracts and no cycle between the two. +- **A-199** (A-185, A-193; principle 7) mesh-sdk's `ProcessReader` gains `AdoptEvent(seat, event, hear)`, a seat event + heard on the one subscription with no picture, made at once if no follower made it; meshcatalogclient's + `WireCandidatesProcess` adopts `catalog-revision` through it and hands each candidate revision to the hook. -- 2.54.0 From 8e767e10fb6648a65e47f6562b3e97a45da1f31b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:55:31 +0100 Subject: [PATCH 051/116] Answer A-200: a record joins its take-in by its milestone Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 01797517..21a0bcb0 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -82,3 +82,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-199** (A-185, A-193; principle 7) mesh-sdk's `ProcessReader` gains `AdoptEvent(seat, event, hear)`, a seat event heard on the one subscription with no picture, made at once if no follower made it; meshcatalogclient's `WireCandidatesProcess` adopts `catalog-revision` through it and hands each candidate revision to the hook. +- **A-200** (§502, A-188; principles 7 and 8) A taken-in delivery record's `milestone` is `.`, + so the watchman ties a `record-opened` to the `take-in.taken` of that branch and source revision by its milestone; + `record-opened` gains nothing, and a record is covered only by what is late for its own revision's entries. -- 2.54.0 From 7843f56522079c1128b4cb1993962c6a80bb7cbf Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:55:43 +0100 Subject: [PATCH 052/116] Answer A-201: the assigner keeps a run's candidate graph until the run ends Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 21a0bcb0..cc1d5833 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -85,3 +85,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-200** (§502, A-188; principles 7 and 8) A taken-in delivery record's `milestone` is `.`, so the watchman ties a `record-opened` to the `take-in.taken` of that branch and source revision by its milestone; `record-opened` gains nothing, and a record is covered only by what is late for its own revision's entries. +- **A-201** (§189, §190, A-160, A-174; principle 7) The assigner keeps a candidate's assignment graph per run (key + `run-`), made when the candidate's revision is heard and dropped on that run's last `pipeline-ended`, as the + indexer keeps the candidate; the gate's `heads-replaced` drops nothing in the assigner. -- 2.54.0 From 98d7be07fd07c41455ab1539a33dd71cc0ba9ee0 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:56:04 +0100 Subject: [PATCH 053/116] Answer A-202: a pipeline says the publish that started it Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index cc1d5833..f9724a3e 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -88,3 +88,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-201** (§189, §190, A-160, A-174; principle 7) The assigner keeps a candidate's assignment graph per run (key `run-`), made when the candidate's revision is heard and dropped on that run's last `pipeline-ended`, as the indexer keeps the candidate; the gate's `heads-replaced` drops nothing in the assigner. +- **A-202** (§31; principles 2 and 7) A pipeline's record and `pipeline-started` say their cause: an optional + `published` {artifact, version} set when a package's publish started it; a newer publish of the same artifact on + the same branch supersedes the running pipelines whose `published` names that artifact at an older version. -- 2.54.0 From fc7e52c404bb10049f16d7be512ceb3d7e093d58 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:56:37 +0100 Subject: [PATCH 054/116] Answer A-203: the forms of the withheld path Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index f9724a3e..3a644801 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -91,3 +91,10 @@ the principle that settles it, cited as "design 47 G A-n". - **A-202** (§31; principles 2 and 7) A pipeline's record and `pipeline-started` say their cause: an optional `published` {artifact, version} set when a package's publish started it; a newer publish of the same artifact on the same branch supersedes the running pipelines whose `published` names that artifact at an older version. +- **A-203** (design 46 approval mark §6, G §195, §424; principles 1, 7 and 8) The withheld path's forms: the tool + runner's announcement carries `fingerprint` (its own `MESH_FINGERPRINT`) beside `capabilities`; the node's record + gains `runner-capabilities` and `runner-fingerprint`, its merge into `capabilities` staying for placement; the + assignment half's per-node item gains `readings` and `fingerprint`, its digest over all of it, read from the node + record the assigner holds; the grants part follows the assignment half by `mesh-wants`' `revision` and its + `assignment-revision` event; its user list carries `withheld: [{module, subject, why}]`, and the seat `mesh-grants`' + verb `withheld` takes `{node}` and answers `{node, modules: [{module, subjects: [{subject, why}]}]}`. -- 2.54.0 From 6e65fe2246476b1403de550d8b758a490b580970 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:57:02 +0100 Subject: [PATCH 055/116] Answer A-204: the assigner keeps its said put waits on the bus Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 3a644801..ea80fc40 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -98,3 +98,5 @@ the principle that settles it, cited as "design 47 G A-n". record the assigner holds; the grants part follows the assignment half by `mesh-wants`' `revision` and its `assignment-revision` event; its user list carries `withheld: [{module, subject, why}]`, and the seat `mesh-grants`' verb `withheld` takes `{node}` and answers `{node, modules: [{module, subjects: [{subject, why}]}]}`. +- **A-204** (§498; principle 2) The assigner keeps which put waits it said in its own state on the bus, so a put + that ends while the assigner is stopped gets its `wait-ended` at the next start. -- 2.54.0 From d60302b2bd8b9aeaf4e74b3e4d3d9070aaeddcb9 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:57:33 +0100 Subject: [PATCH 056/116] Answer A-205: grants-for reads its candidate through revision Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index ea80fc40..9e191d6c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -100,3 +100,7 @@ the principle that settles it, cited as "design 47 G A-n". verb `withheld` takes `{node}` and answers `{node, modules: [{module, subjects: [{subject, why}]}]}`. - **A-204** (§498; principle 2) The assigner keeps which put waits it said in its own state on the bus, so a put that ends while the assigner is stopped gets its `wait-ended` at the next start. +- **A-205** (§441, §195; principle 7) `grants-for` reads its candidate's catalog half through the catalog seat's + `revision`: for a run, with `group` `run-` (the candidate's newest); for a source revision, with `branch` and a + new optional argument `source`, answering the branch's revision taken in from that source revision. It answers the + permissions the composed memberships gain and lose with the candidate's entries in place of the branch's newest. -- 2.54.0 From 18ecf1c47f9673623fbf2e3fd667f3057309b8c7 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:57:53 +0100 Subject: [PATCH 057/116] Answer A-206: the runner's release verb, its wait finding and clock Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 9e191d6c..2d773c7e 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -104,3 +104,8 @@ the principle that settles it, cited as "design 47 G A-n". `revision`: for a run, with `group` `run-` (the candidate's newest); for a source revision, with `branch` and a new optional argument `source`, answering the branch's revision taken in from that source revision. It answers the permissions the composed memberships gain and lose with the candidate's entries in place of the branch's newest. +- **A-206** (A-195, §65, §534, A-181; principles 3, 4 and 8) The runner's held pipelines are released by hand through + a seat verb `release` of `mesh-pipeline-runner` (class act, its hand act written first), beside `start` and + `ask-again`, its tool `runner_release`; the bound's expiry writes the finding `pipeline-waits` (scope `module`, id + `..`); the wait's `on` gains the value `runner version`; its `clock-from` is the `build.ended` + of the awaited fingerprint, heard as A-181 says. -- 2.54.0 From 456a1eae45c1b306a4546aa5ccd13c798e9e3d17 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:58:10 +0100 Subject: [PATCH 058/116] Answer A-207: the runner's recoveries state; widens from revision and grants-for Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 2d773c7e..84b47517 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -109,3 +109,9 @@ the principle that settles it, cited as "design 47 G A-n". `ask-again`, its tool `runner_release`; the bound's expiry writes the finding `pipeline-waits` (scope `module`, id `..`); the wait's `on` gains the value `runner version`; its `clock-from` is the `build.ended` of the awaited fingerprint, heard as A-181 says. +- **A-207** (§86, §81, §415, §71, §275, §335, §441; principles 1, 2 and 7) The runner keeps a state `recoveries` + (commit to why) written when it hears the mesh-delivery seat's `recovery-merged`, read at a pipeline's start and + resume; a recovery heard after its pipeline started asks nothing again. `widens` is computed from two reads: the + catalog seat's `revision` of the candidate against the branch's newest (the serving parts' entries and fingerprints, + found by holder from the seat list; the acting rules `step`, `on` and `bound` and the credentials the entries + declare), and the grants part's `grants-for` (the permissions); no other verb. -- 2.54.0 From af25c1424f399fbb1b35fb07c2b204669886ba4d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:58:36 +0100 Subject: [PATCH 059/116] Answer A-208: the indexer writes the edges; every branch takes in as the trunk does Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 84b47517..2701b027 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -115,3 +115,9 @@ the principle that settles it, cited as "design 47 G A-n". catalog seat's `revision` of the candidate against the branch's newest (the serving parts' entries and fingerprints, found by holder from the seat list; the acting rules `step`, `on` and `bound` and the credentials the entries declare), and the grants part's `grants-for` (the permissions); no other verb. +- **A-208** (ADR 0656, §558, §605, §16, §293, §600, §18, §104, §44-§46, A-93, A-190; principle 7) The indexer writes a + catalog entry's edges of kinds 1 to 6, as the catalog graph is its own; the long form of `invokes` is read by the + second reader release's `InvokeFields`, which G merges. Every watched branch's take-in uses the trunk's machinery, + per branch: its own pending revision (holding only that branch) and its own groups. `stepsVia` is open while the + entry's fingerprint is still in the branch's newest revision; `messageVia` while a pending entry names the merge or + a take-in of that commit runs. -- 2.54.0 From ab03e427f471e02903fec86c20a334b46d454a13 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 05:59:53 +0100 Subject: [PATCH 060/116] Answer A-209: a digest in a key is escaped; test states refuse what the bus refuses Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 2701b027..3883e876 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -121,3 +121,7 @@ the principle that settles it, cited as "design 47 G A-n". per branch: its own pending revision (holding only that branch) and its own groups. `stepsVia` is open while the entry's fingerprint is still in the branch's newest revision; `messageVia` while a pending entry names the merge or a take-in of that commit runs. +- **A-209** (design 46 approval mark §13, §677, §73; principles 3 and 7) A digest in a key is escaped with mesh-sdk's + `keys.EscapeName`, the one escape form for every name in a key, in both gates: `.act.`. The + kind (a test's in-memory state accepting a key the bus refuses) is fixed where it lives: mesh-sdk's in-memory state + for tests refuses every key the bus would. -- 2.54.0 From a56c9b626231ea834170a8aaf43cbecb07a8f47b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:00:25 +0100 Subject: [PATCH 061/116] Answer A-210: other modules found as seat holders when called; callers by seat Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 3883e876..ab0ccc50 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -125,3 +125,8 @@ the principle that settles it, cited as "design 47 G A-n". `keys.EscapeName`, the one escape form for every name in a key, in both gates: `.act.`. The kind (a test's in-memory state accepting a key the bus refuses) is fixed where it lives: mesh-sdk's in-memory state for tests refuses every key the bus would. +- **A-210** (§7, §428, A-126, A-131, ADR 0596; principles 3 and 7) A module that calls another module's tool or hears + its module events finds that module as the holder of the seat it holds, with `seatlist.HolderOf`, when it calls, + asking again after a failure and never stopping its start for it; a read of another module's bucket goes (each by + its own row). A tool's callers list names no module: it takes the holders of the seats `node-tool-runner` and + `mesh-healers` from the seat list when a call is checked, beside `operator`. -- 2.54.0 From fbb60b952ca0cace59796988d9f2df02688e56d4 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:00:43 +0100 Subject: [PATCH 062/116] Answer A-211: the assigner's put waits in a state of their own Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index ab0ccc50..6bebed04 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -130,3 +130,6 @@ the principle that settles it, cited as "design 47 G A-n". asking again after a failure and never stopping its start for it; a read of another module's bucket goes (each by its own row). A tool's callers list names no module: it takes the holders of the seats `node-tool-runner` and `mesh-healers` from the seat list when a call is checked, beside `operator`. +- **A-211** (A-204; principles 2 and 7) The assigner's said put waits live in a state of their own, `put-waits` + (history 1, key `.`, value the wait's id and the put), so no form is shared with §706's waits and the + record outlives a supersede. -- 2.54.0 From 69fdbc7cb34771a62527c879c121d3028f9334b5 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:01:48 +0100 Subject: [PATCH 063/116] Answer A-212: kind 2 is a needs reference; kind 5 to a design line Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 6bebed04..ae31fe8e 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -133,3 +133,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-211** (A-204; principles 2 and 7) The assigner's said put waits live in a state of their own, `put-waits` (history 1, key `.`, value the wait's id and the put), so no form is shared with §706's waits and the record outlives a supersede. +- **A-212** (§47, §432, A-208; principle 8) An edge of kind 2 comes from a `needs` reference to another module's + artifact: that is what an artifact "fetches by reference at its start", so the referenced artifact is published + before the referring one delivers. Kind 5 goes to a design line (which acting steps give it, and between what). -- 2.54.0 From 5f761c16cd19bf5ba2f384852e5425f852780446 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:04:05 +0100 Subject: [PATCH 064/116] Answer A-213: the indexer asks the validation run; the rest to design lines Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index ae31fe8e..063f2ebb 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -136,3 +136,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-212** (§47, §432, A-208; principle 8) An edge of kind 2 comes from a `needs` reference to another module's artifact: that is what an artifact "fetches by reference at its start", so the referenced artifact is published before the referring one delivers. Kind 5 goes to a design line (which acting steps give it, and between what). +- **A-213** (corrects A-86; §16, §354, §206) The indexer does ask node-build-go's `run` for its validation of a + revision before its take-in, as §16 says; A-86 holds only for `KeepInput`, which the indexer's `input` verb calls + for a run on request's asker. The run's input and job, what holds the pending revision meanwhile, and how a non-trunk + branch's pending revision and groups are made go to design lines. -- 2.54.0 From fffad9f5782fa55cd26449dbd3416d8b313017fc Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:04:54 +0100 Subject: [PATCH 065/116] Answer A-214 and A-215: fill through state.info; what widens Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 063f2ebb..95464c74 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -140,3 +140,10 @@ the principle that settles it, cited as "design 47 G A-n". revision before its take-in, as §16 says; A-86 holds only for `KeepInput`, which the indexer's `input` verb calls for a run on request's asker. The run's input and job, what holds the pending revision meanwhile, and how a non-trunk branch's pending revision and groups are made go to design lines. +- **A-214** (§366, §623; principle 7) `show` and `kept` read each store's fill through the bundle's state call + `mesh/state.info` (§623), as the forge module's read tool does; the runner's process writes nothing for it. + `pipeline-failed` takes scope `merge`, id the commit. +- **A-215** (§71, §275, §335, A-207; principles 3 and 7) For `widens`, the pipeline's own revision (the candidate) is + compared with the branch's newest revision: an acting rule widens when an entry's `Acts` gains a rule, or a rule's + `on` now names more, or its `bound` is longer; a credential widens when an entry's manifest names an own secret or + provision of a credential it did not name before; permissions come from `grants-for`. -- 2.54.0 From b85f659f1aea4678710613c2fd8c1340e1f7e042 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:05:21 +0100 Subject: [PATCH 066/116] Answer A-216: build.ended keeps its last end per fingerprint with no age bound Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 95464c74..3a3cc29f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -147,3 +147,6 @@ the principle that settles it, cited as "design 47 G A-n". compared with the branch's newest revision: an acting rule widens when an entry's `Acts` gains a rule, or a rule's `on` now names more, or its `bound` is longer; a credential widens when an entry's manifest names an own secret or provision of a credential it did not name before; permissions come from `grants-for`. +- **A-216** (amends A-181; principles 2 and 7) The builder's `build.ended` stream, kept last per subject, has no age + bound, only a cap in bytes: one end per fingerprint is the record of what was built, so a module unchanged for any + time is still known built after a restart. -- 2.54.0 From ba7e8a2dfb77da15336a727c9f3ffa121939f0fb Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:05:44 +0100 Subject: [PATCH 067/116] Answer A-217: what a revert is, and where the running manifest comes from Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 3a3cc29f..37b257eb 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -150,3 +150,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-216** (amends A-181; principles 2 and 7) The builder's `build.ended` stream, kept last per subject, has no age bound, only a cap in bytes: one end per fingerprint is the record of what was built, so a module unchanged for any time is still known built after a restart. +- **A-217** (§298, §300, A-167, A-132; principles 2 and 7) A want reverts when its fingerprint is one the module had + in an earlier assignment graph revision than the one it now runs from, by the revisions' own numbers; the running + manifest is the catalog entry of the fingerprint the node-engine seat's `running` names, read through the catalog + seat's `entry`, and `FormChanges` compares it with the want's entry. -- 2.54.0 From beac2c0170f2e32b27e3d850ca531bc326a5168f Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:06:32 +0100 Subject: [PATCH 068/116] Answer A-218: pipeline-waits clears when the new runner runs healthy Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 37b257eb..a1103d43 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -154,3 +154,5 @@ the principle that settles it, cited as "design 47 G A-n". in an earlier assignment graph revision than the one it now runs from, by the revisions' own numbers; the running manifest is the catalog entry of the fingerprint the node-engine seat's `running` names, read through the catalog seat's `entry`, and `FormChanges` compares it with the want's entry. +- **A-218** (A-206, §696; principle 3) `pipeline-waits` is cleared when the node-engine seat's `running` says the + awaited runner fingerprint healthy; A-206's `runner version` holds over §696's wording. -- 2.54.0 From 1fa531268b219afe1d0f2f32a58004db82429adb Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:07:36 +0100 Subject: [PATCH 069/116] Answer A-219: the gate takes the operator channel as an interface; only Act moves Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index a1103d43..3e1ddf5e 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -156,3 +156,8 @@ the principle that settles it, cited as "design 47 G A-n". seat's `entry`, and `FormChanges` compares it with the want's entry. - **A-218** (A-206, §696; principle 3) `pipeline-waits` is cleared when the node-engine seat's `running` says the awaited runner fingerprint healthy; A-206's `runner version` holds over §696's wording. +- **A-219** (refines A-198; §677; principle 7, one form for each thing) Only `Act` and `ActDigest` move into mesh-sdk's + `go/operatorask`; the ask's types stay the generated seat contract's. The gate in `go/process` takes the operator + channel's calls (ask, read the warrant, record) as an interface its caller passes, which `operatorchannelclient` + implements over the generated types, so no form is copied and no import cycle arises. The seat client's + `wait: held` lives with `process.Conn`'s call, as there is no `go/seats`. -- 2.54.0 From d4a14a7765a6e9541303e9bb48392075d56ce9bf Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:09:27 +0100 Subject: [PATCH 070/116] Answer A-220: the serving parts widens compares Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 3e1ddf5e..3e013d70 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -161,3 +161,6 @@ the principle that settles it, cited as "design 47 G A-n". channel's calls (ask, read the warrant, record) as an interface its caller passes, which `operatorchannelclient` implements over the generated types, so no form is copied and no import cycle arises. The seat client's `wait: held` lives with `process.Conn`'s call, as there is no `go/seats`. +- **A-220** (§71, §441, A-167, A-207, A-215; principle 7) The serving parts `widens` compares are the holders of the + seats `mesh-pipeline-runner` (the runner), `mesh-catalog` (step detection), each step's own seat (the build seats + that run lint and tests) and `node-engine` (the composer, A-167), found by `seatlist.HolderOf`. -- 2.54.0 From ae6407fb71f47f5970a53d15e61b24df4f7cef25 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:09:43 +0100 Subject: [PATCH 071/116] Answer A-221: branch is the watched branch on every forge message Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 3e013d70..b7c682e7 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -164,3 +164,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-220** (§71, §441, A-167, A-207, A-215; principle 7) The serving parts `widens` compares are the holders of the seats `mesh-pipeline-runner` (the runner), `mesh-catalog` (step detection), each step's own seat (the build seats that run lint and tests) and `node-engine` (the composer, A-167), found by `seatlist.HolderOf`. +- **A-221** (§509, A-208; principle 8, one word per thing) On every forge message `branch` names the watched branch + the move changed, on `merged` as on `pushed`; a merged pull request's own branch is kept as `head` (a group is + known by its head branch); `pushed`'s head before is `before`. -- 2.54.0 From 4fff5cdfab8981424a699f19f0642341458b5f5b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:10:19 +0100 Subject: [PATCH 072/116] Answer A-222: a failed adopted event is asked again; runs taken up at start Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index b7c682e7..a0fa67bf 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -167,3 +167,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-221** (§509, A-208; principle 8, one word per thing) On every forge message `branch` names the watched branch the move changed, on `merged` as on `pushed`; a merged pull request's own branch is kept as `head` (a group is known by its head branch); `pushed`'s head before is `before`. +- **A-222** (A-193, A-199, §350, A-77; principles 2 and 3) An adopted event whose handler fails is asked again by + the bus, not acknowledged; at its start the runner reads, for each run pipeline with no steps yet, its candidate's + revision through `revision`, so a placing lost while it was down is taken up. A run's rerun asks with the + candidate's catalog half. An unanswered drop is said `call-unanswered` on a five-minute bound key's expiry. -- 2.54.0 From 3f0f6483c844f31fd9d7c4bc17ca3902fb8efa56 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:10:34 +0100 Subject: [PATCH 073/116] Answer A-223: the pull request's own branch is head-branch Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index a0fa67bf..385335f4 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -171,3 +171,5 @@ the principle that settles it, cited as "design 47 G A-n". the bus, not acknowledged; at its start the runner reads, for each run pipeline with no steps yet, its candidate's revision through `revision`, so a placing lost while it was down is taken up. A run's rerun asks with the candidate's catalog half. An unanswered drop is said `call-unanswered` on a five-minute bound key's expiry. +- **A-223** (corrects A-221; principle 8) A merged pull request's own branch is `head-branch`; `head` stays the head + commit, as everywhere in the forge messages. -- 2.54.0 From 091551e05389733a31aae09db78d1cd5ef608182 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:10:54 +0100 Subject: [PATCH 074/116] Answer A-224: one approval gate in mesh-sdk for both gates Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 385335f4..ab58f8ba 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -173,3 +173,7 @@ the principle that settles it, cited as "design 47 G A-n". candidate's catalog half. An unanswered drop is said `call-unanswered` on a five-minute bound key's expiry. - **A-223** (corrects A-221; principle 8) A merged pull request's own branch is `head-branch`; `head` stays the head commit, as everywhere in the forge messages. +- **A-224** (§677, A-219; principle 7; code shared between modules is in mesh-sdk) The approval gate is one package, + mesh-sdk `go/approval`: the tool runner's gate (node-tools `internal/approval`) moves there and both the tool + runner and `go/process`'s seat server use it, each passing the operator channel as an interface (A-219); no second + gate is written. -- 2.54.0 From 96404d8acfd96cbae1c8e830da48e514203e2a40 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:11:27 +0100 Subject: [PATCH 075/116] Answer A-225 and A-226; code-span a module name in A-224 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- .../01-to-be/47-milestones/G-22-lead-answers-2.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index ab58f8ba..d3a4147c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -174,6 +174,15 @@ the principle that settles it, cited as "design 47 G A-n". - **A-223** (corrects A-221; principle 8) A merged pull request's own branch is `head-branch`; `head` stays the head commit, as everywhere in the forge messages. - **A-224** (§677, A-219; principle 7; code shared between modules is in mesh-sdk) The approval gate is one package, - mesh-sdk `go/approval`: the tool runner's gate (node-tools `internal/approval`) moves there and both the tool + mesh-sdk `go/approval`: the tool runner's gate (`node-tools` `internal/approval`) moves there and both the tool runner and `go/process`'s seat server use it, each passing the operator channel as an interface (A-219); no second gate is written. +- **A-225** (A-173, §532; principles 2 and 7) The view keeps each repository's reach in its own state on the bus, so a + restart does not lose it; its history is the source revisions heard since its start, re-asked through `source` on + each `source-moved`, laid over the reach it kept. +- **A-226** (A-167, §354, §64, §63, A-174; principles 2 and 7) The composition step asks each node's + `compose-candidate` with the key the step's pipeline names: a run's candidate `run-`, or for a branch pipeline + the branch's revision `.`, which the node-engine reads as it reads a candidate. It runs + `mesh-compose` once per node-engine fingerprint among the machines (the change's build where the change alters the + node-engine, §63), the program read from that fingerprint's catalog entry through `entry`, each run's request + joining the inputs of the machines on that fingerprint. -- 2.54.0 From e8a2134d949606ca9843ef4e87e4875527244860 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:12:02 +0100 Subject: [PATCH 076/116] =?UTF-8?q?Answer=20A-227:=20merged=20gains=20base?= =?UTF-8?q?,=20as=20=C2=A7714=20says;=20A-221=20and=20A-223=20withdrawn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index d3a4147c..573627cf 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -186,3 +186,6 @@ the principle that settles it, cited as "design 47 G A-n". `mesh-compose` once per node-engine fingerprint among the machines (the change's build where the change alters the node-engine, §63), the program read from that fingerprint's catalog entry through `entry`, each run's request joining the inputs of the machines on that fingerprint. +- **A-227** (withdraws A-221 and A-223; §714, §715) As design line §714 says, a merged message gains `base`, the + watched branch it landed on; `branch` stays the pull request's branch and `head` its head commit, as today; + `pushed` keeps `branch` for the branch pushed and gains `before`. -- 2.54.0 From 0dbff50da4dea4c5fc0382f20171b15e95194a12 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:13:57 +0100 Subject: [PATCH 077/116] Answer A-228: the gate reads everything through interfaces in its own terms Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 573627cf..55e96b5d 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -189,3 +189,8 @@ the principle that settles it, cited as "design 47 G A-n". - **A-227** (withdraws A-221 and A-223; §714, §715) As design line §714 says, a merged message gains `base`, the watched branch it landed on; `branch` stays the pull request's branch and `head` its head commit, as today; `pushed` keeps `branch` for the branch pushed and gains `before`. +- **A-228** (A-219, A-224; principle 7) Everything the gate reads beyond itself crosses into mesh-sdk `go/approval` as + an interface in the gate's own terms, its caller translating from the generated contracts: the catalog's entries + (module, fingerprint, serves, manifest), a finding writer (raise and clear by kind and id), the seat holders (a + holder function), and the operator channel (ask, record, and claim with the warrant and the act). The gate's own + kept form `Kept` moves into `go/approval`, which `operatorchannelclient` re-exports. -- 2.54.0 From 931c0878c15af55930f988a5534323a186fce5c2 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:14:38 +0100 Subject: [PATCH 078/116] Answer A-229: an entry's requires names the optional ones too Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 55e96b5d..4b8f5694 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -194,3 +194,7 @@ the principle that settles it, cited as "design 47 G A-n". (module, fingerprint, serves, manifest), a finding writer (raise and clear by kind and id), the seat holders (a holder function), and the operator channel (ask, record, and claim with the warrant and the act). The gate's own kept form `Kept` moves into `go/approval`, which `operatorchannelclient` re-exports. +- **A-229** (§708, §709; principle 7) As §709 says, a catalog entry's `requires` names every requirement as + `catalogue.Manifest.Wants` lists them, optional ones included; a reader that means "required, not optionally" (the + module graph's `Requirers`, the assigner's halves) tells the optional ones apart by the entry's manifest + (`IsOptional`). -- 2.54.0 From 24a0fc7272a825ca8286fb2fefc87a8ecd8cc1eb Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:14:52 +0100 Subject: [PATCH 079/116] Answer A-230: a restore point names the bus names it took Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 4b8f5694..027d03e2 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -198,3 +198,6 @@ the principle that settles it, cited as "design 47 G A-n". `catalogue.Manifest.Wants` lists them, optional ones included; a reader that means "required, not optionally" (the module graph's `Requirers`, the assigner's halves) tells the optional ones apart by the entry's manifest (`IsOptional`). +- **A-230** (§554, §565, A-124; principle 7) A restore point's `Point` gains `names`, the bus names it took, one per + bus object as `Aside`'s; the recovery module fills it when it takes a point, and the grants part reads + `points[].names` and `asides[].names` from `kept-points`. -- 2.54.0 From 1c29c4bc5691b403538833f76f0737125f6f4428 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:15:41 +0100 Subject: [PATCH 080/116] Answer A-231: an asker names its queue in invokes Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 027d03e2..65a60099 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -201,3 +201,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-230** (§554, §565, A-124; principle 7) A restore point's `Point` gains `names`, the bus names it took, one per bus object as `Aside`'s; the recovery module fills it when it takes a point, and the grants part reads `points[].names` and `asides[].names` from `kept-points`. +- **A-231** (§544, §601, A-163, A-170; principles 3 and 7) An asker names the queue it asks in its manifest's `invokes` + as `seat:.accept.`, read by one mesh-sdk `catalogue` helper that the validator, the indexer's kind-6 + edge and the grants part share; every asker of a build seat gains that entry in G, so the named workers stand from + G's delivery and the purge finds nothing to remove. -- 2.54.0 From f8986a5541a90582f02a80139d330880e7fe84ac Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:15:59 +0100 Subject: [PATCH 081/116] Answer A-232: the validation run rides the check queue with the usual id Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 65a60099..2be73c6a 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -205,3 +205,7 @@ the principle that settles it, cited as "design 47 G A-n". as `seat:.accept.`, read by one mesh-sdk `catalogue` helper that the validator, the indexer's kind-6 edge and the grants part share; every asker of a build seat gains that entry in G, so the named workers stand from G's delivery and the purge finds nothing to remove. +- **A-232** (§712 with §600, A-163, A-170; principle 7) The validation run rides `accept.check.` with its kind + `run` in the body and the asker the indexer's seat name `mesh-catalog`, as every ask does; its id is the usual + form (`NewID`), and the revision's sequence and try number are kept in the pending value's `validation`. §712's + subject and id are read so. -- 2.54.0 From 777bf7d2813ec17fa5b6c462e0b320e9e754a510 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:16:16 +0100 Subject: [PATCH 082/116] Answer A-233: an age-kept stream is read whole at every start Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 2be73c6a..9668bdbb 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -209,3 +209,6 @@ the principle that settles it, cited as "design 47 G A-n". `run` in the body and the asker the indexer's seat name `mesh-catalog`, as every ask does; its id is the usual form (`NewID`), and the revision's sequence and try number are kept in the pending value's `validation`. §712's subject and id are read so. +- **A-233** (A-181, A-189; principle 7) mesh-sdk's `HearStream` gains a form that reads an age-kept stream whole from + its first message by an ordered consumer at every start, then follows the durable; the grants part grants that + ordered consumer on every heard seat kept stream, as it grants `STREAM.INFO`, with no manifest word. -- 2.54.0 From 653d2a84d98421947aa546a3399be88325b40fbd Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:16:39 +0100 Subject: [PATCH 083/116] Answer A-234: a catalog revision names its definitions Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 9668bdbb..abcf4e8d 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -212,3 +212,6 @@ the principle that settles it, cited as "design 47 G A-n". - **A-233** (A-181, A-189; principle 7) mesh-sdk's `HearStream` gains a form that reads an age-kept stream whole from its first message by an ordered consumer at every start, then follows the durable; the grants part grants that ordered consumer on every heard seat kept stream, as it grants `STREAM.INFO`, with no manifest word. +- **A-234** (§711, ADR 0656 §6; principle 2) The indexer fills each catalog revision's `definitions` (the seat + definitions it was taken in with, by digest) when it keeps the revision, and the `acts` fill reads from them; until + then reading the trunk's from its `seat-definitions` state stands. -- 2.54.0 From b69d5261391e3864616afe9dd580f041bb81194a Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:18:11 +0100 Subject: [PATCH 084/116] Answer A-235: a run's end is said by the runner as a group-ended Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index abcf4e8d..b4110533 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -215,3 +215,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-234** (§711, ADR 0656 §6; principle 2) The indexer fills each catalog revision's `definitions` (the seat definitions it was taken in with, by digest) when it keeps the revision, and the `acts` fill reads from them; until then reading the trunk's from its `seat-definitions` state stands. +- **A-235** (A-201, A-174, §190, RN9; principles 1 and 7) The runner says `group-ended` with group `run-` once every + pipeline it placed for the run has ended, as it says a group's end; the assigner drops its candidate graph on it, and + the indexer drops the run's candidate on it in place of counting members itself. The kept object's key stays the + seat's form `candidate..` with group `run-`. -- 2.54.0 From eba38e5ed9b90d82df62292f5ed87bfb3f27fa54 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:18:29 +0100 Subject: [PATCH 085/116] Answer A-236: pushed's head and before; groups member gains base Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index b4110533..9e1119b6 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -219,3 +219,8 @@ the principle that settles it, cited as "design 47 G A-n". pipeline it placed for the run has ended, as it says a group's end; the assigner drops its candidate graph on it, and the indexer drops the run's candidate on it in place of counting members itself. The kept object's key stays the seat's form `candidate..` with group `run-`. +- **A-236** (§509, §714, §715, §11, A-227; principles 2 and 7) A `pushed` message's new head is `head`; the bridge + keeps each watched branch's last head written in its own state `heads` (key `branch...`), `before` read from it and its start read comparing with it; `pushed` carries the same take-in inputs as + `merged`. For §715 the mesh-delivery seat's `groups` member gains `base` in the contract, which the gate fills and + the bridge reads. -- 2.54.0 From 04955c3112fefb5515ad6df686edfcc74e504312 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:18:57 +0100 Subject: [PATCH 086/116] Answer A-237: a run's input is any size, served in chunks Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 9e1119b6..dafe77d8 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -224,3 +224,7 @@ the principle that settles it, cited as "design 47 G A-n". branch>`), `before` read from it and its start read comparing with it; `pushed` carries the same take-in inputs as `merged`. For §715 the mesh-delivery seat's `groups` member gains `base` in the contract, which the gate fills and the bridge reads. +- **A-237** (§712, §354, ADR 0666 §16, A-139; principle 7) A run's input is any size: the indexer keeps it in its state + `inputs` with the state's `-objects` store holding a large value (mesh-sdk's `stateobjects`), and serves it through + its `input` verb answered in chunks (`buscalls.SeatChunks`, a verb marked `chunks`); `RunInputBound` goes, and the + holder takes the input by that verb. -- 2.54.0 From 88c44c095e8eda0516cce6695ccab716db5039e6 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:21:00 +0100 Subject: [PATCH 087/116] Answer A-238: a run ask may name no head Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index dafe77d8..908c796c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -228,3 +228,6 @@ the principle that settles it, cited as "design 47 G A-n". `inputs` with the state's `-objects` store holding a large value (mesh-sdk's `stateobjects`), and serves it through its `input` verb answered in chunks (`buscalls.SeatChunks`, a verb marked `chunks`); `RunInputBound` goes, and the holder takes the input by that verb. +- **A-238** (§712; principle 7) A run ask may name no head: `RunJob.check` takes an empty `Heads` when the program + is named, and the holder lays an empty `MESH_RUN_HEADS`; the validation's program is built from the indexer's + entry alone. -- 2.54.0 From a50c26ecea6db9ad8da57e0c54027ccf012423c5 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:21:29 +0100 Subject: [PATCH 088/116] Answer A-239: the composition says the withheld subjects Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 908c796c..fe06dde8 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -231,3 +231,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-238** (§712; principle 7) A run ask may name no head: `RunJob.check` takes an empty `Heads` when the program is named, and the holder lays an empty `MESH_RUN_HEADS`; the validation's program is built from the indexer's entry alone. +- **A-239** (design 46 approval mark §6, H-21; principles 3 and 7) The node-engine's `composition` answer gains + `withheld` [{subject, why}] (the module's entry of the grants part's `withheld` for this node) and + `withheld-unknown`, the words "withheld unknown: the grants part does not answer" when the verb fails; its + manifest's `uses` gains `mesh-grants` beside the `invokes` of `seat:mesh-grants.withheld` H-21 added. -- 2.54.0 From 0363e6f5f10e01fac650272cab3dac6f215c8c67 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:21:56 +0100 Subject: [PATCH 089/116] Answer A-240: the assigner hears its run's step-ended Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index fe06dde8..45703dbe 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -235,3 +235,5 @@ the principle that settles it, cited as "design 47 G A-n". `withheld` [{subject, why}] (the module's entry of the grants part's `withheld` for this node) and `withheld-unknown`, the words "withheld unknown: the grants part does not answer" when the verb fails; its manifest's `uses` gains `mesh-grants` beside the `invokes` of `seat:mesh-grants.withheld` H-21 added. +- **A-240** (§354, ADR 0596; principle 1) The assigner waits on its composition run's answer by hearing the build + seat's `step-ended` for that ask, never by reading the seat's step state. -- 2.54.0 From 92358ddfd76b92b902f03f8bdf9eeca9314c83af Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:25:43 +0100 Subject: [PATCH 090/116] Answer A-241: the validation always judges against the whole seat list Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 45703dbe..d21c2fae 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -237,3 +237,6 @@ the principle that settles it, cited as "design 47 G A-n". manifest's `uses` gains `mesh-grants` beside the `invokes` of `seat:mesh-grants.withheld` H-21 added. - **A-240** (§354, ADR 0596; principle 1) The assigner waits on its composition run's answer by hearing the build seat's `step-ended` for that ask, never by reading the seat's step state. +- **A-241** (§712, A-234; principle 3) The validation's `seats` are the branch's revision's seat definitions (A-234) + with the merges' changed definitions laid over them, so a revision that touches no definition is still judged + against the whole seat list. -- 2.54.0 From 534fd88be41cacb0cbccee9db3f0781c619e20b4 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:26:04 +0100 Subject: [PATCH 091/116] Answer A-242: tiers from the assigner's difference; the view keeps waits Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index d21c2fae..ef4cbfa4 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -240,3 +240,8 @@ the principle that settles it, cited as "design 47 G A-n". - **A-241** (§712, A-234; principle 3) The validation's `seats` are the branch's revision's seat definitions (A-234) with the merges' changed definitions laid over them, so a revision that touches no definition is still judged against the whole seat list. +- **A-242** (§512, §186, §376, §378; principles 1, 2 and 7) The assigner's `difference` fills `Tiers` and each + change's `after` (the kind of edge that orders it), computed in its compare; the view orders nothing itself. A + `view_tiers` call for a source revision compares the kept assignment revision whose catalog for that branch is that + source revision with the revision kept before it. The view keeps a state `waits` (key owner, step, node, module) + written by its process from every part's `wait-held` and `wait-ended` it consumes, read by its own read tool. -- 2.54.0 From 3b309fa61eb16afaa495286510eaa6cbdd9a54fe Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 06:27:51 +0100 Subject: [PATCH 092/116] Answer A-243: one composition request per machine; every run input any size Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index ef4cbfa4..e5cf0e1c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -245,3 +245,8 @@ the principle that settles it, cited as "design 47 G A-n". `view_tiers` call for a source revision compares the kept assignment revision whose catalog for that branch is that source revision with the revision kept before it. The view keeps a state `waits` (key owner, step, node, module) written by its process from every part's `wait-held` and `wait-ended` it consumes, read by its own read tool. +- **A-243** (corrects A-226's joining; A-237, A-238; principle 7) The composition step runs one request per machine, + each carrying that machine's input; no inputs are joined. A-237 holds for every run's input (the assigner's and + `mesh-wants`' `input` too): any size, kept with an `-objects` store, answered in chunks. The composition run names + no head (A-238); its program is the node-engine fingerprint's entry (repository, commit, directory) with the + composer's package. -- 2.54.0 From 2904b60c1e5e9c1108a922a9aae810c3b9908bc6 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:15:43 +0100 Subject: [PATCH 093/116] Answer A-244: wait held is a header; the held answer a field of its own Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index e5cf0e1c..f70c1d4b 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -250,3 +250,8 @@ the principle that settles it, cited as "design 47 G A-n". `mesh-wants`' `input` too): any size, kept with an `-objects` store, answered in chunks. The composition run names no head (A-238); its program is the node-engine fingerprint's entry (repository, commit, directory) with the composer's package. +- **A-244** (§677, A-186, A-219; principles 7 and 8) `wait: held` travels as a bus header on the request, never as an + argument, so no verb's input and no act's digest changes; the holder's held answer is a reply field `held` + {asked, call} beside result, error and node. `process.Conn`'s seat call sends the header on every seat call and + waits for `gated-ended` only when the reply says `held`. A process holder applies the seat definition's + `needs-approval` alone (the definition `AnswerSeat` is given); it reads no catalog entry. -- 2.54.0 From 52dc32cb077b3cdea8ff842514ec73fc31571639 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:17:01 +0100 Subject: [PATCH 094/116] Answer A-245: order edges under rule 7; state forms bump the version Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index f70c1d4b..6ef597bb 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -255,3 +255,5 @@ the principle that settles it, cited as "design 47 G A-n". {asked, call} beside result, error and node. `process.Conn`'s seat call sends the header on every seat call and waits for `gated-ended` only when the reply says `held`. A process holder applies the seat definition's `needs-approval` alone (the definition `AnswerSeat` is given); it reads no catalog entry. +- **A-245** (§298, §368; principle 7) §298's order edges are held under the assigner's rule 7, as its acting waits + are; a change of the assigner's state forms bumps its manifest's version once, in the commit that changes them. -- 2.54.0 From c80b5eedd237380764cfcdf4028196b3680c9da9 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:17:33 +0100 Subject: [PATCH 095/116] Answer A-246: delivery waits kept in their own state Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 6ef597bb..a786be9c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -257,3 +257,6 @@ the principle that settles it, cited as "design 47 G A-n". `needs-approval` alone (the definition `AnswerSeat` is given); it reads no catalog entry. - **A-245** (§298, §368; principle 7) §298's order edges are held under the assigner's rule 7, as its acting waits are; a change of the assigner's state forms bumps its manifest's version once, in the commit that changes them. +- **A-246** (§376, §498, A-211; principles 2 and 4) A dependent's delivery wait is kept in a state of its own, + `delivery-waits` (key the module, value the `wait-held` said), read by `assigner_waits` beside the others; + `assigner_release` {module, step: delivery} writes the hand-act log first and ends the wait `released`. -- 2.54.0 From 41b2345ba46c117c6e00cf8ebc0d368639e7027f Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:18:31 +0100 Subject: [PATCH 096/116] Answer A-247: a validation says it was accepted; its answer comes in step-ended Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index a786be9c..6b506019 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -260,3 +260,7 @@ the principle that settles it, cited as "design 47 G A-n". - **A-246** (§376, §498, A-211; principles 2 and 4) A dependent's delivery wait is kept in a state of its own, `delivery-waits` (key the module, value the `wait-held` said), read by `assigner_waits` beside the others; `assigner_release` {module, step: delivery} writes the hand-act log first and ends the wait `released`. +- **A-247** (§713, A-232; principles 1, 2 and 7) The pending value's `validation` gains `accepted` (the seq it was + accepted at), so a revision held for another indexer is never asked again; `validation` sits on the newest pending + value of the revision alone. The answer is read from the `step-ended` event's own output and output object, never + through the build seat's `steps`; the ask is put through the delivery SDK's `buildrun.Asker`. -- 2.54.0 From 20e3e1a3cd05085aaf0e0420309ed3eaf0180dd0 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:19:34 +0100 Subject: [PATCH 097/116] Answer A-248: the run asker names its asker Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 6b506019..aa7b6bc7 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -264,3 +264,5 @@ the principle that settles it, cited as "design 47 G A-n". accepted at), so a revision held for another indexer is never asked again; `validation` sits on the newest pending value of the revision alone. The answer is read from the `step-ended` event's own output and output object, never through the build seat's `steps`; the ask is put through the delivery SDK's `buildrun.Asker`. +- **A-248** (A-163, A-232; principle 8) `buildrun.Asker` gains the asker its subject names (the caller's seat name, + A-163), empty meaning the builder until the asker rename at the join; the ask's own `Asker` field is left as it is. -- 2.54.0 From 7e9bb2dab4b7195eabf8f7b23deb6da5163335fd Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:21:05 +0100 Subject: [PATCH 098/116] Answer A-249: the tool runner takes a chunked answer whole for a bundle Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index aa7b6bc7..680da938 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -266,3 +266,7 @@ the principle that settles it, cited as "design 47 G A-n". through the build seat's `steps`; the ask is put through the delivery SDK's `buildrun.Asker`. - **A-248** (A-163, A-232; principle 8) `buildrun.Asker` gains the asker its subject names (the caller's seat name, A-163), empty meaning the builder until the asker rename at the join; the ask's own `Asker` field is left as it is. +- **A-249** (A-237; principles 7 and 8) A bundle takes a chunked seat answer through its ordinary seat call: the tool + runner receives the chunks with `buscalls.SeatChunks` and hands the bundle the whole answer, so no bundle receives + chunks itself. mesh-build-go's `inputOf` calls the mesh-catalog seat's `input` that way and decodes that verb's + own answer form. -- 2.54.0 From 637df7d374545e716922279bd1312d8d1c88da7a Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:22:06 +0100 Subject: [PATCH 099/116] Answer A-250: delivered-again is an ask the assigner's process judges Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 680da938..52b47964 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -270,3 +270,8 @@ the principle that settles it, cited as "design 47 G A-n". runner receives the chunks with `buscalls.SeatChunks` and hands the bundle the whole answer, so no bundle receives chunks itself. mesh-build-go's `inputOf` calls the mesh-catalog seat's `input` that way and decodes that verb's own answer form. +- **A-250** (§376; principles 1, 2 and 4) `assigner_delivered_again` writes the hand-act log, then an ask in the + assigner's own state `delivered-again` (key the module, value {version, by, why}) and answers "asked". The + assigner's process hears that write on its own state at once, says `version-delivered` again when every present + placing machine runs the version healthy and deletes the ask, else keeps it with its reason, read by + `assigner_waits`. -- 2.54.0 From d40854a07360cbdb21d8396e0909f27b25c6ca74 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:22:28 +0100 Subject: [PATCH 100/116] Answer A-251: the branch-unprotected finding's scope and id Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 52b47964..79eae638 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -275,3 +275,6 @@ the principle that settles it, cited as "design 47 G A-n". assigner's process hears that write on its own state at once, says `version-delivered` again when every present placing machine runs the version healthy and deletes the ask, else keeps it with its reason, read by `assigner_waits`. +- **A-251** (§17, §383, §437; principle 8) The finding `branch-unprotected` has scope `merge`, id the owner, + repository and branch escaped as one key name (`~~`), severity warning, and that scope + and id as its subject. -- 2.54.0 From a7e339d7df312a8fbd69c187179be86ae58dc702 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:23:15 +0100 Subject: [PATCH 101/116] Answer A-252: the composition step's machines, cases and asks Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 79eae638..b5de6b0e 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -278,3 +278,10 @@ the principle that settles it, cited as "design 47 G A-n". - **A-251** (§17, §383, §437; principle 8) The finding `branch-unprotected` has scope `merge`, id the owner, repository and branch escaped as one key name (`~~`), severity warning, and that scope and id as its subject. +- **A-252** (§354, A-167, A-174, A-226, A-243; principles 1, 2 and 7) The composition step's machines are the nodes + whose placement of the module names the step's branch in the seat's assignments (no branch read as the trunk); a + run on request on an unwatched branch takes the nodes placing the module on the trunk. Each request's cases and seats + come from the step's catalog revision through mesh-catalog's `revision` (each entry's manifest digest and verdict, + its `definitions`), depth compose, the one machine, one case `change`. A machine's node-engine build is what the + assigner keeps from the node-engine seat's own events, never read from the node-engine's bucket; where the step's + revision's node-engine entry differs from the trunk's, that build serves every machine. One run ask per machine. -- 2.54.0 From 491e606472209b0b26dc569bec6c5adf7bcd2fb9 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:24:01 +0100 Subject: [PATCH 102/116] Answer A-253: a chunked answer reaches a bundle as file Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index b5de6b0e..4ccce29c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -285,3 +285,5 @@ the principle that settles it, cited as "design 47 G A-n". its `definitions`), depth compose, the one machine, one case `change`. A machine's node-engine build is what the assigner keeps from the node-engine seat's own events, never read from the node-engine's bucket; where the step's revision's node-engine entry differs from the trunk's, that build serves every machine. One run ask per machine. +- **A-253** (A-249; principle 8) The tool runner hands a bundle a chunked answer as the verb's own answer with the + whole file added as the member `file` (base64). -- 2.54.0 From ff669cc720f4abe1aec79a565dd954302ccc7bce Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:29:16 +0100 Subject: [PATCH 103/116] Answer A-254: a run's step-ended carries its answer Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 4ccce29c..f9cc84c2 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -287,3 +287,8 @@ the principle that settles it, cited as "design 47 G A-n". revision's node-engine entry differs from the trunk's, that build serves every machine. One run ask per machine. - **A-253** (A-249; principle 8) The tool runner hands a bundle a chunked answer as the verb's own answer with the whole file added as the member `file` (base64). +- **A-254** (§712, §354, A-240, A-247, ADR 0596; principles 1, 2 and 7) A build seat's `step-ended` of a run carries + the run's answer (its standard output's last line): inline as `output` up to the event bound, else as + `output-object`, the name of an object the build seat keeps, read through the seat's verb `output` answered in + chunks. Every build seat (`node-build-go`, `node-build-image`, `node-build-node`) says it the same way, from the + shared step runner; no asker reads the seat's step state. -- 2.54.0 From 70bfb72c78cc6097e2e9a3da5fa4449837e3ec24 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:31:51 +0100 Subject: [PATCH 104/116] Answer A-255: the process gate's bound key, header and act Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index f9cc84c2..059f0401 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -292,3 +292,6 @@ the principle that settles it, cited as "design 47 G A-n". `output-object`, the name of an object the build seat keeps, read through the seat's verb `output` answered in chunks. Every build seat (`node-build-go`, `node-build-image`, `node-build-node`) says it the same way, from the shared step runner; no asker reads the seat's step state. +- **A-255** (§677, A-77, A-244; principles 1, 7 and 8) The header is `x-wait: held`. A process holder's + `gate-unanswered` is a bound key with its time to live in the `approvals` state, as the tool runner's `bound` is, + never a clock wait. A process holder's act names no node, so two instances of the holder raise one ask. -- 2.54.0 From 57b261840b7949e77f1f1a52c116e4712eda5101 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:33:31 +0100 Subject: [PATCH 105/116] Correct A-251: the finding id is an escaped key name Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 059f0401..7e426343 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -295,3 +295,5 @@ the principle that settles it, cited as "design 47 G A-n". - **A-255** (§677, A-77, A-244; principles 1, 7 and 8) The header is `x-wait: held`. A process holder's `gate-unanswered` is a bound key with its time to live in the `approvals` state, as the tool runner's `bound` is, never a clock wait. A process holder's act names no node, so two instances of the holder raise one ask. +- **A-256** (corrects A-251's separator; principle 8) The finding's id is the owner, repository and branch joined by + `/` and escaped as one key name (`keys.EscapeName`); a key holds no `~`. -- 2.54.0 From 1b37bb8d2902c7522762821f15c88ea0f6dddc13 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:33:45 +0100 Subject: [PATCH 106/116] Answer A-257: the tool runner sends a bundle's chunked answer Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 7e426343..5cfbffa7 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -297,3 +297,6 @@ the principle that settles it, cited as "design 47 G A-n". never a clock wait. A process holder's act names no node, so two instances of the holder raise one ask. - **A-256** (corrects A-251's separator; principle 8) The finding's id is the owner, repository and branch joined by `/` and escaped as one key name (`keys.EscapeName`); a key holds no `~`. +- **A-257** (A-249, A-253, A-254; principles 7 and 8) The tool runner sends a bundle's answer of a verb marked + `chunks` in chunks, from the whole file the bundle answers in its member `file`, the mirror of A-249: no bundle + sends chunks itself. -- 2.54.0 From 1ce07690a46f477d329a2d9fcc5fafc2ac057a41 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:38:52 +0100 Subject: [PATCH 107/116] =?UTF-8?q?Answer=20A-258=20and=20A-259:=20=C2=A72?= =?UTF-8?q?98's=20order=20edges=20name=20seats=20and=20are=20acting=20wait?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 5cfbffa7..90730995 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -300,3 +300,10 @@ the principle that settles it, cited as "design 47 G A-n". - **A-257** (A-249, A-253, A-254; principles 7 and 8) The tool runner sends a bundle's answer of a verb marked `chunks` in chunks, from the whole file the bundle answers in its member `file`, the mirror of A-249: no bundle sends chunks itself. +- **A-258** (§298, A-210; principles 1 and 8) §298's "bus module" is the holder of the seat `mesh-broker`, and its + "`node-backup` holder" the holder of the seat `node-backup`, each read from the seat list as every holder is: the + assigner names no module. +- **A-259** (§298, A-245, §266, §268; principle 7) §298's three order edges are acting waits of the assigner, kept + in its state `waits` under `order...` beside `acting.`, said as `wait-held` when the want is + held and `wait-ended` (ran, released, replaced) when it moves, with the step `placing`; `assigner_waits` reads + them and `assigner_release` releases them as it does the acting waits. No new mechanism. -- 2.54.0 From 5b39ffcfd01b754db8c5370cc10a0bb9325fb508 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:42:07 +0100 Subject: [PATCH 108/116] =?UTF-8?q?Answer=20A-260:=20the=20trunk's=20head?= =?UTF-8?q?=20for=20=C2=A7298's=20third=20edge=20is=20the=20highest=20held?= =?UTF-8?q?=20source=20revision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 90730995..53790b7c 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -307,3 +307,8 @@ the principle that settles it, cited as "design 47 G A-n". in its state `waits` under `order...` beside `acting.`, said as `wait-held` when the want is held and `wait-ended` (ran, released, replaced) when it moves, with the step `placing`; `assigner_waits` reads them and `assigner_release` releases them as it does the acting waits. No new mechanism. +- **A-260** (§298, ADR 0633 §1, A-181; principles 1 and 7) For §298's third edge the trunk's head is the highest + source revision (`Src`) among the trunk branch's module values the assigner holds; the wait ends when a + `take-in.taken` of the trunk branch with `source` at or above it is heard. The assigner consumes + `mesh-delivery-indexer.take-in.taken` (a `consumes` entry), heard as it hears `build.ended`; a wait still held + after a restart is said again as `wait-held` and ends at the next such take-in. -- 2.54.0 From 9de6b0fb15009565fea549ce40d102461f5f0d45 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:44:29 +0100 Subject: [PATCH 109/116] Answer A-261 to A-263: a request's seats by digest, the step's beat, a Go bundle's package Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 53790b7c..208fed4f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -312,3 +312,12 @@ the principle that settles it, cited as "design 47 G A-n". `take-in.taken` of the trunk branch with `source` at or above it is heard. The assigner consumes `mesh-delivery-indexer.take-in.taken` (a `consumes` entry), heard as it hears `build.ended`; a wait still held after a restart is said again as `wait-held` and ends at the next such take-in. +- **A-261** (A-252, A-234; principles 2 and 3) A composition request's `Seats` carry, for each (seat, digest) of the + step's catalog revision, the definition whose digest it is: from the revision's `definitions` once A-234 fills + them, until then from mesh-catalog's `seat-definitions` where the trunk's digest matches; a digest neither holds + ends the step `could not run`, naming the seat and the digest. +- **A-262** (§496; principles 1 and 7) The assigner says a running composition step's progress once a minute with a + ticker inside the running step, stopped at its end, as mesh-delivery-sdk's `steprun` says its own beat (pull.go); + no bound key and no new key form. +- **A-263** (§712, §676; principles 7 and 8) §676 writes `package` (the Go module its `go.mod` names) for every Go + artifact, a `bundle` too, since a bundle is built from that Go module; §712 reads it there. -- 2.54.0 From da260f0835ea19dee555eb97f4a40295883c3076 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:44:44 +0100 Subject: [PATCH 110/116] Answer A-264: a marked verb's additions are made where every definition is resolved Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 208fed4f..02160c59 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -321,3 +321,7 @@ the principle that settles it, cited as "design 47 G A-n". no bound key and no new key form. - **A-263** (§712, §676; principles 7 and 8) §676 writes `package` (the Go module its `go.mod` names) for every Go artifact, a `bundle` too, since a bundle is built from that Go module; §712 reads it there. +- **A-264** (§677, §697, A-186; principle 7) The event `gated-ended`, the verb `approvals` and the by-caller form of + a marked verb are added in mesh-sdk's `seatdef.Resolve`, which the seat generator and every reader of a definition + (the seat list, the grants part, the validator, `AnswerSeat`) go through: one place, one definition for all; the + seat files stay as written. -- 2.54.0 From fa839454f6b8524690367e69fda921a597233889 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:50:04 +0100 Subject: [PATCH 111/116] Answer A-265: the tool runner answers a bundle's marked seat verb as AnswerSeat does Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 02160c59..58d77fb0 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -325,3 +325,7 @@ the principle that settles it, cited as "design 47 G A-n". a marked verb are added in mesh-sdk's `seatdef.Resolve`, which the seat generator and every reader of a definition (the seat list, the grants part, the validator, `AnswerSeat`) go through: one place, one definition for all; the seat files stay as written. +- **A-265** (A-264, design 46 approval mark §20; principles 4 and 7) A-264 holds for every marked definition. Where a + tool bundle holds the seat (the login shell's `execute`), the tool runner, which already holds that bundle's gate, + answers the marked verb by caller and serves `approvals` for the seats its bundles hold, as `AnswerSeat` does for a + process; no holder changes and no mark moves. -- 2.54.0 From 5f6d71da213bf97c734ad3cad4b34527234d0fa3 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:51:28 +0100 Subject: [PATCH 112/116] Answer A-266: no holder names the gate's approvals verb Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 58d77fb0..1e4e84cf 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -329,3 +329,5 @@ the principle that settles it, cited as "design 47 G A-n". tool bundle holds the seat (the login shell's `execute`), the tool runner, which already holds that bundle's gate, answers the marked verb by caller and serves `approvals` for the seats its bundles hold, as `AnswerSeat` does for a process; no holder changes and no mark moves. +- **A-266** (A-264, A-265, ADR 0132; principle 7) `approvals` is the gate's verb, served wherever a marked verb is: + `CanHold` and the validator's same rule ask no holder to name it in its claim's `serves` or its tools. -- 2.54.0 From e58be12323f464be075803047da2896861167a15 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:53:17 +0100 Subject: [PATCH 113/116] Answer A-267: the composition step's progress names the runner as its asker Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 1e4e84cf..2549408f 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -331,3 +331,6 @@ the principle that settles it, cited as "design 47 G A-n". process; no holder changes and no mark moves. - **A-266** (A-264, A-265, ADR 0132; principle 7) `approvals` is the gate's verb, served wherever a marked verb is: `CanHold` and the validator's same rule ask no holder to name it in its claim's `serves` or its tools. +- **A-267** (§496, §481, §22, A-170; principle 7) The composition step's `step-progress` carries `asker` `runner`, the + one asker that sends the accepted kind `step` on `mesh-wants`; the asker rename after join 11 (A-163, A-170) reads + it from the accept subject's asker token instead. -- 2.54.0 From 220d2fbe694e479bbac8568d4f66b05c8e7eaba6 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:55:02 +0100 Subject: [PATCH 114/116] Answer A-268 (corrects A-263) and A-269: the Go module is read where it is built; a push's head is its merge Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 2549408f..c3890583 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -334,3 +334,9 @@ the principle that settles it, cited as "design 47 G A-n". - **A-267** (§496, §481, §22, A-170; principle 7) The composition step's `step-progress` carries `asker` `runner`, the one asker that sends the accepted kind `step` on `mesh-wants`; the asker rename after join 11 (A-163, A-170) reads it from the accept subject's asker token instead. +- **A-268** (corrects A-263; §712, §676, §491; principle 7) §676's `package` stays for package artifacts only, since a + bundle's Go module named as a package collides under §491's package names when two modules share one `go.mod`. + §712's job names the indexer entry's repository, `path` and the revision's head, and the program's directory; + `mesh-build-go` reads the Go module from the `go.mod` it builds there, as it does for every build. +- **A-269** (§509, §714; principles 7 and 8) A `pushed` message's `head` stands where a `merged` message's `merge` + stands: pending refs, the newest load and the revision's head key on it alike. -- 2.54.0 From c8c6f4344d5aec09c2c7adbdf60acbc7ebb97171 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 09:56:12 +0100 Subject: [PATCH 115/116] Answer A-270 to A-272: the approvals state's key lifetime, the runner's approvals answer, the gate channel's path Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index c3890583..8f94ea8e 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -340,3 +340,10 @@ the principle that settles it, cited as "design 47 G A-n". `mesh-build-go` reads the Go module from the `go.mod` it builds there, as it does for every build. - **A-269** (§509, §714; principles 7 and 8) A `pushed` message's `head` stands where a `merged` message's `merge` stands: pending refs, the newest load and the revision's head key on it alike. +- **A-270** (A-255, §677; principles 3 and 7) A holder's approvals state is declared with `key-ttl` beside §677's + 48 hours and 64 MiB, since its bound keys `unanswered.` need it; the validator refuses a holder of a marked + verb whose approvals state lacks it. +- **A-271** (A-265, §677; principle 7) The tool runner's `approvals` answer has the form of `AnswerSeat`'s, read from + the runner's own record of the calls its gate holds; it keeps no `call.` keys of its own for it. +- **A-272** (§677, ADR 0596; principle 1) The `GateChannel` over `process.Conn` asks and reads an ask only through + mesh-sdk's `operatorchannelclient` on the seat `operator-channel`, never through the router's bucket. -- 2.54.0 From 162f0520a3d1c7ef257152ab43fe95adb1d0cdff Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 10:18:46 +0100 Subject: [PATCH 116/116] =?UTF-8?q?Answer=20A-273=20(corrects=20A-272):=20?= =?UTF-8?q?the=20gate=20channel=20reads=20the=20router's=20record=20by=20?= =?UTF-8?q?=C2=A7700's=20one=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md index 8f94ea8e..2853dcf1 100644 --- a/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md +++ b/03-DESIGN/01-to-be/47-milestones/G-22-lead-answers-2.md @@ -347,3 +347,9 @@ the principle that settles it, cited as "design 47 G A-n". the runner's own record of the calls its gate holds; it keeps no `call.` keys of its own for it. - **A-272** (§677, ADR 0596; principle 1) The `GateChannel` over `process.Conn` asks and reads an ask only through mesh-sdk's `operatorchannelclient` on the seat `operator-channel`, never through the router's bucket. +- **A-273** (corrects A-272; §700, A-74, A-89; principles 1 and 7) The `GateChannel` over `process.Conn` is §700's: + `operatorchannelclient.Client` given, as its `Record`, a get of the key under `.` in the seat + `operator-channel`'s state `asks` (the bucket formed from the seat's holder on the seat list and `StateAsks`, A-74) + on the process's own connection; the verb `asks` stays as it answers. The ask is published by a new `go/process` + method that publishes on a seat's accept subject (`mesh.seat..accept..`), on the a3g line, + as `Emit` publishes an event. -- 2.54.0