From 14acd2b59311b2a0d28fa2713dc735c6a67eaa22 Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 13 Nov 2026 17:25:39 +0100 Subject: [PATCH 1/4] Answer A-353 to A-358: G's start breaks the runner's own wait, grants keeps its modules read, the SDK declares the verbs it calls Found after G's merge: a G tool runner waits on itself, grants freezes once G's indexer runs, the watchman does not build, gitea needs G's build runtime, and the graph ordered the tool runner first because the SDK's calls were undeclared. Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- .../47-milestones/G-22-lead-answers-2.md | 21 ++++++++++++++++++- 1 file changed, 20 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 d7dc1185..5f83a2be 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 @@ -3,7 +3,7 @@ layer: to-be status: in-progress design: 47 milestone: G -updated: 2026-11-12 +updated: 2026-11-13 decisions: - "ADR 0667" --- @@ -715,3 +715,22 @@ the principle that settles it, cited as "design 47 G A-n". runs healthy from the holder's have, also while a newer build of the bus module waits for the operator's yes: the running build serves the bus state, so a consumer that needs none of the new build's forms is not held; a consumer whose new form only the new build reads still waits for it by its edge of kind 4 (§50). +- **A-353** (G's start, found 2026-11-13 after its merge; principles 3 and 7) While its catalog half is unread, a tool + runner's approval gate lets through the first-view calls the catalog half is read by (the seat mesh-catalog's + `registrations`, `revision` and `entry`, the seat mesh-delivery's `source`, and their owners' first-view tools) and + holds every other call as today, so the runner that serves the indexer's tools can answer the reads it waits on; the + rule lives once, in mesh-sdk's approval gate. +- **A-354** (G's start; deb88b17 "grants keeps its read of modules until W8"; principles 3 and 7) The indexer keeps + serving the first view `modules` in its current form until grants reads the catalog half, so grants issues new + rights once G's indexer runs; the two move together in the same release as W8. +- **A-355** (G's start; principle 5) Every G part builds from main before any is placed: the watchman's go.mod + requires and replaces the seats it imports (nodebuildimage, nodebuildnode), as every module's go.mod does. +- **A-356** (G's start, the forge; principle 7) G's gitea is built by G's mesh-build-node, which is therefore delivered + before gitea; no lock file is kept for a mesh package that the build runtime exempts. +- **A-357** (§47 kind 6; principles 3 and 7) A package's `calls` names every seat verb its code calls on a module's + behalf, in the `invokes` form (`seat:.`); mesh-sdk's Go package adds `seat:mesh-catalog.registrations`, + `seat:mesh-catalog.revision`, `seat:mesh-catalog.entry` and `seat:mesh-delivery.source`, and the indexer derives an + edge of kind 6 from such a call word against the verb's server exactly as from `invokes`, so every module built + against the SDK is delivered after the running versions that serve its start. +- **A-358** (§47; principle 7) The tool runner keeps `invokes: "*"`, its role of forwarding any call; what its own start + needs comes to it through the SDK's `calls` (A-357), as for every module. From b0d52a11193c66cf83f424b710aa170117b7857a Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 13 Nov 2026 17:27:52 +0100 Subject: [PATCH 2/4] Answer A-359: the gate's start path passes the four seat verbs alone 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 5f83a2be..f863e6fd 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 @@ -734,3 +734,7 @@ the principle that settles it, cited as "design 47 G A-n". against the SDK is delivered after the running versions that serve its start. - **A-358** (§47; principle 7) The tool runner keeps `invokes: "*"`, its role of forwarding any call; what its own start needs comes to it through the SDK's `calls` (A-357), as for every module. +- **A-359** (narrows A-353; principle 7) The catalog half is read by seat verbs alone, so the gate lets through, while + it is unread, exactly the calls whose seat and verb are `mesh-catalog` `registrations`, `revision` and `entry` and + `mesh-delivery` `source`, told from the call's seat and verb as today; no tool is marked as a first-view tool and no + owner is named. From 853130616528c56e9a030f17c6782b771946e353 Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 13 Nov 2026 17:31:03 +0100 Subject: [PATCH 3/4] Answer A-360: the indexer says each change of modules on its views family 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 f863e6fd..772c64bc 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 @@ -738,3 +738,6 @@ the principle that settles it, cited as "design 47 G A-n". it is unread, exactly the calls whose seat and verb are `mesh-catalog` `registrations`, `revision` and `entry` and `mesh-delivery` `source`, told from the call's seat and verb as today; no tool is marked as a first-view tool and no owner is named. +- **A-360** (completes A-354; principles 1 and 3) "Its current form" is the first view and its changes: the indexer + also says each change of `modules` on its views family (`mesh-delivery-indexer.views.modules`, in its `emits`) when a + new trunk revision changes it, so grants hears a newly merged module without asking again. From 4fd3612c56f45882969711dc667bd93f1ecae8ce Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 13 Nov 2026 17:44:13 +0100 Subject: [PATCH 4/4] Answer A-361 and A-362: call words obey the cycle rule; the start seat list holds mesh-delivery 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 772c64bc..584e9b3a 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 @@ -741,3 +741,8 @@ the principle that settles it, cited as "design 47 G A-n". - **A-360** (completes A-354; principles 1 and 3) "Its current form" is the first view and its changes: the indexer also says each change of `modules` on its views family (`mesh-delivery-indexer.views.modules`, in its `emits`) when a new trunk revision changes it, so grants hears a newly merged module without asking again. +- **A-361** (clarifies A-357, ADR 0614 §3; principle 7) "Exactly as from `invokes`" includes the cycle rule: a package's + seat call words count among the invokes of every module built against it when the graph leaves out the edges that lie + on a cycle, so a call word's edge on a cycle is left out like an invoked verb's. +- **A-362** (completes A-353; principles 3 and 7) The seat list a runner starts with (mesh-sdk's bootstrapped list) + holds `mesh-delivery` beside `mesh-catalog`, so `mesh-delivery.source` is admitted before the seat list is read.