Record a push that only moves recorded builds as the person's word, not a repair (hq issue 301) #126

Merged
mesh-admin merged 1 commits from fix/a-push-of-recorded-builds-is-no-repair into main 2026-10-07 22:26:26 +00:00
Contributor

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-admin added 1 commit 2026-10-07 22:16:36 +00:00
Record a push that only moves recorded builds as the person's word, not a repair (hq issue 301)
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 delivered
e92a3fe237
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.
Author
Contributor

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.

<!-- 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`.
Author
Contributor

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
**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 ```
mesh-admin merged commit 5ddc59cd32 into main 2026-10-07 22:26:26 +00:00
mesh-admin deleted branch fix/a-push-of-recorded-builds-is-no-repair 2026-10-07 22:26:26 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#126