From 69771a4d8efa74d0a92ded18e3f90a5544e18789 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 00:20:20 +0100 Subject: [PATCH 01/30] Answer A-112: a process reads its settings from a declared file 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 2db785ac..90359c59 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 @@ -448,3 +448,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". `ask-again`; `cancel` drops the asks' bounds and leaves what the build seats already took; the hand act's verb is `mesh-pipeline-runner.`; a review ends every running pipeline at that commit and fingerprint waiting on one. A review given after a pipeline ended passed is refused, as built. +- **A-112** (§633, A-71; principle 7, one way per kind of part) A process reads its settings as the builder does + (A-71): a file its manifest declares, its content `${config:}`, read at its start; so the node-engine reads + `recovery-wait-minutes` from such a file, default 90 when it is missing. A bundle keeps `stdio.Config`. -- 2.54.0 From 1ff3066bab610b3d8b64a540eaa746fc5541205f Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 00:21:42 +0100 Subject: [PATCH 02/30] Answer A-113: a failed restore restarts the newer build; no move without its restore point 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 90359c59..f2ffd713 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 @@ -451,3 +451,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-112** (§633, A-71; principle 7, one way per kind of part) A process reads its settings as the builder does (A-71): a file its manifest declares, its content `${config:}`, read at its start; so the node-engine reads `recovery-wait-minutes` from such a file, default 90 when it is missing. A bundle keeps `stdio.Config`. +- **A-113** (§297, §560, §541; principle 3, failure is loud and leaves nothing broken) A revert whose restore fails + after `Env.Stop` starts the newer build again and holds the move, saying why; a module is never left stopped. A form + change whose entries are not yet answered waits for them, never moves without its restore point. The hold says + `wait-held` (§541) as every wait does. -- 2.54.0 From 168e41fd69943313f0c592a06bb3ae82af1d4b3e Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 00:57:42 +0100 Subject: [PATCH 03/30] Answer A-114: wanted keeps each want's last word with no age limit Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 f2ffd713..b88f19f9 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 @@ -455,3 +455,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". after `Env.Stop` starts the newer build again and holds the move, saying why; a module is never left stopped. A form change whose entries are not yet answered waits for them, never moves without its restore point. The hold says `wait-held` (§541) as every wait does. +- **A-114** (§693, A-61; principle 7) The seat `mesh-wants`' `wanted` stream keeps the last message per subject with no + age limit (`max-age-days: 0`): it is each want's last word, read whole at a start. -- 2.54.0 From c4ad7572654ec971aa34d2c5be3c55c3251e104b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:00:35 +0100 Subject: [PATCH 04/30] Answer A-115: serves belongs to the process, tools stay the bundle's 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 b88f19f9..83ea68e6 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 @@ -457,3 +457,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". `wait-held` (§541) as every wait does. - **A-114** (§693, A-61; principle 7) The seat `mesh-wants`' `wanted` stream keeps the last message per subject with no age limit (`max-age-days: 0`): it is each want's last word, read whole at a start. +- **A-115** (A-107, A-109, A-110; principle 7; corrects both) `serves` is a field of a process itself, beside its + `bus`, not inside it: the grants part adds the serve subjects to whichever account that process runs on, the + module's own when it declares no `bus`, so a process keeps hearing what it heard. Only a seat's verbs move to the + process: a module tool such as `builder_build` stays its tools bundle's (A-87). -- 2.54.0 From 363da8fbab1e90f3c8d00ab6b735aa578448a36c Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:03:21 +0100 Subject: [PATCH 05/30] Answer A-116: a read of a seat holder's state names the seat 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 83ea68e6..d3004e49 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 @@ -461,3 +461,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". `bus`, not inside it: the grants part adds the serve subjects to whichever account that process runs on, the module's own when it declares no `bus`, so a process keeps hearing what it heard. Only a seat's verbs move to the process: a module tool such as `builder_build` stays its tools bundle's (A-87). +- **A-116** (§636, §616; principle 7) A read of a seat holder's state names the seat, as §616 does for views: + `reads` takes `seat:.` (route-proxy: `seat:mesh-provisioner.plans`); the grants part resolves it to the + holder on record as it resolves a seat's views, and the module finds the holder through mesh-sdk's seat-list reader + (the holder of the seat), naming no module in code; the tests that held code to a fixed name hold it to the seat form. -- 2.54.0 From 6af2aecb735b3bda5805cd2aee5a7fb140f59a5b Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:04:59 +0100 Subject: [PATCH 06/30] Answer A-117: the node-engine's early pass, its entry-not-found, why on recovery endings Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 6 ++++++ 1 file changed, 6 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 d3004e49..be20ac91 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 @@ -465,3 +465,9 @@ names the principle that settles it, and is cited as "design 47 G A-n". `reads` takes `seat:.` (route-proxy: `seat:mesh-provisioner.plans`); the grants part resolves it to the holder on record as it resolves a seat's views, and the module finds the holder through mesh-sdk's seat-list reader (the holder of the seat), naming no module in code; the tests that held code to a fixed name hold it to the seat form. +- **A-117** (§683, §614, §560, A-95; principle 7) At a start, until its assignments, haves and resolved values are read, + the node-engine's pass composes only the modules whose kept want and kept entry it holds, a kept want standing for + their placement, and leaves every other module as it runs; the full pass follows once the inputs are read. It writes + `entry-not-found` itself through its own writer (kind added, scope `module`, id the fingerprint, escaped). The seat + `mesh-recovery`'s `ended` and `restored` events gain `why` (the hand act's words for a cancel), regenerated, which the + recovery module fills and the node-engine's hold says. -- 2.54.0 From cb0efaf9a6ac8305033b05db89f7d2211f118d1a Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:06:29 +0100 Subject: [PATCH 07/30] Answer A-118: bound keys in the builder, the outgoing checker as it is 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 be20ac91..dce7c049 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 @@ -471,3 +471,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". `entry-not-found` itself through its own writer (kind added, scope `module`, id the fingerprint, escaped). The seat `mesh-recovery`'s `ended` and `restored` events gain `why` (the hand act's words for a cancel), regenerated, which the recovery module fills and the node-engine's hold says. +- **A-118** (A-77, A-101, §167's checker that goes with G; principle 7) The shared `Asker` takes optional bound keys; + the builder arms them in its `bounds` state. The checker, which the runner replaces and which goes after G, keeps its + step bound as today and gains no `bounds` state. -- 2.54.0 From 17c9525ebda1c69bdffdfdb510b07f7f15cfa463 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:08:45 +0100 Subject: [PATCH 08/30] Answer A-119: the builder's floor from the catalog half, the assignments view in seat form 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 dce7c049..4a7c73b4 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 @@ -474,3 +474,8 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-118** (A-77, A-101, §167's checker that goes with G; principle 7) The shared `Asker` takes optional bound keys; the builder arms them in its `bounds` state. The checker, which the runner replaces and which goes after G, keeps its step bound as today and gains no `bounds` state. +- **A-119** (§7, §616, A-82, A-116; principles 1 and 7) The builder's floor takes its requirements from the catalog + half it already follows (each entry's dependencies), so `indexer_requirements` goes; it is woken by the catalog + revisions it already hears, so the forge stream's consume goes; the assignments view is named in the seat form of + §616 (`consumes` `seat:mesh-module-assigner.views.assignments`, `reads` `seat:mesh-module-assigner.assignments`, A-116), + its first view through the seat's verb `assignments`. No module is named. -- 2.54.0 From fe138a638c99c12bb457d3b9e8694c317735fc21 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:10:13 +0100 Subject: [PATCH 09/30] Answer A-120: the early pass takes the node's record from the engine's own statement 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 4a7c73b4..7a433095 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 @@ -479,3 +479,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". revisions it already hears, so the forge stream's consume goes; the assignments view is named in the seat form of §616 (`consumes` `seat:mesh-module-assigner.views.assignments`, `reads` `seat:mesh-module-assigner.assignments`, A-116), its first view through the seat's verb `assignments`. No module is named. +- **A-120** (A-117, A-95; principles 2 and 7) The early pass takes the node's own record from the statement the + node-engine makes of itself (its tunnel key, sealing key and capabilities), held in memory and built before the + composer's watch starts, without the bus; no copy of the record is kept in the composition state. -- 2.54.0 From b42864542afc7ba33bbe1fe8965ac637d79e268c Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:11:15 +0100 Subject: [PATCH 10/30] Answer A-121: an old section's bus names are the bus composer's 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 7a433095..70a9820b 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 @@ -482,3 +482,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-120** (A-117, A-95; principles 2 and 7) The early pass takes the node's own record from the statement the node-engine makes of itself (its tunnel key, sealing key and capabilities), held in memory and built before the composer's watch starts, without the bus; no copy of the record is kept in the composition state. +- **A-121** (§554; principles 7 and 8) An old section's kept data is named as the bus composer of mesh-sdk names it + when it makes it: a state `KV_` and its bucket name (module and name joined by `_`), a log its log stream name + (`LOG_`, module, `_`, name), a stream its declared name as is, an objects section `OBJ_` and module and name joined + by `_`. The recovery module calls those mesh-sdk names; it writes no name of its own. -- 2.54.0 From aef9bf8453a600ca3dc7d70d64cc8c744a674fe1 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:14:25 +0100 Subject: [PATCH 11/30] Answer A-122: the image build act's bound is the other build seats' Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 70a9820b..baba7c7e 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 @@ -486,3 +486,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". when it makes it: a state `KV_` and its bucket name (module and name joined by `_`), a log its log stream name (`LOG_`, module, `_`, name), a stream its declared name as is, an objects section `OBJ_` and module and name joined by `_`. The recovery module calls those mesh-sdk names; it writes no name of its own. +- **A-122** (A-116, §324; principle 7) The node-build-image seat's `build` act takes the bound the other build seats + take, `60m`. -- 2.54.0 From a1faef315facc02919c91217157aa3dc38447e4d Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:14:43 +0100 Subject: [PATCH 12/30] Answer A-123 to A-125: aside's names, a list, the restore in mesh-sdk Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 6 ++++++ 1 file changed, 6 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 baba7c7e..5ca21ec5 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 @@ -488,3 +488,9 @@ names the principle that settles it, and is cited as "design 47 G A-n". by `_`. The recovery module calls those mesh-sdk names; it writes no name of its own. - **A-122** (A-116, §324; principle 7) The node-build-image seat's `build` act takes the bound the other build seats take, `60m`. +- **A-123** (§682, §554; principle 2) `aside` takes its bus names from the catalog entry of the fingerprint the + node-engine's placement runs for the module: what is set aside is the data that runs. +- **A-124** (§682; principle 7) The seat's aside names every bus object of the kept data: `Aside.name` becomes the list + `names` in the mesh-recovery contract, regenerated; no names joined into one string. +- **A-125** (§655) The restore of one stream moves into mesh-sdk's bussnap beside its snapshot, and the bus module + imports it from there; the recovery module's builder moves it, in the same work. -- 2.54.0 From 401f5dcb8b66db3688204601a3bbe91b2ab2eebe Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:16:11 +0100 Subject: [PATCH 13/30] Answer A-126 and A-127: one seat-holder helper; serves beside the bus only 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 5ca21ec5..967135ec 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 @@ -494,3 +494,8 @@ names the principle that settles it, and is cited as "design 47 G A-n". `names` in the mesh-recovery contract, regenerated; no names joined into one string. - **A-125** (§655) The restore of one stream moves into mesh-sdk's bussnap beside its snapshot, and the bus module imports it from there; the recovery module's builder moves it, in the same work. +- **A-126** (A-82, A-101; principle 7) Who holds a seat now is read by one mesh-sdk helper beside the seat list + (`seatlist`), through the assigner's `assignments` verb; operatorask and the view call it, and no part keeps its own + copy. The builder's holder at a catalog revision (`versions.HolderOf`) answers another question and stays. +- **A-127** (A-115 over A-109, A-110) `serves` is read only beside a process's `bus`: mesh-sdk's process parse, the + grants part's process-serve composition and the indexer's manifest check test follow A-115; a `serves` inside `bus` is refused. -- 2.54.0 From 29692693fa89f75f0104934ee1b4ba360c3b3c18 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:16:45 +0100 Subject: [PATCH 14/30] Answer A-128: a read in seat form is its own kind in mesh-sdk; reword to the validator Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 967135ec..fc93287b 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 @@ -498,4 +498,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". (`seatlist`), through the assigner's `assignments` verb; operatorask and the view call it, and no part keeps its own copy. The builder's holder at a catalog revision (`versions.HolderOf`) answers another question and stays. - **A-127** (A-115 over A-109, A-110) `serves` is read only beside a process's `bus`: mesh-sdk's process parse, the - grants part's process-serve composition and the indexer's manifest check test follow A-115; a `serves` inside `bus` is refused. + grants part's process-serve composition and the validator's test follow A-115; a `serves` inside `bus` is refused. +- **A-128** (A-116; principle 7) A `reads` in seat form `seat:.` is parsed by mesh-sdk's state reader as + its own kind, kept apart from a module's read; the validator checks the seat declares the state, and the holder is + resolved where it is read, by A-126's helper. -- 2.54.0 From 53f119fb48c71d9da83bf368be3e52584dddb372 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:20:17 +0100 Subject: [PATCH 15/30] Answer A-129 and A-130: kept-points says the unrestored asides; the recovery settings' names 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 fc93287b..b908a0bd 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 @@ -502,3 +502,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-128** (A-116; principle 7) A `reads` in seat form `seat:.` is parsed by mesh-sdk's state reader as its own kind, kept apart from a module's read; the validator checks the seat declares the state, and the holder is resolved where it is read, by A-126's helper. +- **A-129** (§657; principle 4) The seat's `kept-points` answer gains `unrestored`, the asides whose record ended at + `removed`, read from the engine; the tool `recovery_kept_points` shows it, and the health check reads the same. +- **A-130** (A-124, §557; principle 7) The events `set-aside` and `aside-discarded` carry `names` as `Aside` does; the + recovery module's two bounds are the settings `dump-wait-minutes` (default 60) and `point-keep-days`. -- 2.54.0 From c764f46577632b5ab89a6862873c6f8b7a0f5a3a Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:25:50 +0100 Subject: [PATCH 16/30] Answer A-131: the first view of a seat's view is the holder's first-view tool 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 b908a0bd..63f0649c 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 @@ -506,3 +506,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". `removed`, read from the engine; the tool `recovery_kept_points` shows it, and the health check reads the same. - **A-130** (A-124, §557; principle 7) The events `set-aside` and `aside-discarded` carry `names` as `Aside` does; the recovery module's two bounds are the settings `dump-wait-minutes` (default 60) and `point-keep-days`. +- **A-131** (corrects A-119's first view; §616; principle 7) The builder's first view of the assignments is asked of + the view's own first-view tool on its holder (`.assignments`), the holder found at runtime by A-126's helper + and the builder among the view's callers; the seat-form `consumes` of the view covers it, and the seat verb + `assignments` keeps its own answer. -- 2.54.0 From 8d5fcb823633efe7e2ac01a1bd29452a82794d54 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:32:15 +0100 Subject: [PATCH 17/30] Answer A-132: the running fingerprint from the node-engine's running event Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 63f0649c..bf1cf8d3 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 @@ -510,3 +510,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". the view's own first-view tool on its holder (`.assignments`), the holder found at runtime by A-126's helper and the builder among the view's callers; the seat-form `consumes` of the view covers it, and the seat verb `assignments` keeps its own answer. +- **A-132** (A-123, §556; principle 1) The recovery module learns the fingerprint a node runs for a module from the + node-engine seat's `running` event, kept last per subject and read as §556 (a `consumes` of its manifest); no call. -- 2.54.0 From 5b1d068de39d3bb16220692362a4c5e880fa94ba Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:46:39 +0100 Subject: [PATCH 18/30] Answer A-133: the recovery module's manifest follows the validator 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 bf1cf8d3..f5b6fc8e 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 @@ -512,3 +512,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". `assignments` keeps its own answer. - **A-132** (A-123, §556; principle 1) The recovery module learns the fingerprint a node runs for a module from the node-engine seat's `running` event, kept last per subject and read as §556 (a `consumes` of its manifest); no call. +- **A-133** (§657, §567, §554; principles 3 and 7) The recovery module's manifest follows the validator: (a) its health + check is its tool beside the process check the other modules declare; (b) the `digests` state's cap is given in the + template's own form at 4 MiB, never as a second option beside it; (c) the template states `digests` and `findings` + are the module's own by its `requires` and are not listed again in the process's `bus`, which keeps its own account. -- 2.54.0 From 1869e6b0a2fb220d8c4b87e7c3af66a3bbc96427 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:49:09 +0100 Subject: [PATCH 19/30] Answer A-134: binding.changed carries its consumer; the vault adopts it 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 f5b6fc8e..867b881d 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 @@ -516,3 +516,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". check is its tool beside the process check the other modules declare; (b) the `digests` state's cap is given in the template's own form at 4 MiB, never as a second option beside it; (c) the template states `digests` and `findings` are the module's own by its `requires` and are not listed again in the process's `bus`, which keeps its own account. +- **A-134** (A-16, A-26, A-28; principles 7 and 8) The licence manager's `binding.changed` carries the consumer as its + further part (`binding.changed.`), the one form of G's seat events; mesh-vault and claude-code adopt it + through their views reader, and mesh-vault's two followers share its one writer. -- 2.54.0 From 7b03a6831be43a70ffbc18763e148bcd741c2885 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:51:23 +0100 Subject: [PATCH 20/30] Answer A-135: the digests state takes the template's fixed cap Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 867b881d..6661a058 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 @@ -519,3 +519,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-134** (A-16, A-26, A-28; principles 7 and 8) The licence manager's `binding.changed` carries the consumer as its further part (`binding.changed.`), the one form of G's seat events; mesh-vault and claude-code adopt it through their views reader, and mesh-vault's two followers share its one writer. +- **A-135** (corrects A-133(b); ADR 0595 §3; principle 7) The state template takes no cap: `digests` declares none and + the template's fixed cap stands; §567's 4 MiB is the size expected, not a setting. -- 2.54.0 From 8392ec5c2d75c4ec8d5cd65b5c43edb8d427f927 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 01:55:02 +0100 Subject: [PATCH 21/30] =?UTF-8?q?Answer=20A-136:=20the=20watchman's=20step?= =?UTF-8?q?s=20read=20goes=20by=20=C2=A7483?= 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-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 6661a058..1b959339 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 @@ -521,3 +521,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". through their views reader, and mesh-vault's two followers share its one writer. - **A-135** (corrects A-133(b); ADR 0595 §3; principle 7) The state template takes no cap: `digests` declares none and the template's fixed cap stands; §567's 4 MiB is the size expected, not a setting. +- **A-136** (§483, §496; principle 1) The watchman's read of the build seats' steps goes, as §483 says: it times a + running ask from the build seat's step-progress event; its `reads seat:node-build-*.steps` and the holder lookup + for it go with it, and no holder event is needed. -- 2.54.0 From 4e121e37cdf3e1abc4a49f826e6e70ca9c116316 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 02:04:01 +0100 Subject: [PATCH 22/30] Answer A-137 to A-139: what a keeper's restore sets aside, the recovery bounds, chunks from mesh-sdk 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 1b959339..20fcab27 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 @@ -524,3 +524,12 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-136** (§483, §496; principle 1) The watchman's read of the build seats' steps goes, as §483 says: it times a running ask from the build seat's step-progress event; its `reads seat:node-build-*.steps` and the holder lookup for it go with it, and no holder event is needed. +- **A-137** (§681, A-123; principle 2) Before a keeper's snapshot is restored, the recovery module sets aside the bus + names of the restore's module and kept data from the catalog entry of the fingerprint the node is running; for an + unprotected snapshot, the `stream` snapshot-get answers. +- **A-138** (§557, §551, A-77, A-130; principles 1 and 7) The wait on snapshot-restored and the expiry are bounds as + well: settings `snapshot-restore-wait-minutes` (default 90) and `expire-every-hours` (default 24); every bound of + the module may be a fraction, so a whole test sets seconds; the expiry runs on a bound key's expiry, not a timer. +- **A-139** (§681; principle 7; code shared between modules is in mesh-sdk) The chunks of a seat verb's answer are + received with mesh-sdk's own form (`buscalls`), the one the bus module sends with; where mesh-sdk has no receive, + it is added there, never built in the recovery module. -- 2.54.0 From 54f6d4bb5d7eefbdf31fa5209c56bb1ff2aea9c8 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 02:04:35 +0100 Subject: [PATCH 23/30] Answer A-140: the wait after a restore's cancel, a busy keeper 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 20fcab27..1a0f312a 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 @@ -533,3 +533,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-139** (§681; principle 7; code shared between modules is in mesh-sdk) The chunks of a seat verb's answer are received with mesh-sdk's own form (`buscalls`), the one the bus module sends with; where mesh-sdk has no receive, it is added there, never built in the recovery module. +- **A-140** (§681; principles 3 and 7) After its cancel is asked at the bound, the recovery module waits one more bound + of `snapshot-restore-wait-minutes` for that act's snapshot-restored; none heard is "answers neither". A keeper that + answers `busy` ends the act failed before any aside, naming the keeper's running act. -- 2.54.0 From 61b2a273f2bc5b60bf7b483205b7cfcc1d23ba90 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 02:13:05 +0100 Subject: [PATCH 24/30] Answer A-141: the recovery module acts on its own stop 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 1a0f312a..d444cc21 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 @@ -536,3 +536,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-140** (§681; principles 3 and 7) After its cancel is asked at the bound, the recovery module waits one more bound of `snapshot-restore-wait-minutes` for that act's snapshot-restored; none heard is "answers neither". A keeper that answers `busy` ends the act failed before any aside, naming the keeper's running act. +- **A-141** (§562; principles 1 and 7) The recovery module learns of a move from its own stop: from the stop signal + on it answers every new call with an error naming the stop, cancels the running act so its own failure path runs, + and ends every accepted act not ended `stopped` with its ending event; a restart is the same. -- 2.54.0 From f9bb4a6d7815efce2c2af69208ee625af1f403fb Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 02:19:12 +0100 Subject: [PATCH 25/30] Answer A-142: a missed step-ended reaches the watchman by its durable consumer 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 d444cc21..a1550953 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 @@ -539,3 +539,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-141** (§562; principles 1 and 7) The recovery module learns of a move from its own stop: from the stop signal on it answers every new call with an error naming the stop, cancels the running act so its own failure path runs, and ends every accepted act not ended `stopped` with its ending event; a restart is the same. +- **A-142** (§496, §602; principles 1 and 7) A `step-ended` said while the watchman was down reaches it on its + start through its durable consumer of EVENTS, and ends the stuck ask then; nothing re-reads the steps and no + expiry is added. -- 2.54.0 From 47583173db60b4edcd4ccd9598b9d90c331cb2c1 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 02:19:43 +0100 Subject: [PATCH 26/30] Answer A-143: the recovery module's waits are bound keys Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 a1550953..7189d5f8 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 @@ -542,3 +542,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-142** (§496, §602; principles 1 and 7) A `step-ended` said while the watchman was down reaches it on its start through its durable consumer of EVENTS, and ends the stuck ask then; nothing re-reads the steps and no expiry is added. +- **A-143** (A-77, A-138; principle 1) The recovery module's dump wait and snapshot-restored wait are bound keys in + its state `bounds` as well, their expiry heard on its watch; no timer stays in the process. -- 2.54.0 From be5ab83015835e09a580b699418d7548859e4f9a Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 02:22:15 +0100 Subject: [PATCH 27/30] Answer A-144: a client imports its own seat only; the key codec and source follower move to the domain SDK 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 7189d5f8..a0a3a591 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 @@ -544,3 +544,7 @@ names the principle that settles it, and is cited as "design 47 G A-n". expiry is added. - **A-143** (A-77, A-138; principle 1) The recovery module's dump wait and snapshot-restored wait are bound keys in its state `bounds` as well, their expiry heard on its watch; no timer stays in the process. +- **A-144** (ADR 0625 §4 over §614 and §670's placing; principle 7) A client imports only its own seat's contract, + mesh-sdk and its domain SDK: the key codec `meshcatalogkey` moves into mesh-delivery's domain SDK, imported there + by the builder and the catalog client, and the source-branches follower's use of the `mesh-delivery` seat's types + moves into the domain SDK too; the catalog client keeps the mesh-catalog contract and the domain SDK only. -- 2.54.0 From 294df2d72e736d9c8e94257c9796b8cd0015abe3 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 03:02:04 +0100 Subject: [PATCH 28/30] =?UTF-8?q?Answer=20A-145:=20the=20second=20reader?= =?UTF-8?q?=20release=20carries=20only=20=C2=A7621's=20words?= 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-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 a0a3a591..080b34b4 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 @@ -548,3 +548,6 @@ names the principle that settles it, and is cited as "design 47 G A-n". mesh-sdk and its domain SDK: the key codec `meshcatalogkey` moves into mesh-delivery's domain SDK, imported there by the builder and the catalog client, and the source-branches follower's use of the `mesh-delivery` seat's types moves into the domain SDK too; the catalog client keeps the mesh-catalog contract and the domain SDK only. +- **A-145** (§621, §494, §697, ADR 0633 §6; principle 7) The second reader release carries only §621's words and what + the trunk validator needs to judge the new indexer's manifest and the `by-caller` definitions; §529's finding-stream + rules and A-116/A-128's seat reads are G's own validator rules, judged by the change's validator, and stay in G. -- 2.54.0 From 0d19a01ea71df8d3929fe7a2f39011870f869b94 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 03:06:30 +0100 Subject: [PATCH 29/30] Answer A-146: the reader release carries the foundation part's exception Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 080b34b4..fdb9204a 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 @@ -551,3 +551,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". - **A-145** (§621, §494, §697, ADR 0633 §6; principle 7) The second reader release carries only §621's words and what the trunk validator needs to judge the new indexer's manifest and the `by-caller` definitions; §529's finding-stream rules and A-116/A-128's seat reads are G's own validator rules, judged by the change's validator, and stay in G. +- **A-146** (A-145, §529, A-30; principle 5) The second reader release also carries §529/A-30's exception for a + foundation part's kept old sections, and only that, since the trunk validator must accept the new indexer manifest. -- 2.54.0 From d16d23e2a27afd27e4c22a52ed27955529260f12 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 12 Nov 2026 03:08:06 +0100 Subject: [PATCH 30/30] Answer A-147: a recovery act during a move is refused, naming both fingerprints Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h --- 03-DESIGN/01-to-be/47-milestones/G-20-lead-answers.md | 2 ++ 1 file changed, 2 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 fdb9204a..f3ebac4a 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 @@ -553,3 +553,5 @@ names the principle that settles it, and is cited as "design 47 G A-n". rules and A-116/A-128's seat reads are G's own validator rules, judged by the change's validator, and stay in G. - **A-146** (A-145, §529, A-30; principle 5) The second reader release also carries §529/A-30's exception for a 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. -- 2.54.0