novox/hq issue 301: on 2026-10-07 S15 raised mesh.hand-acts.{split-dns,words,uplink-verbs}.healer-wanted for ten pushes that were the operator's approved rollouts of builds whose upgrade policy is record (resolver, FortiClient adapter, network managers, packet filter, mail). ADR 0242: a recorded build moves only by a person's push, so that push is the word the policy asks for, never a repair.
What changes
A push naming one machine reads, before it is recorded, what it carries (recordedPush / recordedPushOf, recorded_push.go): it is a push of recorded builds when the machine's last send is known, its last report is no failure or refusal, it moves at least one build, and every module it moves records rather than rolls out (a held new build, or a recorded module's first build on a newly assigned machine). Read from the send, never from a word the person gives (issue 292).
The hand act carries kind: recorded-builds and carried (module from -> to). The table of verbs lists push as a person's decision for that kind only (DecidedWhen); S15 never counts it; hand-acts prints it. Any other push still counts.
The ten acts of 2026-10-07, recorded before a push said its kind, are named by id with what each carried (recordedBefore), so the three open warnings clear on the next watchdog tick by observation. mesh.hand-acts.push.healer-wanted (settings pushes, a holder's assignment) is untouched and stays open.
Checked
Replay R301 TestReplay301APersonsPushOfAHeldRecordedBuildIsNoRepair (written only with what the controller had before; registered in mesh-lab): proved — fails on main ("split-dns was repaired by hand 2 times in 14 days"), passes here.
TestAPushIsOfRecordedBuildsOnlyWhenEveryBuildItMovesWasHeldForAPersonsWord, TestThePushesOfRecordedBuildsOf20261007WantNoHealer (the live log's ten acts).
sh merge-check.sh passes locally (race detector, throwaway PostgreSQL 17).
novox/hq issue 301: on 2026-10-07 S15 raised `mesh.hand-acts.{split-dns,words,uplink-verbs}.healer-wanted` for ten pushes that were the operator's approved rollouts of builds whose upgrade policy is `record` (resolver, FortiClient adapter, network managers, packet filter, mail). ADR 0242: a recorded build moves only by a person's push, so that push is the word the policy asks for, never a repair.
**What changes**
- A push naming one machine reads, before it is recorded, what it carries (`recordedPush` / `recordedPushOf`, recorded_push.go): it is a push of recorded builds when the machine's last send is known, its last report is no failure or refusal, it moves at least one build, and every module it moves records rather than rolls out (a held new build, or a recorded module's first build on a newly assigned machine). Read from the send, never from a word the person gives (issue 292).
- The hand act carries `kind: recorded-builds` and `carried` (module from -> to). The table of verbs lists `push` as a person's decision for that kind only (`DecidedWhen`); S15 never counts it; `hand-acts` prints it. Any other push still counts.
- The ten acts of 2026-10-07, recorded before a push said its kind, are named by id with what each carried (`recordedBefore`), so the three open warnings clear on the next watchdog tick by observation. `mesh.hand-acts.push.healer-wanted` (settings pushes, a holder's assignment) is untouched and stays open.
**Checked**
- Replay R301 `TestReplay301APersonsPushOfAHeldRecordedBuildIsNoRepair` (written only with what the controller had before; registered in mesh-lab): proved — fails on main ("split-dns was repaired by hand 2 times in 14 days"), passes here.
- `TestAPushIsOfRecordedBuildsOnlyWhenEveryBuildItMovesWasHeldForAPersonsWord`, `TestThePushesOfRecordedBuildsOf20261007WantNoHealer` (the live log's ten acts).
- `sh merge-check.sh` passes locally (race detector, throwaway PostgreSQL 17).
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…
A recorded build moves only by a person's push (ADR 0242), so that push is
the word its upgrade policy asks for; S15 counted it as a repair and wanted a
healer for split-dns, words and uplink-verbs. The push now reads what it
carries before it is recorded and says so in its kind, and the ten pushes of
2026-10-07 are named so their three warnings clear on the next tick.
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
Machines
mesh-controller on novox: passed — healthy 3 times over 3m40s
mesh-controller on the rest running it: sent
build-agent on ace: passed — healthy 3 times over 5m1s
build-agent on the rest running it: sent
route-proxy on ace: passed — healthy 3 times over 3m35s
route-proxy on the rest running it: sent
Transitions
2026-10-07 22:17 (new) → proposed (announced): novox/mesh-controller#126's head announced
2026-10-07 22:22 proposed → checked (checked): the verdict names this commit
2026-10-07 22:22 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-07 22:26 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-07 22:26 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-07 22:42 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@e92a3fe237f5` — **delivered** since 2026-10-07T22:42:44Z
**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
**Machines**
- mesh-controller on novox: passed — healthy 3 times over 3m40s
- mesh-controller on the rest running it: sent
- build-agent on ace: passed — healthy 3 times over 5m1s
- build-agent on the rest running it: sent
- route-proxy on ace: passed — healthy 3 times over 3m35s
- route-proxy on the rest running it: sent
**Transitions**
- 2026-10-07 22:17 (new) → proposed (announced): novox/mesh-controller#126's head announced
- 2026-10-07 22:22 proposed → checked (checked): the verdict names this commit
- 2026-10-07 22:22 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-07 22:26 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-07 22:26 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-07 22:42 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 g14 as build-1791411420236328518 (builds --log build-1791411420236328518).
--- 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-07T22:16:03Z 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-07T22:16:03Z
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.036s
ok github.com/novox/mesh-controller/cmd/mesh-controller 192.573s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/route-proxy 1.151s
ok github.com/novox/mesh-controller/internal/artifacts 1.037s
ok github.com/novox/mesh-controller/internal/broker 2.330s
ok github.com/novox/mesh-controller/internal/builder 1.243s
ok github.com/novox/mesh-controller/internal/catalogue 3.759s
ok github.com/novox/mesh-controller/internal/conditions 1.962s
ok github.com/novox/mesh-controller/internal/envfile 1.025s
ok github.com/novox/mesh-controller/internal/facts 1.028s
ok github.com/novox/mesh-controller/internal/identity 6.070s
ok github.com/novox/mesh-controller/internal/inventory 93.284s
ok github.com/novox/mesh-controller/internal/lease 17.693s
ok github.com/novox/mesh-controller/internal/licences 5.263s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s
ok github.com/novox/mesh-controller/internal/link 48.241s
ok github.com/novox/mesh-controller/internal/lint 1.712s
ok github.com/novox/mesh-controller/internal/outward 1.032s
ok github.com/novox/mesh-controller/internal/overlay 1.023s
ok github.com/novox/mesh-controller/internal/secrets 1.381s
ok github.com/novox/mesh-controller/internal/store 3.866s
ok github.com/novox/mesh-controller/internal/testbus 1.167s
ok github.com/novox/mesh-controller/internal/token 1.014s
**Merge check** at `e92a3fe2`
- `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 g14 as `build-1791411420236328518` (`builds --log build-1791411420236328518`).
```
--- 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-07T22:16:03Z 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-07T22:16:03Z
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.036s
ok github.com/novox/mesh-controller/cmd/mesh-controller 192.573s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/route-proxy 1.151s
ok github.com/novox/mesh-controller/internal/artifacts 1.037s
ok github.com/novox/mesh-controller/internal/broker 2.330s
ok github.com/novox/mesh-controller/internal/builder 1.243s
ok github.com/novox/mesh-controller/internal/catalogue 3.759s
ok github.com/novox/mesh-controller/internal/conditions 1.962s
ok github.com/novox/mesh-controller/internal/envfile 1.025s
ok github.com/novox/mesh-controller/internal/facts 1.028s
ok github.com/novox/mesh-controller/internal/identity 6.070s
ok github.com/novox/mesh-controller/internal/inventory 93.284s
ok github.com/novox/mesh-controller/internal/lease 17.693s
ok github.com/novox/mesh-controller/internal/licences 5.263s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s
ok github.com/novox/mesh-controller/internal/link 48.241s
ok github.com/novox/mesh-controller/internal/lint 1.712s
ok github.com/novox/mesh-controller/internal/outward 1.032s
ok github.com/novox/mesh-controller/internal/overlay 1.023s
ok github.com/novox/mesh-controller/internal/secrets 1.381s
ok github.com/novox/mesh-controller/internal/store 3.866s
ok github.com/novox/mesh-controller/internal/testbus 1.167s
ok github.com/novox/mesh-controller/internal/token 1.014s
```
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.
novox/hq issue 301: on 2026-10-07 S15 raised
mesh.hand-acts.{split-dns,words,uplink-verbs}.healer-wantedfor ten pushes that were the operator's approved rollouts of builds whose upgrade policy isrecord(resolver, FortiClient adapter, network managers, packet filter, mail). ADR 0242: a recorded build moves only by a person's push, so that push is the word the policy asks for, never a repair.What changes
recordedPush/recordedPushOf, recorded_push.go): it is a push of recorded builds when the machine's last send is known, its last report is no failure or refusal, it moves at least one build, and every module it moves records rather than rolls out (a held new build, or a recorded module's first build on a newly assigned machine). Read from the send, never from a word the person gives (issue 292).kind: recorded-buildsandcarried(module from -> to). The table of verbs listspushas a person's decision for that kind only (DecidedWhen); S15 never counts it;hand-actsprints it. Any other push still counts.recordedBefore), so the three open warnings clear on the next watchdog tick by observation.mesh.hand-acts.push.healer-wanted(settings pushes, a holder's assignment) is untouched and stays open.Checked
TestReplay301APersonsPushOfAHeldRecordedBuildIsNoRepair(written only with what the controller had before; registered in mesh-lab): proved — fails on main ("split-dns was repaired by hand 2 times in 14 days"), passes here.TestAPushIsOfRecordedBuildsOnlyWhenEveryBuildItMovesWasHeldForAPersonsWord,TestThePushesOfRecordedBuildsOf20261007WantNoHealer(the live log's ten acts).sh merge-check.shpasses locally (race detector, throwaway PostgreSQL 17).Delivery
novox/mesh-controller@e92a3fe237f5— delivered since 2026-10-07T22:42:44ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
e92a3fe2mesh/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 g14 as
build-1791411420236328518(builds --log build-1791411420236328518).