Design 47's last milestones: the keeper, self-check, healers, hand-acts, provisioner, vault, artifact sweep, disk readings, credential forms (issues 774, 1952, 1953, 1954, 1955) #560

Open
mesh-tools wants to merge 90 commits from feat/774-l3-reland into main
Member

Delivery 2 of design 47's single release (group feat/774-l3-reland). New modules mesh-conditions, mesh-self-check (probes setting, default D13 + D-fill), mesh-healers, mesh-hand-acts; mesh-config's declared/compare/take-over/hand-back; mesh-provisioner holds provisions and plans; the vault, gitea, keycloak, postgres, route-adapter read plans; the client keeps filling secrets via the vault and falls back to the controller's assignments until the lease write; artifact-store-tools holds mesh-artifact-sweep; disk-load keeps readings; restic writes restic.good; every offer declares its credential form (checks/credentialform). 45 modules move; record modules will each ask the operator. All 22 checks pass. Main (#561, the forge's SSH_MAX_STARTUPS) merged in at 35b4509c.

Reviewed-by: rev-47@shanks at 35b4509c0a

Delivery 2 of design 47's single release (group feat/774-l3-reland). New modules mesh-conditions, mesh-self-check (probes setting, default D13 + D-fill), mesh-healers, mesh-hand-acts; mesh-config's declared/compare/take-over/hand-back; mesh-provisioner holds provisions and plans; the vault, gitea, keycloak, postgres, route-adapter read plans; the client keeps filling secrets via the vault and falls back to the controller's assignments until the lease write; artifact-store-tools holds mesh-artifact-sweep; disk-load keeps readings; restic writes restic.good; every offer declares its credential form (checks/credentialform). 45 modules move; record modules will each ask the operator. All 22 checks pass. Main (#561, the forge's SSH_MAX_STARTUPS) merged in at 35b4509c. Reviewed-by: rev-47@shanks at 35b4509c0a15f7900209f8260e4801c698efe204
mesh-tools added 89 commits 2026-10-30 00:21:39 +00:00
This reverts commit 030f9ee4e7, reversing
changes made to 1555241393.
The probes whose facts are on the bus run with their assertions unchanged (D6, D7, D15, DW, H-bus); the rest answer deferred, naming what they lack, never a pass. Findings go to its own bucket for the condition keeper; each run is kept a week and said as checked. The finding layout is a copy of mesh-sdk's S3 until that lands.
Pins the group's mesh-sdk head 69fcb6c. A seat verb's run="true" is taken as the seat schema gives it.
Until the lease write each act is written to would, kept a week by its bucket's age, so a would-act counts for no budget or brake. Acts begin by a create in attempts; H3 asks the grants part's assert; the brake and S15 are its own findings.
A settle that ended while they were down is judged at once. The README says the week-long bucket age is the deleter of would and attempts for this release.
Acts are kept 400 days under the runtime-proven caller and said as act-recorded; a warrant is read from the router's own record and recorded once per ask; hand-acts answers over both logs. The act layout is a copy of mesh-sdk's until L5-S2 lands.
The warrants stay a bucket and no longer age, so a warrant is recorded once; one whose act was lost is written again from the router's record. hand-acts says the log's fill against its cap.
stdio.Emit put them on the module's subject, which no consumer of a seat's event hears. The manifests no longer list a seat's events as the module's own, which the SDK now refuses. mesh-hand-acts takes its act layout and names from mesh-sdk's handacts, and counts a repeated cause by its Repair rule.
A settle and the fortnight end are keys of wakes whose time to live is the wait, heard on expiry; attempts and would keep each key a week by its own time to live. Rearm stays only for a settle that expired while no instance watched. Pins mesh-sdk bc6c8a6.
compare also resolves every placed module's values on every node both ways, as ADR 0565's insight of 2026-10-29 asks after #558. After the take-over the predefined list and pull requests' config come from the indexer and pull-declares is refused; a hand-back returns to the mirrors until the lease write. From the lease write a trusted value is set only on an Approve. Acts are recorded through mesh-hand-acts. Pins mesh-sdk 2e5cc4f.
The layout and its keys are unchanged, so no value moves.
ADR 0565 §11's catalog check: every recorder records through mesh-hand-acts. The fallbacks are listed with why, and the list only shrinks.
The seat holds provisions and plans alone (ADR 0570 §1-§3, §5): a node is composed at its wanted builds and its newest, so a key ahead of its want is never retiring; a key no build needs is retiring with one ask, and the warrant goes into the key for its provider. The registry's placement kinds name plans; needs is emptied at start. Pins mesh-sdk 66ff33d.
A provider that writes no outcome leaves its keys asked (ADR 0570 clause 3), so a provider that fails is never hidden.
Failed is failed with the have's words; anything else stays asked, saying what it waits for. Providers that make a credential per consumer keep their bound entries.
A provider declaring bound is judged by its entries, any other by its own have, and only once every provision it depends on, its secret-<provision> first, is provided. The credential is the vault's own provision. One integration test runs the holder on a real bus over mesh-sdk's in-memory mesh: a want composes the key, the outcomes provide it, leaving the node asks. Pins mesh-sdk 6b8c694.
A login per consumer is pair (postgres, keycloak's client, gitea's npm registry, the vault's secret); an offer whose consumers present none is none (gitea's git and forge account, route-adapter's route).
Each outcome names the value by the vault's own name and generation, never the value; held is provided, issued or given waits, an entry goes only on a retiring key's Approve. The vault no longer reads the controller's assignments, so it leaves the list of their readers. Pins mesh-sdk 6b8c694.
The mesh's own addresses come from placement (each node's private address and its endpoint); who holds
node-intrusion-prevention, from seat-holders; who is heard, from the watchman's presence. Each heard holder is asked
seat:node-intrusion-prevention.banned@<node>, all at once. The finding is the controller's: machine.<node>.bans-the-mesh,
urgent, the same summary and words. A heard holder that does not answer makes the probe fail to run, never pass.
Rows in TestTheBusProbes; the manifest reads and invokes what the code does.
ADR 0570 clauses 1, 2 and 6 move the plan to mesh-provisioner_plans, fold needs into the seat and give
the node-engine the secret's fill, so the client no longer holds a value (issue 1954, V3).
The agent account a machine names comes from placement; the engine's verdicts on it from its health report
(mesh-host.health, NodeHealth.Root and Contract); whether that verdict is on now from the watchman's presence, since
the report is written on a change only. The judgement is the controller's: no report, not heard, an engine older than
the judging, no verdict, or any verdict not healthy is not confined; a verdict waiting for the setuid search is quiet
for twelve hours from when this self-check first saw it waiting. machine.<node>.agent-root, urgent, the controller's
words. Rows in TestTheBusProbes; pins mesh-sdk f3677eb.
Its registry row and test rows are already in f7f02abb; this is the probe they call. Each KV_<module>_<name> and
LOG_<module>_<name> stream is said filling at three quarters of its max_bytes, and kept while a finding is written
until under seven tenths. One read of every stream, so the bus module not answering is the probe failing to run, which
clears nothing; bucket-or-log-unread is not raised.
ADR 0570 clauses 2 and 5: gitea, keycloak, postgres and route-adapter read mesh-provisioner.plans and
.provisions instead of the controller's assignments. postgres hands the database to a keeper and drops the
login; keycloak replaces the client's secret and keeps the client, so the data stays (issue 1954, V4).
The SDK now reads a module's `reads` through the runtime, so busread.go's own copy goes, and the
manifest is held to frombus.StatesReads (issue 1954).
After a restart the forge-account provider returned a plain error, which the helper writes as failed
with its values cleared, so every consumer lost its forge entry until the keys loaded. provider.ErrNotReady
keeps the entry serving, in waits (issue 1954).
Review round 3 (issue 1954): the node-engine of today writes ${secret:} as given and the new one fills only
provision keys, so the client fills secrets this release; plans exist only for modules with a want, so a
module without a seat plan is read from the controller's assignment and never leaves for want of one, and
the holder composes held modules at the build they run; the SDK's provider lets go only on "yes".
# Conflicts:
#	modules/mesh-build-image/go.mod
#	modules/mesh-build-image/go.sum
#	modules/mesh-build-node/go.mod
#	modules/mesh-build-node/go.sum
Pin mesh-sdk 2da0de7, the release's final head, in the modules the release changes (issue 774)
mesh/delivery ready: it is merged on the Approve
mesh/check checking 8e402c82bfb2 on 12c2574c9d54 | novox/mesh-catalog#560 in group feat/774-l3-reland
mesh/delivery-group group feat/774-l3-reland checking: the checker's verdict is out of date: novox/mesh-catalog@8e402c82bfb2 was judged on trunk f61265f7a0f3, …
8e402c82bf
Author
Member

