Design 47's last milestones as one release: the contracts for health, control records, provisioning and history leaving the controller (issues 774, 1126, 1952, 1953, 1954, 1955, 1289)
#133
Merged
mesh-toolsmerged 53 commits from feat/774-l3-reland into main2026-10-30 11:01:40 +00:00
Delivery 2 of design 47's single release (delivery group feat/774-l3-reland: mesh-sdk, mesh-delivery, mesh-catalog, mesh-host, mesh-controller, mesh-tools, hq). Records: ADR 0564 (v47), 0565 (v14), 0570 (v18), 0571 (v35), 0572 (v9).
This member holds the contracts: held modules serve their tools from what runs (L3 re-land, issue 1126); health seats, findings, per-key TTL (L4); hand-acts, mesh-wants, config candidates (L5); provisions and plans on mesh-provisioner, credential forms incl. "none", ErrNotReady, rule 8 (L6); the builder's build-log, mesh-artifact-sweep, seat holders, disk readings, memberships, the node health report (L7); a change's own failing test ends the level (R4c, issue 1289). The release's new manifest words are read by the running parts since delivery 1 (#132).
Quick vs thorough: thorough throughout (each contract lives here once, held to by catalog checks and grant rows); bent rules and drops are listed in the release plan.
Delivery 2 of design 47's single release (delivery group feat/774-l3-reland: mesh-sdk, mesh-delivery, mesh-catalog, mesh-host, mesh-controller, mesh-tools, hq). Records: ADR 0564 (v47), 0565 (v14), 0570 (v18), 0571 (v35), 0572 (v9).
This member holds the contracts: held modules serve their tools from what runs (L3 re-land, issue 1126); health seats, findings, per-key TTL (L4); hand-acts, mesh-wants, config candidates (L5); provisions and plans on mesh-provisioner, credential forms incl. "none", ErrNotReady, rule 8 (L6); the builder's build-log, mesh-artifact-sweep, seat holders, disk readings, memberships, the node health report (L7); a change's own failing test ends the level (R4c, issue 1289). The release's new manifest words are read by the running parts since delivery 1 (#132).
Quick vs thorough: thorough throughout (each contract lives here once, held to by catalog checks and grant rows); bent rules and drops are listed in the release plan.
Reviewed-by: rev-47@shanks at 2da0de75c3f0087cff9c2f5ef789ca6dc3c59045
After the take-over of placement on 2026-10-29, shanks's runtime stopped serving the folded systemd-resolved (the
node-resolver seat's verbs answer "nothing serves") and novox's the folded nats. Neither has a want: each runs inside
its node's own composition at a build of the old form (Scope.InOwn), and is composed as Carried of the indexer's
manifest. That manifest is the catalogue's, which no build resolved, so it has no bundles (catalogue/build.go: Bundles
are set only by a build's resolution), and the runtime's MESH_TOOL_MODULES and MESH_TOOL_ENV are made from bundles
(catalogue/runtime.go). The controller composed them from the resolved manifest its store kept.
The kind: a module composed as what runs of it (Stub, Carried: held, or folded at an old build) contributes to the
others from its manifest, not from what runs. For a held module with a new build it is the other way round: its new
bundles are served, which were never delivered.
- The quick fix: read the old-form build's resolved manifest for a folded module. One instance; a held module still
hands its new bundles.
- The thorough fix, chosen: compose.ToolsRunning reads what the node's runtime serves as it runs (its process's
MESH_TOOL_MODULES and MESH_TOOL_ENV, each bundle's archive), frombus gives it as Node.RunsTools, and every stubbed
module of the machine's runtime (held or carried) contributes those bundles, whatever its manifest says.
Tests: two rows (folded, held) added to TestCompositionsAreTheDeclarationSplitByModule; no new test function.
novox's mongodb and mssql asked a yes for moving their data on a toolchain move: the running side, read back from the
kept declaration, carries no data flag, and judge.go returned moves-data on the flag before it compared the data
directories and files, so a flag mismatch both raised a false ask and hid a real move. Now moves-data only when a
data item (a directory or file within the data places, or a process of a module with data) changes; a flag-only
difference is neither, with a WARNING in its words. One row changed and one added in TestJudgeMove.
rev-held2: ToolsRunning took a carried module's bundles from the runtime's MESH_TOOL_MODULES alone, and shanks had
already applied the drop of systemd-resolved, so its runs stayed empty and the drop permanent. Now every bundle
archive that runs at its module's BundlePath is a running bundle; one the runtime loads nothing of takes its loads and
words from the module's build (its built bundles, else its build's artifacts, by catalogue.BundleLoads, the rule a
build's resolution keeps, now one function). The runtime process and each archive are matched by their owning module
too, not only by id and path. A row added: the runtime already dropped it.
Quick fix chosen (in askrun.go, the one place every build module's check ask runs): own-test packages already ran first, but the rest ran after their failure (issue 1921). 1921 still holds past them.
NetworkPart.Targets: the hub's machine for "hub", the machine whose tunnel address is each resolver's; empty where the
part is the machine's own. Filled by the node-engine from its tunnel's peers. Test: a row in
TestTheControlRecordsReadTheirWritersValues, read back byte-equal.
NodeHealth.Root: each such account's verdict (healthy, unhealthy with its way to root, unknown while the setuid search
runs), the module and resource declaring it. NodeHealth.Contract: the engine's statement contract, so a reader tells an
engine older than the judging. Test: a row in TestTheControlRecordsReadTheirWritersValues, read back byte-equal.
Deliverynovox/mesh-sdk@2da0de75c3f0 — merged since 2026-10-30T11:01:43Z
Source — source.main moved to novox/mesh-sdk@2b1e148bf5. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-10-30 00:21 (new) → proposed (announced): novox/mesh-sdk#133's head announced
2026-10-30 00:21 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-10-30 11:01 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-sdk@2da0de75c3f0` — **merged** since 2026-10-30T11:01:43Z
**Source** — source.main moved to novox/mesh-sdk@2b1e148bf58e. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `feat/774-l3-reland`: novox/hq@0c450cad258e, novox/mesh-catalog@f3a57dcc56fb, novox/mesh-controller@8b32e04e2f8b, novox/mesh-delivery@8edc83950cea, novox/mesh-host@015334020ad2, novox/mesh-sdk@2da0de75c3f0, novox/mesh-tools@250aa73a5631
**Transitions**
- 2026-10-30 00:21 (new) → proposed (announced): novox/mesh-sdk#133's head announced
- 2026-10-30 00:21 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-10-30 11:01 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: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: not merged. The merge of this pull request into main at 2da0de75c3 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
mesh-delivery: **not merged.** The merge of this pull request into main at 2da0de75c3f0087cff9c2f5ef789ca6dc3c59045 was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.
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.
Delivery 2 of design 47's single release (delivery group feat/774-l3-reland: mesh-sdk, mesh-delivery, mesh-catalog, mesh-host, mesh-controller, mesh-tools, hq). Records: ADR 0564 (v47), 0565 (v14), 0570 (v18), 0571 (v35), 0572 (v9).
This member holds the contracts: held modules serve their tools from what runs (L3 re-land, issue 1126); health seats, findings, per-key TTL (L4); hand-acts, mesh-wants, config candidates (L5); provisions and plans on mesh-provisioner, credential forms incl. "none", ErrNotReady, rule 8 (L6); the builder's build-log, mesh-artifact-sweep, seat holders, disk readings, memberships, the node health report (L7); a change's own failing test ends the level (R4c, issue 1289). The release's new manifest words are read by the running parts since delivery 1 (#132).
Quick vs thorough: thorough throughout (each contract lives here once, held to by catalog checks and grant rows); bent rules and drops are listed in the release plan.
Reviewed-by: rev-47@shanks at
2da0de75c3Delivery
novox/mesh-sdk@2da0de75c3f0— merged since 2026-10-30T11:01:43ZSource — source.main moved to novox/mesh-sdk@2b1e148bf5. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
feat/774-l3-reland: novox/hq@0c450cad25, novox/mesh-catalog@f3a57dcc56, novox/mesh-controller@8b32e04e2f, novox/mesh-delivery@8edc83950c, novox/mesh-host@015334020a, novox/mesh-sdk@2da0de75c3, novox/mesh-tools@250aa73a56Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: not merged. The merge of this pull request into main at
2da0de75c3was declined: the operator, via telegram (user id verified), chose Decline. A new head asks the operator again.