Delivery group fix/1126-node-creds with mesh-sdk and mesh-delivery; pins mesh-sdk 7a8e9f97 exactly.
Watch the have bucket only where the node's grant allows (the reviewed watch fix).
Compose each module from its build and read what providers elsewhere serve, so a self-composing node hands its moved modules and settles mailu's domain.
A failed have that names no fingerprint and no composition (the agent's NotComposed) no longer counts as a module run inside the node's own composition; without this a module whose build cannot be read was applied from its raw manifest.
Tests: H8 (TestNatsANodeThePlacementNamesComposesAndAppliesItsOwn) reads a provider's served key on a second node and a placed module's build under the real per-node user and fails without ServedReads; a subtest under the plain node grant gets the bus's Permissions Violation and composes nothing (ADR 0560). Its refused subtest takes about 12.4 s, because a refused publish reaches only nats.go's async error handler and the read ends at the link's 10 s history bound; within the check's 60 s per package. A unit table (TestAHaveSaysWhetherItsModuleRunsInsideTheNodesOwn) holds the failed-have rule.
Rule bent (test budget): mesh-host runs about 1260 unit tests against a budget of 500; this adds one table test instead of shrinking. Folding it into an existing table would have cost another review round for one test; the budget is covered by issue 1921's shrink work.
Nothing live changes until the placement seed returns.
Delivery group fix/1126-node-creds with mesh-sdk and mesh-delivery; pins mesh-sdk 7a8e9f97 exactly.
- Watch the have bucket only where the node's grant allows (the reviewed watch fix).
- Compose each module from its build and read what providers elsewhere serve, so a self-composing node hands its moved modules and settles mailu's domain.
- A failed have that names no fingerprint and no composition (the agent's NotComposed) no longer counts as a module run inside the node's own composition; without this a module whose build cannot be read was applied from its raw manifest.
Tests: H8 (TestNatsANodeThePlacementNamesComposesAndAppliesItsOwn) reads a provider's served key on a second node and a placed module's build under the real per-node user and fails without ServedReads; a subtest under the plain node grant gets the bus's Permissions Violation and composes nothing (ADR 0560). Its refused subtest takes about 12.4 s, because a refused publish reaches only nats.go's async error handler and the read ends at the link's 10 s history bound; within the check's 60 s per package. A unit table (TestAHaveSaysWhetherItsModuleRunsInsideTheNodesOwn) holds the failed-have rule.
Rule bent (test budget): mesh-host runs about 1260 unit tests against a budget of 500; this adds one table test instead of shrinking. Folding it into an existing table would have cost another review round for one test; the budget is covered by issue 1921's shrink work.
Nothing live changes until the placement seed returns.
Reviewed-by: review-1126d@shanks at 6a4718b712b276ad403bf1e40aca01c1e2896159
The fold's watch of every have key ('>') was refused (permissions violation on
CONSUMER.CREATE KV_node-engine_have), and every self-composing agent stopped
after the seed. The composer now watches '*.node' (records) and '<node>.>' (its
own haves), as buscompose grants a node; the shadow watches '<node>.>' too. The
selfcompose tests check every watch and get against PermissionsFor(KindNode),
and the agent's integration tests run the agent as the node under that grant.
The node read a behind module's source manifest digest and composed every module
from the indexer's raw manifest; frombus now takes the build itself (Scope.KeptAt,
a fingerprint). The reader gives frombus the builder's key, a templates archive
fetched as every archive is (apply.Fetch) once per digest and checked against it,
and another node's served keys one by one, as the node's grant allows them.
H8 found it: a module the node could not compose yet got a failed have naming
no fingerprint, which counted as run inside the node's own composition, so the
next composition took it from its manifest past its build.
Deliverynovox/mesh-host@6a4718b712b2 — merged since 2026-10-27T20:32:42Z
Source — source.main moved to novox/mesh-host@bb15aab50e. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-10-27 20:31 (new) → proposed (announced): novox/mesh-host#153's head announced
2026-10-27 20:31 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-27 20:32 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@6a4718b712b2` — **merged** since 2026-10-27T20:32:42Z
**Source** — source.main moved to novox/mesh-host@bb15aab50eda. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1126-node-creds`: novox/mesh-delivery@bb7f2ff365c7, novox/mesh-host@6a4718b712b2, novox/mesh-sdk@7a8e9f970648
**Transitions**
- 2026-10-27 20:31 (new) → proposed (announced): novox/mesh-host#153's head announced
- 2026-10-27 20:31 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-27 20:32 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: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
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.
Delivery group fix/1126-node-creds with mesh-sdk and mesh-delivery; pins mesh-sdk 7a8e9f97 exactly.
Tests: H8 (TestNatsANodeThePlacementNamesComposesAndAppliesItsOwn) reads a provider's served key on a second node and a placed module's build under the real per-node user and fails without ServedReads; a subtest under the plain node grant gets the bus's Permissions Violation and composes nothing (ADR 0560). Its refused subtest takes about 12.4 s, because a refused publish reaches only nats.go's async error handler and the read ends at the link's 10 s history bound; within the check's 60 s per package. A unit table (TestAHaveSaysWhetherItsModuleRunsInsideTheNodesOwn) holds the failed-have rule.
Rule bent (test budget): mesh-host runs about 1260 unit tests against a budget of 500; this adds one table test instead of shrinking. Folding it into an existing table would have cost another review round for one test; the budget is covered by issue 1921's shrink work.
Nothing live changes until the placement seed returns.
Reviewed-by: review-1126d@shanks at
6a4718b712The fold's watch of every have key ('>') was refused (permissions violation on CONSUMER.CREATE KV_node-engine_have), and every self-composing agent stopped after the seed. The composer now watches '*.node' (records) and '<node>.>' (its own haves), as buscompose grants a node; the shadow watches '<node>.>' too. The selfcompose tests check every watch and get against PermissionsFor(KindNode), and the agent's integration tests run the agent as the node under that grant.Delivery
novox/mesh-host@6a4718b712b2— merged since 2026-10-27T20:32:42ZSource — source.main moved to novox/mesh-host@bb15aab50e. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1126-node-creds: novox/mesh-delivery@bb7f2ff365, novox/mesh-host@6a4718b712, novox/mesh-sdk@7a8e9f9706Transitions
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: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.