The node composes its own modules once the catalogue places it, and writes its record (issue 1126) #149

Merged
mesh-tools merged 17 commits from feat/1126-nodes-compose into main 2026-10-26 21:11:37 +00:00
Member

Milestone L2 "nodes compose" (issue 1126; ADR 0547 §2, §3; ADR 0550 §5; ADR 0555 §3). Member of the delivery group feat/1126-nodes-compose, which the milestone's one review approved; pins mesh-sdk 979644420117 (mesh-sdk #98's head) exactly.

  • The node record: the node's own have key <node>.node carries the public halves of its tunnel, sealing and serving keys, the certificate for its internal name, the mesh's authority, its present capabilities, networks, outward links and its node-engine's contract, written only when it differs.
  • The node composes its own (internal/selfcompose) once placement.<node> exists: from placement, the node records, the indexer's modules and manifests, its own slice of mesh-config's values, and the vault's own (its modules' secrets and pair credentials sealed to its key, asked only when a placed module declares one). It composes again on each input's event and on the vault's secret-changed, never on a timer. A node not yet placed follows its key and begins composing its own when it appears, with no restart.
  • The judgement of a move (ADR 0547 §3): a record-policy module's move waits for a yes (have phase waiting-yes, with the judgement and the digest that waits).
  • A refusal is loud: when the node cannot compose (a stand-in refused, an input unread), each wanted module's have says it, failed, naming why, while it keeps running what it ran; composed again, the haves are what runs.
  • Stable sealed values: the composer keeps the box the node already runs when it opens, with the node's own key, to the same value as the vault's box, so a composition stays unmoved at the switch and across restarts; the vault still seals anew at each ask.
  • Tests: unit (selfcompose, agent, link, authority), with no count risen; integration H8 TestNatsANodeThePlacementNamesComposesAndAppliesItsOwn.
  • Bent: H8 and the assigner's two integration tests were run once locally (embedded bus, a few seconds) to find H8's failure; the group's one check runs them as the check of record.

Reviewed-by: review-1126@shanks at 1d44288514

