From edb7030102428b6894d6658bf0989edc8fb7433e Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 22:00:16 +0100 Subject: [PATCH 1/6] Answer A-306: a module G creates is held by the test budget, not by section 626 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 6e543ed9..65a13cef 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 @@ -492,3 +492,6 @@ the principle that settles it, cited as "design 47 G A-n". in the same order as before, whatever order the asks end in. - **A-305** (ADR 0227 rule 8, ADR 0240 rule 2; principle 7) The pipeline runner's process declares the health `unit`, as every other process of mesh-delivery does; `runner_health` stays a tool and judges nothing for the node-engine. +- **A-306** (§626, §419; principle 7) A Go module that G creates has no count at a commit of main, so §626 does not + hold it; the test budget (at most 50 integration and 500 unit tests) does. A test added to a module that exists on + main counts under §626, a contract's generated `TestFixtures` included. From 1b9c63e947a0bb872014f1165d99cc198ca1e1ff Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 22:02:57 +0100 Subject: [PATCH 2/6] Answer A-307 and A-308: the node-engine gains no uses, and its watch of the indexer's modules goes 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 65a13cef..0e128a54 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 @@ -495,3 +495,10 @@ the principle that settles it, cited as "design 47 G A-n". - **A-306** (§626, §419; principle 7) A Go module that G creates has no count at a commit of main, so §626 does not hold it; the test budget (at most 50 integration and 500 unit tests) does. A test added to a module that exists on main counts under §626, a contract's generated `TestFixtures` included. +- **A-307** (corrects A-239; §635; principle 7) The node-engine's manifest gains no `uses`: its `invokes` of + `seat:mesh-grants.withheld` gives the served-verb edge, as §635 says; A-239's last clause (`uses` gains + `mesh-grants`) is withdrawn, and the rest of A-239 holds. +- **A-308** (§628, §421, ADR 0596 §2; principle 1) §628's list of the indexer's states the node-engine still reads is + whole: `candidates`, `manifests` and `verdicts`, for compose-candidate alone. Its watch of the indexer's `modules` + (selfcompose shadow.go) goes; what it took from a module's record it reads from the catalog half's entry the want + names (§421). From 383f21ed4906798818f0cadbc795003e99c2fb92 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 22:03:26 +0100 Subject: [PATCH 3/6] Answer A-309: a build module's outputs objects live as long as their step keys 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 0e128a54..c59be226 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 @@ -502,3 +502,6 @@ the principle that settles it, cited as "design 47 G A-n". whole: `candidates`, `manifests` and `verdicts`, for compose-candidate alone. Its watch of the indexer's `modules` (selfcompose shadow.go) goes; what it took from a module's record it reads from the catalog half's entry the want names (§421). +- **A-309** (A-290, A-254, research 071; principles 7 and 2) A build module's `outputs` objects live as long as the + step key that names them: the store's age is the steps state's time to live (two days), its cap 256 MiB, and the + bus's own age removes an object; nothing else deletes one. The milestone's lifetime list gains this line. From 47bb7409be4666c55ce82f23fa01c704999ae96d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 22:19:36 +0100 Subject: [PATCH 4/6] Answer A-310: a compose request's manifest names its fingerprint beside its digest 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 c59be226..4a25c07c 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 @@ -505,3 +505,9 @@ the principle that settles it, cited as "design 47 G A-n". - **A-309** (A-290, A-254, research 071; principles 7 and 2) A build module's `outputs` objects live as long as the step key that names them: the store's age is the steps state's time to live (two days), its cap 256 MiB, and the bus's own age removes an object; nothing else deletes one. The milestone's lifetime list gains this line. +- **A-310** (§615, §506; principles 7 and 3) A compose request's manifest named by digest also names the fingerprint + whose catalog graph entry holds it: `composer.Manifest` gains `fingerprint` beside `digest`, and the checker, the one + part that sends digests, fills it (a pull's `Fps`, else the trunk revision's entry of that module). The Go build module + reads the entry by `seat:mesh-catalog.entry` with that fingerprint, takes its manifest whole, and refuses the request, + saying which module, when the entry's `manifest-digest` differs or a digest comes without a fingerprint. A manifest + sent whole (`raw`, the assigner and the indexer) is read as today. From 5744cc04725404a84b8cba2b20f01098dbc5a3df Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 22:20:34 +0100 Subject: [PATCH 5/6] Answer A-311 and A-312, and give A-310's shape 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 4a25c07c..33c2f3c3 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 @@ -511,3 +511,12 @@ the principle that settles it, cited as "design 47 G A-n". reads the entry by `seat:mesh-catalog.entry` with that fingerprint, takes its manifest whole, and refuses the request, saying which module, when the entry's `manifest-digest` differs or a digest comes without a fingerprint. A manifest sent whole (`raw`, the assigner and the indexer) is read as today. +- **A-311** (design 34 every-event §19; principle 7) The console wait keeps its floor of one second; its test runs the + independent one-second rows as parallel subtests, and no clock hook is added to `bus.Conn` or the console. +- **A-312** (§421, §628, ADR 0596 §2; principles 1 and 3) For a module an assignment candidate adds to a node that has + no want for it there, the node-engine's shadow asks `seat:mesh-catalog.module` for the trunk's fingerprint when it + composes that candidate, then takes that fingerprint's entry by `seat:mesh-catalog.entry`; a call, no watch, no + picture of the catalog. Its manifest invokes `seat:mesh-catalog.module`; a module the answer gives no fingerprint is + held, the verb's reason named. +- **A-310's shape:** `composer.Manifest` is `{Raw, Digest, Fingerprint}` (wire `fingerprint`), and `composer.Fill`'s + getter takes the `Manifest`. From aad0eafa793ea68ce8d298fcf9875ee7c0d55ef0 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 22:20:55 +0100 Subject: [PATCH 6/6] Use the glossary's words in A-311 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, 2 insertions(+), 2 deletions(-) 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 33c2f3c3..48415742 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 @@ -511,8 +511,8 @@ the principle that settles it, cited as "design 47 G A-n". reads the entry by `seat:mesh-catalog.entry` with that fingerprint, takes its manifest whole, and refuses the request, saying which module, when the entry's `manifest-digest` differs or a digest comes without a fingerprint. A manifest sent whole (`raw`, the assigner and the indexer) is read as today. -- **A-311** (design 34 every-event §19; principle 7) The console wait keeps its floor of one second; its test runs the - independent one-second rows as parallel subtests, and no clock hook is added to `bus.Conn` or the console. +- **A-311** (design 34 every-event §19; principle 7) The tool runner's mesh_wait keeps its floor of one second; its test runs the + independent one-second rows as parallel subtests, and no clock hook is added to `bus.Conn` or the wait. - **A-312** (§421, §628, ADR 0596 §2; principles 1 and 3) For a module an assignment candidate adds to a node that has no want for it there, the node-engine's shadow asks `seat:mesh-catalog.module` for the trunk's fingerprint when it composes that candidate, then takes that fingerprint's entry by `seat:mesh-catalog.entry`; a call, no watch, no