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.
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…
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.
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`.
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
```
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.
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:
show [--history], a set answering +/~/- per path and refusing a removal without--replace; history insettings_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).plan <node> --diff;pushwith no machine refused unless--all.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 akeepinghook on sendRound.Followed main: the verb's push with no machine stays
--behindand still needswhy; a whole-mesh push still says so first and still leaves gate-waiting and bus machines; main'ssayHeldkept (the PR's renamedsayDataHeld).Verbs:
plantakesdiff,settingstakesreplaceandhistory,pushtakesmovebeside a machine — each refused where it cannot take effect;--allis withheld from the verb (accounted for). Noreplacesadded: none of these stands in for a shell command.merge-check.sh passes locally against PostgreSQL, with -race.
126f6e0c5dto4499e85476Delivery
novox/mesh-controller@4499e854768e— delivered since 2026-10-08T00:21:47ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Group
feat/no-change-takes-effect-unseen, in order: novox/hq@e3caa4e1d4 → novox/mesh-controller@4499e85476Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
4499e854mesh/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 passedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791416691959933708(builds --log build-1791416691959933708).