provisioner_compose took 2.6-13.6 s per node with nothing changed, CPU bound. The node is now composed at its wanted and its newest builds over one read (frombus.PlansHeldTwice, whose composer resolves each machine once), its own plans, provisions and refusals and the providers' entries are read from the watched copy, its own writes taken in at once, and a provider's manifest once by digest: no read by key per composition is left. The result says where the time went, phase by phase, and a slow composition that changed nothing says it in the log. BenchmarkComposeNode times it over a mesh captured with the read tools (MESH_COMPOSE_CAPTURE): novox 11.7 s to 0.49 s, ace 0.49 s, g14 and shanks 0.39 s; plans and provisions identical to before over nine compositions of the four nodes. Needs mesh-sdk feat/compose-once (5d26c65); go.mod still pins the old mesh-sdk until the group pins its head. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
mesh-provisioner
Holds the mesh-provisioner seat once for the mesh: the provisioner's server (novox/hq ADR 0349 clause 3, design 57
P4). Go, one binary (cmd/mesh-provisioner), served by a runtime of its own on its own bus account (runs-as), so
that its account alone writes the registry. The provisioner client on each node (node-provisioner, design 57 P5)
is the module mesh-provisioner-client.
What it keeps
mesh-provisioner_registry: which domain answers which kind of placeholder, keyed by the kind (config,secret,bound— the provider's own bucket,<provider-module>_bound, keyed<node>.<module>.<provision>[.<local>](mesh-sdkgo/provider) —consumers— a provider's consumers' credentials, asked of the vault by the provider machine's client (novox/hq ADR 0373) —collected— andshell,environmentandcontribution, read as collections of the same name (design 57 L1) — and the placement namespacesdir,access,port,seat,machine). Each answer names the owning module and where a client finds the values: a domain's bucket and its key shape (placement's is the controller's assignments mirror, whose value carries the provisioner's plan of a module handed to it), or a seat's verb asked on request and reply (a secret is never in a bucket). Compiled inregistry.go, written at start and every hour, only where it differs; a kind no domain answers is deleted.mesh-provisioner_needs: what each module on each node needs,<node>.<module>.<kind>.<name>.mesh-provisioner_applied: what is applied where,<node>.<module>.mesh-provisioner_collect: the items of every collection,<node>.<collection>.<contributor>, the collection with a character a key's token cannot hold written=<hex>(shell=3Azsh=3Anormalisshell:zsh:normal), and read back by its name.
The last three are written by each node's provisioner client for its own node's keys alone: the controller grants
the client <node>.> of each and nothing wider (mesh-controller internal/broker/provisioner.go), and a provider
reads the needs without writing them. This module writes only the registry.
The verb
mesh-provisioner.provisioning with what registry (the default), needs, applied or collect, narrowed by
node and module (for collect, the contributor) and, for collect, collection. Reads only. A key out of its
bucket's shape is said in the answer, never dropped quietly.
Files it does not know
Each directory or archive this module declares says how it treats a file it did not write (ADR 0422, ADR 0416).
${dir:state}: everything in it is the program's; the mesh moves nothing out (ADR 0422 §2).