Each node's engine writes its own declared packages and answers packages (ADR 0565 §6, issue 1953) #193

Merged
mesh-tools merged 2 commits from feat/node-packages into main 2026-11-01 17:02:54 +00:00
Member

Delivery group feat/node-packages (mesh-sdk, mesh-host, mesh-catalog, mesh-delivery), one check, one Approve. Issues 1953 (design 47 L5), 1954 (L6), 1876. Decisions: ADR 0565 clauses 1, 6, 14, 15; ADR 0570; ADR 0580; ADR 0585.

What it does: (1) each node's engine writes its own declared packages (bucket mesh-host_packages, key ) only when a composition changes them, and the node seat answers packages beside the controller mirror and their difference; pacman reads it and names its source (the last unkept controller read before the lease write, per mesh-grants.grants_lease_check). Deviation said: the read is named mesh-host.packages (the engine's module bucket, as disk-load reads mesh-host.data), not node-engine.packages. (2) mesh-provisioner composes a node once over one read with a bounded take-in cache and reads its own states from the watched copy with write-through; per-phase timings in provisioner_compose. Measured on captured novox inputs: 11.7 s -> 0.49 s per compose, identical plans over nine runs. (3) pacman keeps one mirror list for the mesh on the bus, ranked inside the write that opens a weekly round; each node writes /etc/pacman.d/mirrorlist from it through the root helper, and a round's run starts only once the file holds the round's list; reflector's timer is disabled.

Quick vs thorough: thorough for all three (the slow reader's third instance; the decided per-node packages; the decided mirror list). Test counts unchanged in every repository. Local reproduction: unit and integration of every changed module, go vet -tags integration of all 134 go.mod files, offline build with -mod=readonly. Review: reviewerP@shanks, two rounds (round 1: the opener upgraded before its file was written; round 2: a committed binary removed).

This member: selfcompose keeps each handed composition's packages and writes mesh-host_packages. only when it differs (retried after the growing wait); the node seat verb packages answers the key, the mirror's key and their difference, and with write writes it again. Pins mesh-sdk b2a27ed5.

Reviewed-by: reviewerP@shanks at 74ecda8ea2
Pushed-by: lead-47@shanks

https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL

Delivery group feat/node-packages (mesh-sdk, mesh-host, mesh-catalog, mesh-delivery), one check, one Approve. Issues 1953 (design 47 L5), 1954 (L6), 1876. Decisions: ADR 0565 clauses 1, 6, 14, 15; ADR 0570; ADR 0580; ADR 0585. What it does: (1) each node's engine writes its own declared packages (bucket mesh-host_packages, key <node>) only when a composition changes them, and the node seat answers `packages` beside the controller mirror and their difference; pacman reads it and names its source (the last unkept controller read before the lease write, per mesh-grants.grants_lease_check). Deviation said: the read is named mesh-host.packages (the engine's module bucket, as disk-load reads mesh-host.data), not node-engine.packages. (2) mesh-provisioner composes a node once over one read with a bounded take-in cache and reads its own states from the watched copy with write-through; per-phase timings in provisioner_compose. Measured on captured novox inputs: 11.7 s -> 0.49 s per compose, identical plans over nine runs. (3) pacman keeps one mirror list for the mesh on the bus, ranked inside the write that opens a weekly round; each node writes /etc/pacman.d/mirrorlist from it through the root helper, and a round's run starts only once the file holds the round's list; reflector's timer is disabled. Quick vs thorough: thorough for all three (the slow reader's third instance; the decided per-node packages; the decided mirror list). Test counts unchanged in every repository. Local reproduction: unit and integration of every changed module, go vet -tags integration of all 134 go.mod files, offline build with -mod=readonly. Review: reviewerP@shanks, two rounds (round 1: the opener upgraded before its file was written; round 2: a committed binary removed). This member: selfcompose keeps each handed composition's packages and writes mesh-host_packages.<node> only when it differs (retried after the growing wait); the node seat verb packages answers the key, the mirror's key and their difference, and with write writes it again. Pins mesh-sdk b2a27ed5. Reviewed-by: reviewerP@shanks at 74ecda8ea2cf7b42345253f86ad3b4a264f38d77 Pushed-by: lead-47@shanks https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
mesh-tools added 2 commits 2026-11-01 15:33:53 +00:00
pacman still reads the controller's mirror because no engine wrote its key: the engine
now keeps each handed composition's package resources and, after a pass that handed
something new, writes mesh-host_packages.<node> only when the value differs, owed after
the growing bound when refused. The manifest declares the state so the grants part
creates it. The verb packages answers the key beside the mirror's key for the node and
their difference, and with write writes the key again from what was composed. H8's
integration test proves the write under the grant the grants part composes.

Needs mesh-sdk feat/node-packages (0ef7c0c) for DeclaredPackagesOf and the engine's read of the
mirror (go.mod pin left for the lead: the SDK commit is not pushed).

Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
Pin the group's mesh-sdk head b2a27ed5 (issue 1953)
mesh/delivery merged: source.main moved to novox/mesh-host@9f7e898ecfeb
mesh/delivery-group group feat/node-packages merged: every member is merged
mesh/check checking 74ecda8ea2cf on bc960c51dbf0 | novox/mesh-host#193 in group feat/node-packages
74ecda8ea2
The delivery group feat/node-packages pins one mesh-sdk head in every member: it carries DeclaredPackagesOf and the engine's read of the mirror this change uses.

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

Delivery novox/mesh-host@74ecda8ea2cf — merged since 2026-11-01T17:02:58Z

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

Group feat/node-packages: novox/mesh-catalog@5ccce4967a, novox/mesh-delivery@b18c62f671, novox/mesh-host@74ecda8ea2, novox/mesh-sdk@b2a27ed5ce

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

Transitions

  • 2026-11-01 15:33 (new) → proposed (announced): novox/mesh-host#193's head announced
  • 2026-11-01 15:33 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-01 17:02 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@74ecda8ea2cf` — **merged** since 2026-11-01T17:02:58Z **Source** — source.main moved to novox/mesh-host@9f7e898ecfeb. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `feat/node-packages`: novox/mesh-catalog@5ccce4967a98, novox/mesh-delivery@b18c62f671e1, novox/mesh-host@74ecda8ea2cf, novox/mesh-sdk@b2a27ed5cec4 - composed together: pass — the checker's verdict at the members' heads (0388ac1f351b) **Transitions** - 2026-11-01 15:33 (new) → proposed (announced): novox/mesh-host#193's head announced - 2026-11-01 15:33 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-01 17:02 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 9f7e898ecf into main 2026-11-01 17:02:54 +00:00
mesh-tools deleted branch feat/node-packages 2026-11-01 17:02:55 +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#193