L3 final: the node-engine reads core-credentials and tool-runner with no fallback, and states its manifest reads (ADR 0601 §4, ADR 0614 §4, issue 774)
#203
Merged
mesh-toolsmerged 24 commits from feat/l3-final into main2026-11-04 00:23:57 +00:00
One delivery group, branch feat/l3-final in mesh-sdk, mesh-delivery, mesh-catalog, mesh-tools and mesh-host: the final release of design 47's step L3 (issue 774, with 1367 and 1585).
This member:
The reviewed L3 node-engine commits a24a1d7..a0ce37f (the words read with no fallback; a module whose manifest lacks them keeps what runs, ADR 0601 §4).
The node record states manifest-reads from the mesh-sdk built in (ADR 0614 §4). Its own manifest needs nothing beyond the baseline, so the running node-engines are not held from receiving it.
After check 278aa5f0ccbe failed: compose.Input carries the held mark over the bus, and the sandbox names a module the input's engine holds ("its node-engine holds it: ") instead of failing on its stub as "0 bundle(s)".
Pins mesh-sdk 85ba0a9a70d8.
What the operator sees: the node-engine updates itself on all four nodes.
Tests: unit count unchanged; one integration test added (under 50).
Reviewed-by: mesh-code-reviewer@shanks at 30b86ea602
Pushed-by: lead-47@shanks
One delivery group, branch feat/l3-final in mesh-sdk, mesh-delivery, mesh-catalog, mesh-tools and mesh-host: the final release of design 47's step L3 (issue 774, with 1367 and 1585).
This member:
- The reviewed L3 node-engine commits a24a1d7..a0ce37f (the words read with no fallback; a module whose manifest lacks them keeps what runs, ADR 0601 §4).
- The node record states `manifest-reads` from the mesh-sdk built in (ADR 0614 §4). Its own manifest needs nothing beyond the baseline, so the running node-engines are not held from receiving it.
- After check 278aa5f0ccbe failed: compose.Input carries the held mark over the bus, and the sandbox names a module the input's engine holds ("its node-engine holds it: <why>") instead of failing on its stub as "0 bundle(s)".
- Pins mesh-sdk 85ba0a9a70d8.
What the operator sees: the node-engine updates itself on all four nodes.
Tests: unit count unchanged; one integration test added (under 50).
Reviewed-by: mesh-code-reviewer@shanks at 30b86ea602a8f157bcd05aad745c44f32ef7897c
Pushed-by: lead-47@shanks
https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
mesh/check failed (4): unit: modules/mesh-provisioner.gofmt: not as gofmt writes them (run gofmt -w): modul…; and 3 more | a24a1d72ad45 on 798d73eb11e9
mesh/delivery-group group feat/l3b-bus rejected: composed together: the checker's verdict at the members' heads (a1cb9beeb97a): unit: modules/mesh-provisioner.…
mesh/check failed (2): unit: mesh-provisioner-client/cmd/mesh-provisioner-client.TestNatsANodeComingBackFil…; and 1 more | 32a99144f65e on 798d73eb11e9
recordOf writes catalogue.ManifestReads in NodeRecord.ManifestReads, once per build, so the assigner moves a want only
to an engine that reads its manifest. A row holds the engine's own manifest to the baseline's words, so its new build is
never held for a word only it reads.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Deliverynovox/mesh-host@30b86ea602a8 — merged since 2026-11-04T00:24:02Z
Source — source.main moved to novox/mesh-host@83e135f101. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
composed together: pass — the checker's verdict at the members' heads (d6a3e805db4a)
Transitions
2026-11-03 23:56 (new) → proposed (announced): novox/mesh-host#203's head announced
2026-11-03 23:56 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
2026-11-04 00:24 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-host@30b86ea602a8` — **merged** since 2026-11-04T00:24:02Z
**Source** — source.main moved to novox/mesh-host@83e135f10187. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `feat/l3-final`: novox/mesh-catalog@6c09be4a703e, novox/mesh-delivery@70ade15c36eb, novox/mesh-host@30b86ea602a8, novox/mesh-sdk@85ba0a9a70d8, novox/mesh-tools@7fd9d893c0a5
- composed together: pass — the checker's verdict at the members' heads (d6a3e805db4a)
**Transitions**
- 2026-11-03 23:56 (new) → proposed (announced): novox/mesh-host#203's head announced
- 2026-11-03 23:56 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
- 2026-11-04 00:24 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-delivery: not merged. The merge of this pull request into main at 32a99144f6 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
mesh-delivery: **not merged.** The merge of this pull request into main at 32a99144f65e27c13b7db4fdb6d78b4fecd21f50 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
The stub's mark (Manifest.Stubbed) is no field of a manifest's JSON, so an input a node-engine sent the check's
sandbox lost it: node-tools, held by its manifest's verdict, read as a tool runner with no bundle and refused every
module of ace, g14 and shanks for "its build produced 0 bundle(s)". compose.Input now writes its held modules (catalogue
and each node's kept) beside its fields and marks them again on reading; an input from an engine before the mark is
read by its contract, every module Refused names held as its stub. The sandbox composer also says, in the module's
read, why the input's node-engine holds a module the case carries, so the check names the cause, not a rule about the
stub. One subtest round-trips an input holding a refused tool runner, in both shapes; it refused for 0 bundles before.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
One delivery group, branch feat/l3-final in mesh-sdk, mesh-delivery, mesh-catalog, mesh-tools and mesh-host: the final release of design 47's step L3 (issue 774, with 1367 and 1585).
This member:
manifest-readsfrom the mesh-sdk built in (ADR 0614 §4). Its own manifest needs nothing beyond the baseline, so the running node-engines are not held from receiving it.What the operator sees: the node-engine updates itself on all four nodes.
Tests: unit count unchanged; one integration test added (under 50).
Reviewed-by: mesh-code-reviewer@shanks at
30b86ea602Pushed-by: lead-47@shanks
https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Delivery
novox/mesh-host@30b86ea602a8— merged since 2026-11-04T00:24:02ZSource — source.main moved to novox/mesh-host@83e135f101. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
feat/l3-final: novox/mesh-catalog@6c09be4a70, novox/mesh-delivery@70ade15c36, novox/mesh-host@30b86ea602, novox/mesh-sdk@85ba0a9a70, novox/mesh-tools@7fd9d893c0Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.mesh-delivery: not merged. The merge of this pull request into main at
32a99144f6was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.