No change to a machine takes effect unseen (hq ADR 0217) #50

Merged
mesh-admin merged 1 commits from feat/no-change-takes-effect-unseen into main 2026-10-08 00:05:59 +00:00
Owner

hq ADR 0217, to-be 44 (hq #97, stacked on hq #94). Same branch name as hq #97: one delivery group.

Rebased onto main as one commit and fitted to it:

  • settings: show [--history], a set answering +/~/- per path and refusing a removal without --replace; history in settings_history, now written in the same transaction as the set or clear (mesh-wide too). Migration 0078 (main 0077; 0079 is the tunnel-join work's).
  • push: a summary of each send kept (no file content); plan <node> --diff; push with no machine refused unless --all.
  • data moves: a machine whose running container's mount would get another host directory is held until push <node> --move <module>; held before main's "what it recreates" is said, so only machines actually sent are said and counted as told; a named push's cascade (main's flushBehind) holds the same way through a keeping hook on sendRound.

Followed main: the verb's push with no machine stays --behind and still needs why; a whole-mesh push still says so first and still leaves gate-waiting and bus machines; main's sayHeld kept (the PR's renamed sayDataHeld).

Verbs: plan takes diff, settings takes replace and history, push takes move beside a machine — each refused where it cannot take effect; --all is withheld from the verb (accounted for). No replaces added: none of these stands in for a shell command.

merge-check.sh passes locally against PostgreSQL, with -race.

hq ADR 0217, to-be 44 (hq #97, stacked on hq #94). Same branch name as hq #97: one delivery group. Rebased onto main as one commit and fitted to it: - **settings**: `show [--history]`, a set answering +/~/- per path and refusing a removal without `--replace`; history in `settings_history`, now written in the same transaction as the set or clear (mesh-wide too). Migration **0078** (main 0077; 0079 is the tunnel-join work's). - **push**: a summary of each send kept (no file content); `plan <node> --diff`; `push` with no machine refused unless `--all`. - **data moves**: a machine whose running container's mount would get another host directory is held until `push <node> --move <module>`; held before main's "what it recreates" is said, so only machines actually sent are said and counted as told; a named push's cascade (main's flushBehind) holds the same way through a `keeping` hook on sendRound. Followed main: the verb's push with no machine stays `--behind` and still needs `why`; a whole-mesh push still says so first and still leaves gate-waiting and bus machines; main's `sayHeld` kept (the PR's renamed `sayDataHeld`). Verbs: `plan` takes `diff`, `settings` takes `replace` and `history`, `push` takes `move` beside a machine — each refused where it cannot take effect; `--all` is withheld from the verb (accounted for). No `replaces` added: none of these stands in for a shell command. merge-check.sh passes locally against PostgreSQL, with -race.
jschoubben added 1 commit 2026-10-07 23:44:46 +00:00
No change to a machine takes effect unseen (hq ADR 0217, to-be 44)
mesh/delivery delivered
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery-group group feat/no-change-takes-effect-unseen merged: every member is merged
4499e85476
Two incidents had one shape: a change took effect that nobody saw first (hq issues 241, 304).
Three guards, each silent when nothing is at stake:

- settings show [--history], and a set that answers each key it adds, changes and removes, and
  refuses a removal unless --replace; the replaced or cleared layer is kept in settings_history,
  in the same transaction as the write (migration 0078).
- every send keeps a summary of what it sent (no file content), plan <node> --diff compares with
  it, and push with no machine is refused unless --all.
- a push that would give a running container's mount another host directory holds that machine,
  naming the module, mount and both directories, until push <node> --move <module>; a named push's
  cascade is held the same way.

Rebased onto main and fitted to it: the hold runs before the push says what it recreates, a whole
push still says so first and leaves machines waiting for a gate, the verb's push with no machine is
still --behind and a push still needs why. The verbs take plan diff, settings replace and history,
and push move beside a machine, each refused where it cannot take effect.
jschoubben force-pushed feat/no-change-takes-effect-unseen from 126f6e0c5d to 4499e85476 2026-10-07 23:44:46 +00:00 Compare
Contributor

Delivery novox/mesh-controller@4499e854768e — delivered since 2026-10-08T00:21:47Z

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Group feat/no-change-takes-effect-unseen, in order: novox/hq@e3caa4e1d4 → novox/mesh-controller@4499e85476

  • composed together: pass — every machine composes with the change as it did without (4 of 4 compose)

Machines

  • mesh-controller on novox: passed — healthy 3 times over 3m42s
  • mesh-controller on the rest running it: sent
  • build-agent on ace: passed — healthy 3 times over 3m34s
  • build-agent on the rest running it: sent
  • route-proxy on ace: passed — healthy 3 times over 3m32s
  • route-proxy on the rest running it: sent

Transitions

  • 2026-10-07 23:44 (new) → proposed (announced): novox/mesh-controller#50's head announced
  • 2026-10-07 23:55 proposed → checked (checked): the verdict names this commit
  • 2026-10-07 23:55 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-08 00:06 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-08 00:06 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path
  • 2026-10-08 00:21 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@4499e854768e` — **delivered** since 2026-10-08T00:21:47Z **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves **Group** `feat/no-change-takes-effect-unseen`, in order: novox/hq@e3caa4e1d433 → novox/mesh-controller@4499e854768e - composed together: pass — every machine composes with the change as it did without (4 of 4 compose) **Machines** - mesh-controller on novox: passed — healthy 3 times over 3m42s - mesh-controller on the rest running it: sent - build-agent on ace: passed — healthy 3 times over 3m34s - build-agent on the rest running it: sent - route-proxy on ace: passed — healthy 3 times over 3m32s - route-proxy on the rest running it: sent **Transitions** - 2026-10-07 23:44 (new) → proposed (announced): novox/mesh-controller#50's head announced - 2026-10-07 23:55 proposed → checked (checked): the verdict names this commit - 2026-10-07 23:55 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-08 00:06 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-08 00:06 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path - 2026-10-08 00:21 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Contributor

Merge check at 4499e854

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Run by the build seat on ace as build-1791416691959933708 (builds --log build-1791416691959933708).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T23:44:12Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T23:44:12Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.032s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	415.503s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.012s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.017s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.012s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.101s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.027s
ok  	github.com/novox/mesh-controller/internal/broker	2.398s
ok  	github.com/novox/mesh-controller/internal/builder	1.352s
ok  	github.com/novox/mesh-controller/internal/catalogue	3.740s
ok  	github.com/novox/mesh-controller/internal/conditions	2.019s
ok  	github.com/novox/mesh-controller/internal/envfile	1.063s
ok  	github.com/novox/mesh-controller/internal/facts	1.111s
ok  	github.com/novox/mesh-controller/internal/identity	39.173s
ok  	github.com/novox/mesh-controller/internal/inventory	250.155s
ok  	github.com/novox/mesh-controller/internal/lease	17.740s
ok  	github.com/novox/mesh-controller/internal/licences	36.829s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.059s
ok  	github.com/novox/mesh-controller/internal/link	77.877s
ok  	github.com/novox/mesh-controller/internal/lint	1.843s
ok  	github.com/novox/mesh-controller/internal/outward	1.129s
ok  	github.com/novox/mesh-controller/internal/overlay	1.120s
ok  	github.com/novox/mesh-controller/internal/secrets	1.443s
ok  	github.com/novox/mesh-controller/internal/store	9.992s
ok  	github.com/novox/mesh-controller/internal/testbus	1.267s
ok  	github.com/novox/mesh-controller/internal/token	1.015s
**Merge check** at `4499e854` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves Run by the build seat on ace as `build-1791416691959933708` (`builds --log build-1791416691959933708`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T23:44:12Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-07T23:44:12Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.032s ok github.com/novox/mesh-controller/cmd/mesh-controller 415.503s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.017s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s ok github.com/novox/mesh-controller/examples/route-proxy 1.101s ok github.com/novox/mesh-controller/internal/artifacts 1.027s ok github.com/novox/mesh-controller/internal/broker 2.398s ok github.com/novox/mesh-controller/internal/builder 1.352s ok github.com/novox/mesh-controller/internal/catalogue 3.740s ok github.com/novox/mesh-controller/internal/conditions 2.019s ok github.com/novox/mesh-controller/internal/envfile 1.063s ok github.com/novox/mesh-controller/internal/facts 1.111s ok github.com/novox/mesh-controller/internal/identity 39.173s ok github.com/novox/mesh-controller/internal/inventory 250.155s ok github.com/novox/mesh-controller/internal/lease 17.740s ok github.com/novox/mesh-controller/internal/licences 36.829s ok github.com/novox/mesh-controller/internal/licences/adapters 1.059s ok github.com/novox/mesh-controller/internal/link 77.877s ok github.com/novox/mesh-controller/internal/lint 1.843s ok github.com/novox/mesh-controller/internal/outward 1.129s ok github.com/novox/mesh-controller/internal/overlay 1.120s ok github.com/novox/mesh-controller/internal/secrets 1.443s ok github.com/novox/mesh-controller/internal/store 9.992s ok github.com/novox/mesh-controller/internal/testbus 1.267s ok github.com/novox/mesh-controller/internal/token 1.015s ```
mesh-admin merged commit 174e06ed08 into main 2026-10-08 00:05:59 +00:00
mesh-admin deleted branch feat/no-change-takes-effect-unseen 2026-10-08 00:06:00 +00:00
This repo is archived. You cannot comment on pull requests.