Two blocking faults met after the final L3 delivery (2026-11-04), one small-fix branch.
ace: every provisioner-client write refused (issue 774 notes 111-112). From 01:29 local, ace's node-engine refused every filled-file write ("this node's declaration names no provisioner client's account") and handed no module (postgres, restic, power lost their plans). The cause: a provisioner client held as its stand-in this pass composes no process, so provisionerAccount is empty.
514cf23a: the node keeps the account the client runs as while it is held (compose.Node.RunningProvisioner, from what runs). Guarded (05475448) to a placed client held as its stand-in: a client removed from the node, or placed and composing none, keeps no account.
f7abd059: a node composition that drops an account what runs names is said. No row of its own (rule bent: it only logs; the harm is covered by (a)'s rows).
f7129fdb: node-engine.composition {module: node} shows the node's own fields (provisioner account, adoption, counts) and what the last pass held. It is read-only and shows no secret.
novox: nats can never move to a new build while it waits for a yes (issue 1585 note 44, met twice). frombus skipped reading the build of a module in InOwn while compositions folded it from its wanted src2: fingerprint. 95b509e0: one rule, compose.Folds, used by both. Taking the build in does not apply it: the operator's yes stays the node-engine's judgement.
quick vs thorough: thorough for both. There was no safe quick fix for ace (a recompose gives the same inputs); 1585 was met a second time.
Tests: rows in existing tests, net zero; each shown to fail without its change.
After delivery: read postgres's composition diff on ace (its consumers file was dropped while nothing was handed), and the node's own fields on ace and shanks.
Reviewed-by: mesh-code-reviewer@shanks at 054754482c
Pushed-by: lead-47@shanks
Two blocking faults met after the final L3 delivery (2026-11-04), one small-fix branch.
1. **ace: every provisioner-client write refused** (issue 774 notes 111-112). From 01:29 local, ace's node-engine refused every filled-file write ("this node's declaration names no provisioner client's account") and handed no module (postgres, restic, power lost their plans). The cause: a provisioner client held as its stand-in this pass composes no process, so provisionerAccount is empty.
- 514cf23a: the node keeps the account the client runs as while it is held (compose.Node.RunningProvisioner, from what runs). Guarded (05475448) to a placed client held as its stand-in: a client removed from the node, or placed and composing none, keeps no account.
- f7abd059: a node composition that drops an account what runs names is said. No row of its own (rule bent: it only logs; the harm is covered by (a)'s rows).
- f7129fdb: node-engine.composition {module: node} shows the node's own fields (provisioner account, adoption, counts) and what the last pass held. It is read-only and shows no secret.
2. **novox: nats can never move to a new build while it waits for a yes** (issue 1585 note 44, met twice). frombus skipped reading the build of a module in InOwn while compositions folded it from its wanted src2: fingerprint. 95b509e0: one rule, compose.Folds, used by both. Taking the build in does not apply it: the operator's yes stays the node-engine's judgement.
quick vs thorough: thorough for both. There was no safe quick fix for ace (a recompose gives the same inputs); 1585 was met a second time.
Tests: rows in existing tests, net zero; each shown to fail without its change.
After delivery: read postgres's composition diff on ace (its consumers file was dropped while nothing was handed), and the node's own fields on ace and shanks.
Reviewed-by: mesh-code-reviewer@shanks at 054754482cf4fe6f5449dce0484492f9905dc8de
Pushed-by: lead-47@shanks
https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
frombus skipped reading the build of every module in Scope.InOwn, while compose.compositions folds such a module only
at no src2: fingerprint: a want at src2: (nats on novox, its have waiting for a yes) composed it from the indexer's
unresolved manifest and built() refused it, "no build has published" its server artifact. compose.Folds is now the one
rule; frombus takes the build in, or keeps the module at its wanted build, exactly where it says the module is not
folded. A row composes spiegel, in InOwn and wanted at src2:, from its build's upstream image; it read the indexer's
manifest before.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
provisionerAccount reads the user of the client's process from this pass's plan, and a client held as its stub (or
carried as it runs) composes no process: on ace, 2026-11-04 01:29 to 01:33, the node's own composition named no
account, the node-engine refused every filled write, and no module was handed (postgres's consumers, restic, power).
A node now carries the account its client runs as (Node.RunningProvisioner: its own composition's account as it runs,
else the user of the client's running process), and a placed client that composes none this pass keeps it. A row holds
the client in the provisioned mesh, both ways: the account stays and restic keeps its filled files; both were lost
before.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Applied, a node's own composition naming no account refuses every filled write and hands no module, which on ace
went unsaid from 01:29 to 01:33 but for the refusals themselves. The pass now says it once, naming the account what
runs names. A placed client keeps its account by the previous commit; this says the case that is left, a client no
longer composed here.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Reading ace's node composition gave four resources twice and no way to see that one revision named no provisioner
client's account. The verb now shows, for module node, the revision's provisioner account beside what runs names, its
adoption, how many identities, groups and libraries it names, and each module the composer's last pass held with why.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
The review removed the guard and the suite still passed. The guard is now provisionerHeld, a placed client held as
its stand-in, rather than any placed client, so one placed and not held that composes no account keeps none stale.
Rows in the held client's table: the client taken out of the node's placement while what runs names the account, read
from the running own composition and from the client's running process, names no account; a placed client whose
process names no user names none. With the guard removed the first three fail; with it reduced to "placed", the last.
Claude-Session: https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Deliverynovox/mesh-host@054754482cf4 — merged since 2026-11-04T01:05:51Z
Source — source.main moved to novox/mesh-host@6019c6d514. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-11-04 00:54 (new) → proposed (announced): novox/mesh-host#204's head announced
2026-11-04 00:54 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 01:05 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@054754482cf4` — **merged** since 2026-11-04T01:05:51Z
**Source** — source.main moved to novox/mesh-host@6019c6d514a7. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-11-04 00:54 (new) → proposed (announced): novox/mesh-host#204's head announced
- 2026-11-04 00:54 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 01:05 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`.
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.
Two blocking faults met after the final L3 delivery (2026-11-04), one small-fix branch.
514cf23a: the node keeps the account the client runs as while it is held (compose.Node.RunningProvisioner, from what runs). Guarded (05475448) to a placed client held as its stand-in: a client removed from the node, or placed and composing none, keeps no account.f7abd059: a node composition that drops an account what runs names is said. No row of its own (rule bent: it only logs; the harm is covered by (a)'s rows).f7129fdb: node-engine.composition {module: node} shows the node's own fields (provisioner account, adoption, counts) and what the last pass held. It is read-only and shows no secret.95b509e0: one rule, compose.Folds, used by both. Taking the build in does not apply it: the operator's yes stays the node-engine's judgement.quick vs thorough: thorough for both. There was no safe quick fix for ace (a recompose gives the same inputs); 1585 was met a second time.
Tests: rows in existing tests, net zero; each shown to fail without its change.
After delivery: read postgres's composition diff on ace (its consumers file was dropped while nothing was handed), and the node's own fields on ace and shanks.
Reviewed-by: mesh-code-reviewer@shanks at
054754482cPushed-by: lead-47@shanks
https://claude.ai/code/session_01JG73KG7AfSdh6FP8VrBqCn
Delivery
novox/mesh-host@054754482cf4— merged since 2026-11-04T01:05:51ZSource — source.main moved to novox/mesh-host@6019c6d514. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.