Milestone L2 "nodes compose" (issue 1126; ADR 0547 §2, §3; ADR 0550 §5; ADR 0555 §3). Member of the delivery group feat/1126-nodes-compose, which the milestone's one review approved; pins mesh-sdk 979644420117 (mesh-sdk #98's head) exactly. - **The node record**: the node's own have key `<node>.node` carries the public halves of its tunnel, sealing and serving keys, the certificate for its internal name, the mesh's authority, its present capabilities, networks, outward links and its node-engine's contract, written only when it differs. - **The node composes its own** (internal/selfcompose) once `placement.<node>` exists: from placement, the node records, the indexer's modules and manifests, its own slice of mesh-config's values, and the vault's `own` (its modules' secrets and pair credentials sealed to its key, asked only when a placed module declares one). It composes again on each input's event and on the vault's `secret-changed`, never on a timer. A node not yet placed follows its key and begins composing its own when it appears, with no restart. - **The judgement of a move** (ADR 0547 §3): a record-policy module's move waits for a yes (have phase waiting-yes, with the judgement and the digest that waits). - **A refusal is loud**: when the node cannot compose (a stand-in refused, an input unread), each wanted module's have says it, failed, naming why, while it keeps running what it ran; composed again, the haves are what runs. - **Stable sealed values**: the composer keeps the box the node already runs when it opens, with the node's own key, to the same value as the vault's box, so a composition stays unmoved at the switch and across restarts; the vault still seals anew at each ask. - Tests: unit (selfcompose, agent, link, authority), with no count risen; integration H8 `TestNatsANodeThePlacementNamesComposesAndAppliesItsOwn`. - Bent: H8 and the assigner's two integration tests were run once locally (embedded bus, a few seconds) to find H8's failure; the group's one check runs them as the check of record. Reviewed-by: review-1126@shanks at 1d442885148af6bf101c0404782a7b0658249c32
mesh-tools added 2 commits 2026-10-26 17:35:09 +00:00
Pin mesh-sdk feat/1126-nodes-compose 9789c83 (issue 1126)
mesh/delivery closed: a newer head of the same pull request
mesh/check checking 7fc0ea5478a3 on ff9386dcccc2 | novox/mesh-host#149 in group feat/1126-nodes-compose
7fc0ea5478
Author
Member

Delivery novox/mesh-host@1d442885148a — merged since 2026-10-26T21:11:39Z

Source — source.main moved to novox/mesh-host@be94d2689e. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group feat/1126-nodes-compose: novox/hq@28d84f31bf, novox/mesh-catalog@c085975146, novox/mesh-controller@df8ebf6a77, novox/mesh-delivery@297992a4ae, novox/mesh-host@1d44288514, novox/mesh-sdk@9796444201

Transitions

  • 2026-10-26 21:09 (new) → proposed (announced): novox/mesh-host#149's head announced
  • 2026-10-26 21:10 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-10-26 21:11 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@1d442885148a` — **merged** since 2026-10-26T21:11:39Z **Source** — source.main moved to novox/mesh-host@be94d2689e2f. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `feat/1126-nodes-compose`: novox/hq@28d84f31bfcb, novox/mesh-catalog@c0859751461a, novox/mesh-controller@df8ebf6a77c1, novox/mesh-delivery@297992a4ae55, novox/mesh-host@1d442885148a, novox/mesh-sdk@979644420117 **Transitions** - 2026-10-26 21:09 (new) → proposed (announced): novox/mesh-host#149's head announced - 2026-10-26 21:10 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-10-26 21:11 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`.
jschoubben added 1 commit 2026-10-26 17:45:25 +00:00
jschoubben added 1 commit 2026-10-26 17:51:37 +00:00
Integration: a node the placement names composes and applies its own module with no controller composition, and again on a changed config value (issue 1126, ADR 0547 §2)
mesh/delivery-group group feat/1126-nodes-compose checking: 4 of 5 member(s) ready
mesh/delivery closed: a newer head of the same pull request
mesh/check checking e4dbb49d2fa5 on ff9386dcccc2 | novox/mesh-host#149 in group feat/1126-nodes-compose
e4dbb49d2f
jschoubben added 1 commit 2026-10-26 18:05:15 +00:00
The node's composer asks the vault's own for its modules' secrets sealed to its key, and keeps a value first had while its generation stands; two agent tests folded to hold the count (issue 1126, ADR 0550 §5)
mesh/delivery closed: a newer head of the same pull request
mesh/check checking 2dc384d641a2 on ff9386dcccc2 | novox/mesh-host#149 in group feat/1126-nodes-compose
2dc384d641
jschoubben added 1 commit 2026-10-26 18:16:35 +00:00
Pin mesh-sdk 4d5f430: the node's wants say it composes them (Self) (issue 1126)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: shanks: novox/mesh-catalog#505: checks/placement/go.mod names mesh-sdk f1d7c7377dc4, which is neither on mesh-sdk's trunk nor the g…
1241ee7041
jschoubben added 1 commit 2026-10-26 18:21:26 +00:00
The node's composer asks the vault for the pair credentials its composition reads, as consumer and provider, sealed to its key (issue 1126, ADR 0550 §5)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: shanks: novox/mesh-catalog#505: checks/placement/go.mod names mesh-sdk 91413de33516, which is neither on mesh-sdk's trunk nor the g…
1e38c42646
jschoubben added 1 commit 2026-10-26 18:24:39 +00:00
The node keeps the mesh's own certificate it applies, from its kept declaration at start, for its record; one agent test folded to hold the count (issue 1126, ADR 0555 §3)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: ace: novox/mesh-catalog#505: checks/placement/go.mod names mesh-sdk 91413de33516, which is neither on mesh-sdk's trunk nor the grou…
f8afaefba0
jschoubben added 1 commit 2026-10-26 18:26:27 +00:00
The node composes again when the vault says a secret changed, so a rotated secret or credential reaches it at once (issue 1126, ADR 0547 §2)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: integration: meshbuildgo/cmd/mesh-build-go.TestIntegrationLevelRunsAgainstARealStoreAndBusAndLeavesNothing: result = &{Level:integr…
bb46a6ad0f
jschoubben added 1 commit 2026-10-26 18:34:26 +00:00
The node agent begins again composing its own when the catalogue places its node, with no restart (issue 1126, ADR 0549 §4)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: unit: git.novox.be/novox/mesh-catalog/checks/nobinaries.TestTheCatalogueHoldsNoCompiledProgram: modules/mesh-config/cmd/mesh-config…
21d6583b5e
jschoubben added 1 commit 2026-10-26 18:40:44 +00:00
Pin mesh-sdk feat/1126-nodes-compose 9713c30: placement carries a settings-form module's values (issue 1126)
mesh/delivery closed: a newer head of the same pull request
mesh/check failed: ace: novox/mesh-catalog#505 does not merge into the trunk: files in conflict: .gitignore | cdd3f3fd4f63 on ff9386dcccc2 | unit 1245…
cdd3f3fd4f
jschoubben added 1 commit 2026-10-26 19:09:44 +00:00
mesh-tools changed title from WIP: The node agent writes its record in its own have key (issue 1126) to WIP: The node composes its own modules once the catalogue places it, and writes its record (issue 1126) 2026-10-26 19:13:17 +00:00
jschoubben added 1 commit 2026-10-26 19:23:18 +00:00
jschoubben added 1 commit 2026-10-26 19:29:16 +00:00
jschoubben added 1 commit 2026-10-26 19:35:53 +00:00
Pin mesh-sdk feat/1126-nodes-compose 03dce12, the group's head: the checker refuses a pin that is neither trunk nor the group's head (issue 1126)
mesh/delivery-group group feat/1126-nodes-compose rejected: composed together: the checker's verdict at the members' heads (0d06ff386dce): ace
mesh/delivery closed: a newer head of the same pull request
mesh/check checking 59d77dd457da on ff9386dcccc2 | novox/mesh-host#149 in group feat/1126-nodes-compose
59d77dd457
mesh-tools marked the pull request as ready for review 2026-10-26 21:09:22 +00:00
jschoubben added 2 commits 2026-10-26 21:09:55 +00:00
Pin mesh-sdk 9796444 (l2-next: feat/1126-nodes-compose merged with sdk main #101, the standing-test race fixes) (issue 1126)
mesh/delivery merged: source.main moved to novox/mesh-host@be94d2689e2f
mesh/delivery-group group feat/1126-nodes-compose merged: every member is merged
mesh/check checking 1d442885148a on be94d2689e2f | novox/mesh-host#149 in group feat/1126-nodes-compose
1d44288514
mesh-tools merged commit be94d2689e into main 2026-10-26 21:11:37 +00:00
mesh-tools deleted branch feat/1126-nodes-compose 2026-10-26 21:11:37 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-host#149