Design 47 release R4b, the node-engine's part (ADR 0453 §1-§2, ADR 0446 §4/§5). mesh-sdk's main holds the node-engine's declaration parser and validator as go/declaration and go/validate, copied from mesh-host 619e14aa; no commit has touched mesh-host's copies since. The node-engine now imports mesh-sdk's (pinned at mesh-sdk main ab0c16dd, v0.1.14-0.20261020085642-ab0c16ddad26) and deletes internal/declaration and validate/. The same parser reads the same declarations; the operator sees nothing.
1392 AC1: go.mod pins mesh-sdk at a commit on its main.
AC2: no Go file imports internal/declaration or mesh-host/validate; both directories are gone (25 files).
AC3: gofmt clean, go vet with and without -tags integration, the unit suite with -race (9 s).
AC4: README's conformance run names mesh-sdk's go/declaration.
AC5 (live, after delivery): every node-engine reports the new version and applies its next declaration.
Opened after mesh-controller #405 reached the build node (delivered 2026-10-20 12:09 UTC), so the merge check no longer copies mesh-host's validator into its judge (issue 1391).
Checks before this pull request: try build-1792498416259007848 passed.
Design 47 release R4b, the node-engine's part (ADR 0453 §1-§2, ADR 0446 §4/§5). mesh-sdk's main holds the node-engine's declaration parser and validator as go/declaration and go/validate, copied from mesh-host 619e14aa; no commit has touched mesh-host's copies since. The node-engine now imports mesh-sdk's (pinned at mesh-sdk main ab0c16dd, v0.1.14-0.20261020085642-ab0c16ddad26) and deletes internal/declaration and validate/. The same parser reads the same declarations; the operator sees nothing.
- 1392 AC1: go.mod pins mesh-sdk at a commit on its main.
- AC2: no Go file imports internal/declaration or mesh-host/validate; both directories are gone (25 files).
- AC3: gofmt clean, go vet with and without -tags integration, the unit suite with -race (9 s).
- AC4: README's conformance run names mesh-sdk's go/declaration.
- AC5 (live, after delivery): every node-engine reports the new version and applies its next declaration.
Opened after mesh-controller #405 reached the build node (delivered 2026-10-20 12:09 UTC), so the merge check no longer copies mesh-host's validator into its judge (issue 1391).
Checks before this pull request: try build-1792498416259007848 passed.
Reviewed-by: reviewer-r4b@shanks at 52600ec7bd61ee271a5cc7f4136bcf0a2a8f00fc
Issues: 1392
mesh/merge-gate head 52600ec7bd61 merged into trunk cdcba9ca7375 — pass: builds mesh-host → ace, g14, novox, shanks; no bus step; every machine composes wi…
Deliverynovox/mesh-host@52600ec7bd61 — delivered since 2026-10-20T12:53:24Z
Delivery plan — builds mesh-host → ace, g14, novox, shanks; no bus step
tier 0: mesh-host
ace: receives mesh-host
g14: receives mesh-host
novox: receives mesh-host
shanks: receives mesh-host
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine
Machines
mesh-host on every machine running it: sent
Transitions
2026-10-20 12:47 (new) → proposed (announced): novox/mesh-host#124's head announced
2026-10-20 12:51 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-20 12:51 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-20 12:52 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-20 12:52 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-20 12:53 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-host@52600ec7bd61` — **delivered** since 2026-10-20T12:53:24Z
**Delivery plan** — builds mesh-host → ace, g14, novox, shanks; no bus step
- tier 0: mesh-host
- ace: receives mesh-host
- g14: receives mesh-host
- novox: receives mesh-host
- shanks: receives mesh-host
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine
**Machines**
- mesh-host on every machine running it: sent
**Transitions**
- 2026-10-20 12:47 (new) → proposed (announced): novox/mesh-host#124's head announced
- 2026-10-20 12:51 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-20 12:51 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-20 12:52 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-20 12:52 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-20 12:53 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Merge check at 52600ec7
Judged: head 52600ec7bd61 merged into trunk cdcba9ca7375; read beside it: mesh-catalog db32f8ac5632, mesh-controller b718d24f84b9, mesh-controller-main b718d24f84b9, mesh-tools 7412c5b6c9c5
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-host)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds mesh-host → ace, g14, novox, shanks; no bus step
tier 0: mesh-host
ace: receives mesh-host
g14: receives mesh-host
novox: receives mesh-host
shanks: receives mesh-host
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine
Run by the build seat on ace as build-1792500476653226231 (builds --log build-1792500476653226231).
--- the gate: mesh-host
mesh-host: ok
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-20T12:46:19Z says they run
composing every machine as the mesh is
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
composing every machine with the change
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-20T12:46:19Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-config, holds mesh-dns-resolver, holds mesh-provisioner, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 1 module(s) in 1 tier(s): mesh-host
notes:
- README.md, cmd/mesh-host/libraries_test.go, cmd/mesh-host/main_test.go, cmd/mesh-host/module_facts_test.go, cmd/mesh-host/network_test.go, cmd/mesh-host/probe_test.go, cmd/mesh-host/replay233_test.go, cmd/mesh-host/units_test.go, cmd/mesh-host/vaultbox_nats_test.go, examples/bundle_test.go, internal/accounts/accounts_test.go, internal/accounts/root_test.go, internal/apply/agent_home_guard_test.go, internal/apply/apply_test.go, internal/apply/busy_test.go, internal/apply/filled_apply_test.go, internal/apply/filled_library_test.go, internal/apply/filled_test.go, internal/apply/health_check_test.go, internal/apply/hold_test.go, internal/apply/identities_test.go, internal/apply/into_handover_test.go, internal/apply/into_test.go, internal/apply/left_out_test.go, internal/apply/library_test.go, internal/apply/logging_test.go, internal/apply/maintenance_window_test.go, internal/apply/mesh_dirs_test.go, internal/apply/mesh_names_test.go, internal/apply/module_results_test.go, internal/apply/opening_test.go, internal/apply/plan_test.go, internal/apply/process_test.go, internal/apply/reads_test.go, internal/apply/replay358_test.go, internal/apply/runonce_test.go, internal/apply/schedule_test.go, internal/apply/sealed_test.go, internal/apply/step_failed_test.go, internal/apply/store_away_test.go, internal/apply/takeover_test.go, internal/apply/vault_sealed_test.go, internal/apply/vocabulary_test.go, internal/bootstrap/adopt_in_place_test.go, internal/bootstrap/adopted.go, internal/bootstrap/adopted_test.go, internal/bootstrap/apply.go, internal/bootstrap/apply_test.go, internal/bootstrap/bus_adoption.go, internal/bootstrap/control.go, internal/bootstrap/genesis_handover_test.go, internal/bootstrap/inuse.go, internal/bootstrap/phase3.go, internal/bootstrap/phase3_test.go, internal/bootstrap/ports.go, internal/bootstrap/ports_test.go, internal/bootstrap/preflight.go, internal/bootstrap/preflight_test.go, internal/bootstrap/retire.go, internal/bootstrap/retire_test.go, internal/bootstrap/rewrite.go, internal/bootstrap/rewrite_test.go, internal/bootstrap/rootsecrets.go, internal/bootstrap/rootsecrets_test.go, internal/bootstrap/store_layout_test.go, internal/bootstrap/trust.go, internal/bootstrap/trust_test.go, internal/bootstrap/verify.go, internal/bootstrap/verify_test.go, internal/bundle/bundle_test.go, internal/declaration/adoption_test.go, internal/declaration/block_test.go, internal/declaration/cron_test.go, internal/declaration/declaration_test.go, internal/declaration/emitted_check_test.go, internal/declaration/health_test.go, internal/declaration/identity_test.go, internal/declaration/into_test.go, internal/declaration/module_test.go, internal/declaration/order_test.go, internal/declaration/ownership_test.go, internal/declaration/process_test.go, internal/declaration/provisioner_test.go, internal/declaration/replaces_test.go, internal/declaration/root_test.go, internal/declaration/schedule_declaration_test.go, internal/declaration/stateless_test.go, internal/declaration/trusted_test.go, internal/declaration/userscope_test.go, internal/filling/filling_test.go, internal/firewall/firewall_test.go, internal/liveness/liveness_test.go, internal/liveness/readiness_test.go, internal/liveness/replay_test.go, internal/liveness/waiting_test.go, internal/system/shapes_test.go, internal/system/system_test.go, internal/units/units_test.go, validate/validate.go and validate/validate_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
go: downloading git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261020085642-ab0c16ddad26
ok github.com/novox/mesh-host/cmd/mesh-bootstrap 1.012s
ok github.com/novox/mesh-host/cmd/mesh-host 6.153s
ok github.com/novox/mesh-host/examples 1.025s
ok github.com/novox/mesh-host/internal/accounts 1.442s
ok github.com/novox/mesh-host/internal/apply 5.350s
ok github.com/novox/mesh-host/internal/bootstrap 4.069s
ok github.com/novox/mesh-host/internal/bundle 1.021s
ok github.com/novox/mesh-host/internal/filling 1.742s
ok github.com/novox/mesh-host/internal/firewall 1.723s
ok github.com/novox/mesh-host/internal/identity 1.096s
ok github.com/novox/mesh-host/internal/image 1.021s
ok github.com/novox/mesh-host/internal/inventory 1.112s
ok github.com/novox/mesh-host/internal/link 10.982s
ok github.com/novox/mesh-host/internal/liveness 2.163s
ok github.com/novox/mesh-host/internal/meshcli 1.611s
ok github.com/novox/mesh-host/internal/network 1.102s
ok github.com/novox/mesh-host/internal/outward 1.087s
ok github.com/novox/mesh-host/internal/profile 1.824s
ok github.com/novox/mesh-host/internal/reachable 1.086s
ok github.com/novox/mesh-host/internal/store 1.268s
ok github.com/novox/mesh-host/internal/system 1.044s
ok github.com/novox/mesh-host/internal/tunnel 1.048s
ok github.com/novox/mesh-host/internal/units 1.041s
ok github.com/novox/mesh-host/internal/upgrade 1.167s
ok github.com/novox/mesh-host/internal/witness 4.754s
ok github.com/novox/mesh-host/packaging 1.037s
? github.com/novox/mesh-host/rootsearch [no test files]
**Merge check** at `52600ec7`
Judged: head `52600ec7bd61` merged into trunk `cdcba9ca7375`; read beside it: mesh-catalog `db32f8ac5632`, mesh-controller `b718d24f84b9`, mesh-controller-main `b718d24f84b9`, mesh-tools `7412c5b6c9c5`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-host)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds mesh-host → ace, g14, novox, shanks; no bus step
- tier 0: mesh-host
- ace: receives mesh-host
- g14: receives mesh-host
- novox: receives mesh-host
- shanks: receives mesh-host
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine
- read by no module's build: README.md, cmd/mesh-host/libraries_test.go, cmd/mesh-host/main_test.go, cmd/mesh-host/module_facts_test.go, cmd/mesh-host/network_test.go, cmd/mesh-host/probe_test.go, cmd/mesh-host/replay233_test.go, cmd/mesh-host/units_test.go, cmd/mesh-host/vaultbox_nats_test.go, examples/bundle_test.go, internal/accounts/accounts_test.go, internal/accounts/root_test.go, internal/apply/agent_home_guard_test.go, internal/apply/apply_test.go, internal/apply/busy_test.go, internal/apply/filled_apply_test.go, internal/apply/filled_library_test.go, internal/apply/filled_test.go, internal/apply/health_check_test.go, internal/apply/hold_test.go, internal/apply/identities_test.go, internal/apply/into_handover_test.go, internal/apply/into_test.go, internal/apply/left_out_test.go, internal/apply/library_test.go, internal/apply/logging_test.go, internal/apply/maintenance_window_test.go, internal/apply/mesh_dirs_test.go, internal/apply/mesh_names_test.go, internal/apply/module_results_test.go, internal/apply/opening_test.go, internal/apply/plan_test.go, internal/apply/process_test.go, internal/apply/reads_test.go, internal/apply/replay358_test.go, internal/apply/runonce_test.go, internal/apply/schedule_test.go, internal/apply/sealed_test.go, internal/apply/step_failed_test.go, internal/apply/store_away_test.go, internal/apply/takeover_test.go, internal/apply/vault_sealed_test.go, internal/apply/vocabulary_test.go, internal/bootstrap/adopt_in_place_test.go, internal/bootstrap/adopted.go, internal/bootstrap/adopted_test.go, internal/bootstrap/apply.go, internal/bootstrap/apply_test.go, internal/bootstrap/bus_adoption.go, internal/bootstrap/control.go, internal/bootstrap/genesis_handover_test.go, internal/bootstrap/inuse.go, internal/bootstrap/phase3.go, internal/bootstrap/phase3_test.go, internal/bootstrap/ports.go, internal/bootstrap/ports_test.go, internal/bootstrap/preflight.go, internal/bootstrap/preflight_test.go, internal/bootstrap/retire.go, internal/bootstrap/retire_test.go, internal/bootstrap/rewrite.go, internal/bootstrap/rewrite_test.go, internal/bootstrap/rootsecrets.go, internal/bootstrap/rootsecrets_test.go, internal/bootstrap/store_layout_test.go, internal/bootstrap/trust.go, internal/bootstrap/trust_test.go, internal/bootstrap/verify.go, internal/bootstrap/verify_test.go, internal/bundle/bundle_test.go, internal/declaration/adoption_test.go, internal/declaration/block_test.go, internal/declaration/cron_test.go, internal/declaration/declaration_test.go, internal/declaration/emitted_check_test.go, internal/declaration/health_test.go, internal/declaration/identity_test.go, internal/declaration/into_test.go, internal/declaration/module_test.go, internal/declaration/order_test.go, internal/declaration/ownership_test.go, internal/declaration/process_test.go, internal/declaration/provisioner_test.go, internal/declaration/replaces_test.go, internal/declaration/root_test.go, internal/declaration/schedule_declaration_test.go, internal/declaration/stateless_test.go, internal/declaration/trusted_test.go, internal/declaration/userscope_test.go, internal/filling/filling_test.go, internal/firewall/firewall_test.go, internal/liveness/liveness_test.go, internal/liveness/readiness_test.go, internal/liveness/replay_test.go, internal/liveness/waiting_test.go, internal/system/shapes_test.go, internal/system/system_test.go, internal/units/units_test.go, validate/validate.go, validate/validate_test.go
Run by the build seat on ace as `build-1792500476653226231` (`builds --log build-1792500476653226231`).
```
--- the gate: mesh-host
mesh-host: ok
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-20T12:46:19Z says they run
composing every machine as the mesh is
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
composing every machine with the change
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
the bus's user list leaves out 6 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, ygcyr.mesh-mail.send, node.yvbpsm. Each is a user that cannot connect until one is issued
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-20T12:46:19Z
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-config, holds mesh-dns-resolver, holds mesh-provisioner, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 1 module(s) in 1 tier(s): mesh-host
notes:
- README.md, cmd/mesh-host/libraries_test.go, cmd/mesh-host/main_test.go, cmd/mesh-host/module_facts_test.go, cmd/mesh-host/network_test.go, cmd/mesh-host/probe_test.go, cmd/mesh-host/replay233_test.go, cmd/mesh-host/units_test.go, cmd/mesh-host/vaultbox_nats_test.go, examples/bundle_test.go, internal/accounts/accounts_test.go, internal/accounts/root_test.go, internal/apply/agent_home_guard_test.go, internal/apply/apply_test.go, internal/apply/busy_test.go, internal/apply/filled_apply_test.go, internal/apply/filled_library_test.go, internal/apply/filled_test.go, internal/apply/health_check_test.go, internal/apply/hold_test.go, internal/apply/identities_test.go, internal/apply/into_handover_test.go, internal/apply/into_test.go, internal/apply/left_out_test.go, internal/apply/library_test.go, internal/apply/logging_test.go, internal/apply/maintenance_window_test.go, internal/apply/mesh_dirs_test.go, internal/apply/mesh_names_test.go, internal/apply/module_results_test.go, internal/apply/opening_test.go, internal/apply/plan_test.go, internal/apply/process_test.go, internal/apply/reads_test.go, internal/apply/replay358_test.go, internal/apply/runonce_test.go, internal/apply/schedule_test.go, internal/apply/sealed_test.go, internal/apply/step_failed_test.go, internal/apply/store_away_test.go, internal/apply/takeover_test.go, internal/apply/vault_sealed_test.go, internal/apply/vocabulary_test.go, internal/bootstrap/adopt_in_place_test.go, internal/bootstrap/adopted.go, internal/bootstrap/adopted_test.go, internal/bootstrap/apply.go, internal/bootstrap/apply_test.go, internal/bootstrap/bus_adoption.go, internal/bootstrap/control.go, internal/bootstrap/genesis_handover_test.go, internal/bootstrap/inuse.go, internal/bootstrap/phase3.go, internal/bootstrap/phase3_test.go, internal/bootstrap/ports.go, internal/bootstrap/ports_test.go, internal/bootstrap/preflight.go, internal/bootstrap/preflight_test.go, internal/bootstrap/retire.go, internal/bootstrap/retire_test.go, internal/bootstrap/rewrite.go, internal/bootstrap/rewrite_test.go, internal/bootstrap/rootsecrets.go, internal/bootstrap/rootsecrets_test.go, internal/bootstrap/store_layout_test.go, internal/bootstrap/trust.go, internal/bootstrap/trust_test.go, internal/bootstrap/verify.go, internal/bootstrap/verify_test.go, internal/bundle/bundle_test.go, internal/declaration/adoption_test.go, internal/declaration/block_test.go, internal/declaration/cron_test.go, internal/declaration/declaration_test.go, internal/declaration/emitted_check_test.go, internal/declaration/health_test.go, internal/declaration/identity_test.go, internal/declaration/into_test.go, internal/declaration/module_test.go, internal/declaration/order_test.go, internal/declaration/ownership_test.go, internal/declaration/process_test.go, internal/declaration/provisioner_test.go, internal/declaration/replaces_test.go, internal/declaration/root_test.go, internal/declaration/schedule_declaration_test.go, internal/declaration/stateless_test.go, internal/declaration/trusted_test.go, internal/declaration/userscope_test.go, internal/filling/filling_test.go, internal/firewall/firewall_test.go, internal/liveness/liveness_test.go, internal/liveness/readiness_test.go, internal/liveness/replay_test.go, internal/liveness/waiting_test.go, internal/system/shapes_test.go, internal/system/system_test.go, internal/units/units_test.go, validate/validate.go and validate/validate_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
go: downloading git.novox.be/novox/mesh-sdk/go v0.1.14-0.20261020085642-ab0c16ddad26
ok github.com/novox/mesh-host/cmd/mesh-bootstrap 1.012s
ok github.com/novox/mesh-host/cmd/mesh-host 6.153s
ok github.com/novox/mesh-host/examples 1.025s
ok github.com/novox/mesh-host/internal/accounts 1.442s
ok github.com/novox/mesh-host/internal/apply 5.350s
ok github.com/novox/mesh-host/internal/bootstrap 4.069s
ok github.com/novox/mesh-host/internal/bundle 1.021s
ok github.com/novox/mesh-host/internal/filling 1.742s
ok github.com/novox/mesh-host/internal/firewall 1.723s
ok github.com/novox/mesh-host/internal/identity 1.096s
ok github.com/novox/mesh-host/internal/image 1.021s
ok github.com/novox/mesh-host/internal/inventory 1.112s
ok github.com/novox/mesh-host/internal/link 10.982s
ok github.com/novox/mesh-host/internal/liveness 2.163s
ok github.com/novox/mesh-host/internal/meshcli 1.611s
ok github.com/novox/mesh-host/internal/network 1.102s
ok github.com/novox/mesh-host/internal/outward 1.087s
ok github.com/novox/mesh-host/internal/profile 1.824s
ok github.com/novox/mesh-host/internal/reachable 1.086s
ok github.com/novox/mesh-host/internal/store 1.268s
ok github.com/novox/mesh-host/internal/system 1.044s
ok github.com/novox/mesh-host/internal/tunnel 1.048s
ok github.com/novox/mesh-host/internal/units 1.041s
ok github.com/novox/mesh-host/internal/upgrade 1.167s
ok github.com/novox/mesh-host/internal/witness 4.754s
ok github.com/novox/mesh-host/packaging 1.037s
? github.com/novox/mesh-host/rootsearch [no test files]
```
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.
Design 47 release R4b, the node-engine's part (ADR 0453 §1-§2, ADR 0446 §4/§5). mesh-sdk's main holds the node-engine's declaration parser and validator as go/declaration and go/validate, copied from mesh-host 619e14aa; no commit has touched mesh-host's copies since. The node-engine now imports mesh-sdk's (pinned at mesh-sdk main ab0c16dd, v0.1.14-0.20261020085642-ab0c16ddad26) and deletes internal/declaration and validate/. The same parser reads the same declarations; the operator sees nothing.
Opened after mesh-controller #405 reached the build node (delivered 2026-10-20 12:09 UTC), so the merge check no longer copies mesh-host's validator into its judge (issue 1391).
Checks before this pull request: try build-1792498416259007848 passed.
Reviewed-by: reviewer-r4b@shanks at
52600ec7bdIssues: 1392
Delivery
novox/mesh-host@52600ec7bd61— delivered since 2026-10-20T12:53:24ZDelivery plan — builds mesh-host → ace, g14, novox, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
52600ec7Judged: head
52600ec7bd61merged into trunkcdcba9ca7375; read beside it: mesh-catalogdb32f8ac5632, mesh-controllerb718d24f84b9, mesh-controller-mainb718d24f84b9, mesh-tools7412c5b6c9c5mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-host)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds mesh-host → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1792500476653226231(builds --log build-1792500476653226231).