Node-engine: hand a moved module by its manifest, its build and the machine, never by the vault's reading of its plan (issue 1966) #206

Merged
mesh-tools merged 1 commits from fix/handed-one-rule into main 2026-11-04 09:16:13 +00:00
Member

A blocking fault (issue 1966): on ace mesh-build-go, mesh-build-image, mesh-build-node and ssh-client, and on shanks mesh-build-image and ssh-client, were refused with "asks its forge-account binding for ssh_alias, and what answers it says address, as, at or from". The vault judges a module handed only when its assignment already carries a plan, and the node-engine followed that word, so a node with no plan composed the files itself, was refused, and never got a plan.

  • resolution.Handing: handed = moved, build kept templates, and the machine can take handed files (ADR 0593 §7: the rule is the node-engine's; the vault follows the plans this composition writes, one composition later).
  • boundInto: a file the client should fill that still reaches it is refused as "handed module not handed: ... "; VaultDisagrees makes issue 774's case loud instead of a secret to make.
  • Rows only in existing tests (the repository is over its unit budget); go vet -tags integration ./... and the unit suite pass.

On top of #205 (the node names its provisioner account), rebased onto main after #205 merged; git range-diff shows the same patch the review approved at 421e6b07.

Quick fix vs thorough fix: the milestone's prepare chose one rule in mesh-sdk shared by the vault and the node; the vault cannot read manifests, so the one rule lives in the node-engine and the vault reads only its plans. Grouped with mesh-catalog's fix/handed-one-rule (mesh-vault's read tool own_handed).

Live check after the delivery: mesh-provisioner.provisioner_plans holds plans for ace's three build modules and ssh-client and for shanks's mesh-build-image and ssh-client; mesh-vault.own_handed {node: ace} shows them handed by their plans.

Reviewed by the mesh-code-reviewer agent (round 1, approve, with three mutation tests), started by fix-1965@shanks.

Reviewed-by: fix-1965@shanks at 966093d8d0

https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig

A blocking fault (issue 1966): on ace mesh-build-go, mesh-build-image, mesh-build-node and ssh-client, and on shanks mesh-build-image and ssh-client, were refused with "asks its forge-account binding for ssh_alias, and what answers it says address, as, at or from". The vault judges a module handed only when its assignment already carries a plan, and the node-engine followed that word, so a node with no plan composed the files itself, was refused, and never got a plan. - `resolution.Handing`: handed = moved, build kept templates, and the machine can take handed files (ADR 0593 §7: the rule is the node-engine's; the vault follows the plans this composition writes, one composition later). - `boundInto`: a file the client should fill that still reaches it is refused as "handed module not handed: ... <why>"; `VaultDisagrees` makes issue 774's case loud instead of a secret to make. - Rows only in existing tests (the repository is over its unit budget); `go vet -tags integration ./...` and the unit suite pass. On top of #205 (the node names its provisioner account), rebased onto main after #205 merged; `git range-diff` shows the same patch the review approved at 421e6b07. Quick fix vs thorough fix: the milestone's prepare chose one rule in mesh-sdk shared by the vault and the node; the vault cannot read manifests, so the one rule lives in the node-engine and the vault reads only its plans. Grouped with mesh-catalog's fix/handed-one-rule (mesh-vault's read tool `own_handed`). Live check after the delivery: `mesh-provisioner.provisioner_plans` holds plans for ace's three build modules and ssh-client and for shanks's mesh-build-image and ssh-client; `mesh-vault.own_handed {node: ace}` shows them handed by their plans. Reviewed by the mesh-code-reviewer agent (round 1, approve, with three mutation tests), started by fix-1965@shanks. Reviewed-by: fix-1965@shanks at 966093d8d067780eb4153cbecb5ced80305da678 https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
mesh-tools added 1 commit 2026-11-04 08:42:04 +00:00
Hand a moved module by its manifest, its build and the machine, never by the vault's reading of its plan, so a node with no plan yet makes the plan that hands it (issue 1966)
mesh/delivery merged: source.main moved to novox/mesh-host@fabfdf04f78a
mesh/delivery-group group fix/handed-one-rule merged: every member is merged
mesh/check being carried to 966093d8d067 on fabfdf04f78a | from 4d47ff5ce743, mesh-catalog dd458cb155f5
966093d8d0
The vault judged a module handed only when its assignment already carried a handing plan, and the node-engine followed
that word: a module with no plan was composed the old way, refused for a key only the provider's helper answers
(forge-account's ssh_alias), and so never got its plan. resolution.Handing is now the manifest, its build and the
machine alone; the vault's word is read only to say where the two disagree. A refusal of a file or an own secret the
provisioner's client should fill now says "handed module not handed" and why, never only the keys a binding lacks or a
secret to make.

Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig
Author
Member

Delivery novox/mesh-host@966093d8d067 — merged since 2026-11-04T09:16:16Z

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

Group fix/handed-one-rule: novox/mesh-catalog@237a534ca4, novox/mesh-host@966093d8d0

  • composed together: pass — the checker's verdict at the members' heads (4aecfd7eb245)

Transitions

  • 2026-11-04 08:42 (new) → proposed (announced): novox/mesh-host#206's head announced
  • 2026-11-04 08:42 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 09:16 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@966093d8d067` — **merged** since 2026-11-04T09:16:16Z **Source** — source.main moved to novox/mesh-host@fabfdf04f78a. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/handed-one-rule`: novox/mesh-catalog@237a534ca4d3, novox/mesh-host@966093d8d067 - composed together: pass — the checker's verdict at the members' heads (4aecfd7eb245) **Transitions** - 2026-11-04 08:42 (new) → proposed (announced): novox/mesh-host#206's head announced - 2026-11-04 08:42 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 09:16 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-tools merged commit fabfdf04f7 into main 2026-11-04 09:16:13 +00:00
mesh-tools deleted branch fix/handed-one-rule 2026-11-04 09:16:14 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-host#206