Delivery novox/mesh-catalog@35b4509c0a15 — ready since 2026-10-30T00:55:13Z

Group feat/774-l3-reland: novox/hq@0c450cad25, novox/mesh-catalog@35b4509c0a, novox/mesh-controller@79f44386d2, novox/mesh-delivery@8edc83950c, novox/mesh-host@015334020a, novox/mesh-sdk@2da0de75c3, novox/mesh-tools@250aa73a56

Transitions

  • 2026-10-30 00:55 (new) → proposed (announced): novox/mesh-catalog#560's head announced
  • 2026-10-30 00:55 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)

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-catalog@35b4509c0a15` — **ready** since 2026-10-30T00:55:13Z **Group** `feat/774-l3-reland`: novox/hq@0c450cad258e, novox/mesh-catalog@35b4509c0a15, novox/mesh-controller@79f44386d24d, novox/mesh-delivery@8edc83950cea, novox/mesh-host@015334020ad2, novox/mesh-sdk@2da0de75c3f0, novox/mesh-tools@250aa73a5631 **Transitions** - 2026-10-30 00:55 (new) → proposed (announced): novox/mesh-catalog#560's head announced - 2026-10-30 00:55 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) The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
jschoubben added 1 commit 2026-10-30 00:55:07 +00:00
Merge remote-tracking branch 'origin/main' into gitea-merge2
mesh/delivery ready: it is merged on the Approve
mesh/check failed: shanks: novox/mesh-catalog#560: modules/mesh-build-image/mesh-build-image: a compiled program added in 17588fee10f8 and removed lat…
mesh/delivery-group group feat/774-l3-reland rejected: composed together: the checker's verdict at the members' heads (fc2ace3a8f88): shanks
35b4509c0a
Some required checks failed
mesh/delivery ready: it is merged on the Approve
mesh/check failed: shanks: novox/mesh-catalog#560: modules/mesh-build-image/mesh-build-image: a compiled program added in 17588fee10f8 and removed lat…
mesh/delivery-group group feat/774-l3-reland rejected: composed together: the checker's verdict at the members' heads (fc2ace3a8f88): shanks
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/774-l3-reland:feat/774-l3-reland
git checkout feat/774-l3-reland
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#560