Keep a passed gate's verdict when the first machine's later reports go quiet (hq issue 335) #165

Merged
mesh-admin merged 2 commits from fix/335-a-passed-gate-is-not-judged-again into main 2026-10-08 19:48:04 +00:00
Contributor

hq issue 335: on 2026-10-08 dunst's new build passed its gate on the laptop (healthy 3 times over 2m5s). Twenty-eight minutes later the plan marked it failed at its gate, with the pass's own words as the reason, and put it back.

Cause. advanceOnce ran nextRollout (the check of the first machine's report) on every step, also after the gate had passed.

  • The send to the rest was refused at first, because another walk's build waited for its gate on the workstation.
  • Two minutes later that other walk sent the laptop a new declaration, and the laptop did not report on it.
  • nextRollout then read the laptop's report as not current and waited. At 30 minutes after the first send (planWaitBound) it returned failed: laptop did not report it applied within 30m0s.
  • failFirstSend took the len(g.Failing) == 0 branch into gateFailed. That kept the passed verdict's why (healthy 3 times over 2m5s), recorded the build as failed and put it back.

Fix.

  • nextRollout returns the rest to send once the module's gate has passed. The first machine's later reports are about later sends, not this build.
  • advanceOnce reads the step after a carried module takes over its lead's pass (passedWith), so that pass counts too.
  • A guard in failFirstSend: a module whose gate passed is never put back. With the two changes above it is not reached. It is there so a path added later cannot overturn a verdict. If reached, the plan stops with the reason, the build is not marked failed, and the module is left a stopped rollout, which plans retry sends again.

Tests.

  • TestReplay335 (replay335_test.go) uses only what the controller had before the fix. It fails on main (laptop did not report it applied within 30m0s, and the passed build reaches gateFailed) and passes here. It is registered as R335 in mesh-lab.
  • TestACarriedModuleTakesItsLeadsPassBeforeItsStepIsRead drives advancePlans over a two-module tier. The lead has passed, the carried module has no gate yet, another send has reached the first machine unreported, and the first send is past the 30-minute bound. It expects the rest sent and nothing put back. With only the reorder reverted it fails: the walk stops on "anchor did not report it applied within 30m0s", caught by the guard.

Locally: gofmt and go vet are clean. go test ./cmd/mesh-controller/ against a throwaway PostgreSQL passes (103 s).

Check status. mesh/repo-check fails on TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (internal/broker) until #159 merges. mesh-host main already carries #159's dead-letter grants. This repository's main fails that test the same way.

hq issue 335: on 2026-10-08 dunst's new build passed its gate on the laptop (healthy 3 times over 2m5s). Twenty-eight minutes later the plan marked it failed at its gate, with the pass's own words as the reason, and put it back. **Cause.** `advanceOnce` ran `nextRollout` (the check of the first machine's report) on every step, also after the gate had passed. - The send to the rest was refused at first, because another walk's build waited for its gate on the workstation. - Two minutes later that other walk sent the laptop a new declaration, and the laptop did not report on it. - `nextRollout` then read the laptop's report as not current and waited. At 30 minutes after the first send (`planWaitBound`) it returned `failed: laptop did not report it applied within 30m0s`. - `failFirstSend` took the `len(g.Failing) == 0` branch into `gateFailed`. That kept the passed verdict's why (`healthy 3 times over 2m5s`), recorded the build as failed and put it back. **Fix.** - `nextRollout` returns the rest to send once the module's gate has passed. The first machine's later reports are about later sends, not this build. - `advanceOnce` reads the step after a carried module takes over its lead's pass (`passedWith`), so that pass counts too. - **A guard** in `failFirstSend`: a module whose gate passed is never put back. With the two changes above it is not reached. It is there so a path added later cannot overturn a verdict. If reached, the plan stops with the reason, the build is not marked failed, and the module is left a stopped rollout, which `plans retry` sends again. **Tests.** - `TestReplay335` (`replay335_test.go`) uses only what the controller had before the fix. It fails on main (`laptop did not report it applied within 30m0s`, and the passed build reaches `gateFailed`) and passes here. It is registered as R335 in mesh-lab. - `TestACarriedModuleTakesItsLeadsPassBeforeItsStepIsRead` drives `advancePlans` over a two-module tier. The lead has passed, the carried module has no gate yet, another send has reached the first machine unreported, and the first send is past the 30-minute bound. It expects the rest sent and nothing put back. With only the reorder reverted it fails: the walk stops on "anchor did not report it applied within 30m0s", caught by the guard. Locally: `gofmt` and `go vet` are clean. `go test ./cmd/mesh-controller/` against a throwaway PostgreSQL passes (103 s). **Check status.** `mesh/repo-check` fails on `TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose` (internal/broker) until #159 merges. mesh-host main already carries #159's dead-letter grants. This repository's main fails that test the same way.
Author
Contributor

Delivery novox/mesh-controller@81e5458cbf81 — delivered since 2026-10-08T20:04:04Z

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 3m37s
  • mesh-controller on the rest running it: sent
  • build-agent on ace: passed — healthy 3 times over 3m54s
  • build-agent on the rest running it: sent
  • route-proxy on ace: passed — healthy 3 times over 3m37s
  • route-proxy on the rest running it: sent

Transitions

  • 2026-10-08 19:12 (new) → proposed (announced): novox/mesh-controller#165's head announced
  • 2026-10-08 19:23 proposed → checked (checked): the verdict names this commit
  • 2026-10-08 19:23 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-08 19:48 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 19:48 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 20:04 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@81e5458cbf81` — **delivered** since 2026-10-08T20:04:04Z **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 3m37s - mesh-controller on the rest running it: sent - build-agent on ace: passed — healthy 3 times over 3m54s - build-agent on the rest running it: sent - route-proxy on ace: passed — healthy 3 times over 3m37s - route-proxy on the rest running it: sent **Transitions** - 2026-10-08 19:12 (new) → proposed (announced): novox/mesh-controller#165's head announced - 2026-10-08 19:23 proposed → checked (checked): the verdict names this commit - 2026-10-08 19:23 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-08 19:48 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 19:48 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 20:04 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 becd40be

  • 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: FAIL — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.74s)

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 novox as build-1791483974074966168 (builds --log build-1791483974074966168).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T18:08:48Z 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-08T18:08:48Z

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.048s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	204.081s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.014s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.014s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.114s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.045s
--- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.74s)
    genesis_template_test.go:46: the installer's user list lets the controller publish [$JS.ACK.DEAD_LETTER_NOTICES.controller.> mesh.again.> mesh.events.dead.>], which it does not derive
FAIL
FAIL	github.com/novox/mesh-controller/internal/broker	1.848s
ok  	github.com/novox/mesh-controller/internal/builder	3.093s
ok  	github.com/novox/mesh-controller/internal/catalogue	5.026s
ok  	github.com/novox/mesh-controller/internal/conditions	2.258s
ok  	github.com/novox/mesh-controller/internal/envfile	1.030s
ok  	github.com/novox/mesh-controller/internal/facts	1.022s
ok  	github.com/novox/mesh-controller/internal/identity	5.067s
ok  	github.com/novox/mesh-controller/internal/inventory	90.850s
ok  	github.com/novox/mesh-controller/internal/lease	17.683s
ok  	github.com/novox/mesh-controller/internal/licences	4.629s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.016s
ok  	github.com/novox/mesh-controller/internal/link	46.998s
ok  	github.com/novox/mesh-controller/internal/lint	2.138s
ok  	github.com/novox/mesh-controller/internal/outward	1.061s
ok  	github.com/novox/mesh-controller/internal/overlay	1.030s
ok  	github.com/novox/mesh-controller/internal/secrets	1.459s
ok  	github.com/novox/mesh-controller/internal/store	3.373s
ok  	github.com/novox/mesh-controller/internal/testbus	1.200s
ok  	github.com/novox/mesh-controller/internal/token	1.021s
FAIL
**Merge check** at `becd40be` - `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`: **FAIL** — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.74s) **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 novox as `build-1791483974074966168` (`builds --log build-1791483974074966168`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 51 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-08T18:08:48Z 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-08T18:08:48Z 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.048s ok github.com/novox/mesh-controller/cmd/mesh-controller 204.081s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.014s ok github.com/novox/mesh-controller/examples/route-proxy 1.114s ok github.com/novox/mesh-controller/internal/artifacts 1.045s --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.74s) genesis_template_test.go:46: the installer's user list lets the controller publish [$JS.ACK.DEAD_LETTER_NOTICES.controller.> mesh.again.> mesh.events.dead.>], which it does not derive FAIL FAIL github.com/novox/mesh-controller/internal/broker 1.848s ok github.com/novox/mesh-controller/internal/builder 3.093s ok github.com/novox/mesh-controller/internal/catalogue 5.026s ok github.com/novox/mesh-controller/internal/conditions 2.258s ok github.com/novox/mesh-controller/internal/envfile 1.030s ok github.com/novox/mesh-controller/internal/facts 1.022s ok github.com/novox/mesh-controller/internal/identity 5.067s ok github.com/novox/mesh-controller/internal/inventory 90.850s ok github.com/novox/mesh-controller/internal/lease 17.683s ok github.com/novox/mesh-controller/internal/licences 4.629s ok github.com/novox/mesh-controller/internal/licences/adapters 1.016s ok github.com/novox/mesh-controller/internal/link 46.998s ok github.com/novox/mesh-controller/internal/lint 2.138s ok github.com/novox/mesh-controller/internal/outward 1.061s ok github.com/novox/mesh-controller/internal/overlay 1.030s ok github.com/novox/mesh-controller/internal/secrets 1.459s ok github.com/novox/mesh-controller/internal/store 3.373s ok github.com/novox/mesh-controller/internal/testbus 1.200s ok github.com/novox/mesh-controller/internal/token 1.021s FAIL ```
Author
Contributor

mesh/repo-check is red on TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (internal/broker), and this change does not cause it. The test reads the installer's user list from the mesh-host checkout beside this one. mesh-host main already carries the dead-letter grants of issue 330 (mesh-host ccbfa9b), but the controller code that derives them is still on #159, unmerged. I ran that test locally against mesh-host main on this repository's main (7f65e62), without this change, and it fails the same way. It clears once #159 merges; then a recheck of this head should be green. Every other package passed in the check, including cmd/mesh-controller (204 s, with the store-backed tests).

`mesh/repo-check` is red on `TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose` (internal/broker), and this change does not cause it. The test reads the installer's user list from the mesh-host checkout beside this one. mesh-host main already carries the dead-letter grants of issue 330 (mesh-host ccbfa9b), but the controller code that derives them is still on #159, unmerged. I ran that test locally against mesh-host main on this repository's main (7f65e62), without this change, and it fails the same way. It clears once #159 merges; then a recheck of this head should be green. Every other package passed in the check, including cmd/mesh-controller (204 s, with the store-backed tests).
Author
Contributor

Merge check at c15b79aa

  • 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: FAIL — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.73s)

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 novox as build-1791485335973831758 (builds --log build-1791485335973831758).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T18:28:48Z 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-08T18:28:48Z

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.093s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	216.586s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.014s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.013s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.110s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.046s
--- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.73s)
    genesis_template_test.go:46: the installer's user list lets the controller publish [$JS.ACK.DEAD_LETTER_NOTICES.controller.> mesh.again.> mesh.events.dead.>], which it does not derive
FAIL
FAIL	github.com/novox/mesh-controller/internal/broker	5.342s
ok  	github.com/novox/mesh-controller/internal/builder	10.846s
ok  	github.com/novox/mesh-controller/internal/catalogue	4.651s
ok  	github.com/novox/mesh-controller/internal/conditions	2.198s
ok  	github.com/novox/mesh-controller/internal/envfile	1.026s
ok  	github.com/novox/mesh-controller/internal/facts	1.028s
ok  	github.com/novox/mesh-controller/internal/identity	11.442s
ok  	github.com/novox/mesh-controller/internal/inventory	97.478s
ok  	github.com/novox/mesh-controller/internal/lease	17.685s
ok  	github.com/novox/mesh-controller/internal/licences	10.522s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.012s
ok  	github.com/novox/mesh-controller/internal/link	49.650s
ok  	github.com/novox/mesh-controller/internal/lint	1.978s
ok  	github.com/novox/mesh-controller/internal/outward	1.036s
ok  	github.com/novox/mesh-controller/internal/overlay	1.021s
ok  	github.com/novox/mesh-controller/internal/secrets	1.434s
ok  	github.com/novox/mesh-controller/internal/store	7.256s
ok  	github.com/novox/mesh-controller/internal/testbus	1.178s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
FAIL
**Merge check** at `c15b79aa` - `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`: **FAIL** — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.73s) **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 novox as `build-1791485335973831758` (`builds --log build-1791485335973831758`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 51 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-08T18:28:48Z 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-08T18:28:48Z 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.093s ok github.com/novox/mesh-controller/cmd/mesh-controller 216.586s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.013s ok github.com/novox/mesh-controller/examples/route-proxy 1.110s ok github.com/novox/mesh-controller/internal/artifacts 1.046s --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.73s) genesis_template_test.go:46: the installer's user list lets the controller publish [$JS.ACK.DEAD_LETTER_NOTICES.controller.> mesh.again.> mesh.events.dead.>], which it does not derive FAIL FAIL github.com/novox/mesh-controller/internal/broker 5.342s ok github.com/novox/mesh-controller/internal/builder 10.846s ok github.com/novox/mesh-controller/internal/catalogue 4.651s ok github.com/novox/mesh-controller/internal/conditions 2.198s ok github.com/novox/mesh-controller/internal/envfile 1.026s ok github.com/novox/mesh-controller/internal/facts 1.028s ok github.com/novox/mesh-controller/internal/identity 11.442s ok github.com/novox/mesh-controller/internal/inventory 97.478s ok github.com/novox/mesh-controller/internal/lease 17.685s ok github.com/novox/mesh-controller/internal/licences 10.522s ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s ok github.com/novox/mesh-controller/internal/link 49.650s ok github.com/novox/mesh-controller/internal/lint 1.978s ok github.com/novox/mesh-controller/internal/outward 1.036s ok github.com/novox/mesh-controller/internal/overlay 1.021s ok github.com/novox/mesh-controller/internal/secrets 1.434s ok github.com/novox/mesh-controller/internal/store 7.256s ok github.com/novox/mesh-controller/internal/testbus 1.178s ok github.com/novox/mesh-controller/internal/token 1.017s FAIL ```
jschoubben added 2 commits 2026-10-08 19:11:53 +00:00
A build that passed on its first machine was judged again from that
machine's next reports while its send to the rest waited; another walk's
unreported send there then failed the passed build at the wait's bound
and put it back.
Test that a carried module takes its lead's pass before its step is read (hq issue 335 review)
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
81e5458cbf
Without the reorder the passed build's walk stopped on the first machine's
later silence; the guard that caught it is now said to be one.
jschoubben force-pushed fix/335-a-passed-gate-is-not-judged-again from c15b79aa21 to 81e5458cbf 2026-10-08 19:11:53 +00:00 Compare
Author
Contributor

Merge check at 81e5458c

  • 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-1791486736684589818 (builds --log build-1791486736684589818).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 52 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-08T19:18:42Z 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-08T19:18:42Z

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	162.281s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.011s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.015s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.011s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.114s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.092s
ok  	github.com/novox/mesh-controller/internal/broker	2.569s
ok  	github.com/novox/mesh-controller/internal/builder	1.791s
ok  	github.com/novox/mesh-controller/internal/catalogue	4.135s
ok  	github.com/novox/mesh-controller/internal/conditions	2.185s
ok  	github.com/novox/mesh-controller/internal/envfile	1.070s
ok  	github.com/novox/mesh-controller/internal/facts	1.074s
ok  	github.com/novox/mesh-controller/internal/identity	4.116s
ok  	github.com/novox/mesh-controller/internal/inventory	71.373s
ok  	github.com/novox/mesh-controller/internal/lease	17.735s
ok  	github.com/novox/mesh-controller/internal/licences	3.769s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.103s
ok  	github.com/novox/mesh-controller/internal/link	50.643s
ok  	github.com/novox/mesh-controller/internal/lint	1.976s
ok  	github.com/novox/mesh-controller/internal/outward	1.090s
ok  	github.com/novox/mesh-controller/internal/overlay	1.118s
ok  	github.com/novox/mesh-controller/internal/secrets	1.454s
ok  	github.com/novox/mesh-controller/internal/store	3.302s
ok  	github.com/novox/mesh-controller/internal/testbus	1.245s
ok  	github.com/novox/mesh-controller/internal/token	1.016s
**Merge check** at `81e5458c` - `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-1791486736684589818` (`builds --log build-1791486736684589818`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 52 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-08T19:18:42Z 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-08T19:18:42Z 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 162.281s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.011s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.015s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.011s ok github.com/novox/mesh-controller/examples/route-proxy 1.114s ok github.com/novox/mesh-controller/internal/artifacts 1.092s ok github.com/novox/mesh-controller/internal/broker 2.569s ok github.com/novox/mesh-controller/internal/builder 1.791s ok github.com/novox/mesh-controller/internal/catalogue 4.135s ok github.com/novox/mesh-controller/internal/conditions 2.185s ok github.com/novox/mesh-controller/internal/envfile 1.070s ok github.com/novox/mesh-controller/internal/facts 1.074s ok github.com/novox/mesh-controller/internal/identity 4.116s ok github.com/novox/mesh-controller/internal/inventory 71.373s ok github.com/novox/mesh-controller/internal/lease 17.735s ok github.com/novox/mesh-controller/internal/licences 3.769s ok github.com/novox/mesh-controller/internal/licences/adapters 1.103s ok github.com/novox/mesh-controller/internal/link 50.643s ok github.com/novox/mesh-controller/internal/lint 1.976s ok github.com/novox/mesh-controller/internal/outward 1.090s ok github.com/novox/mesh-controller/internal/overlay 1.118s ok github.com/novox/mesh-controller/internal/secrets 1.454s ok github.com/novox/mesh-controller/internal/store 3.302s ok github.com/novox/mesh-controller/internal/testbus 1.245s ok github.com/novox/mesh-controller/internal/token 1.016s ```
mesh-admin merged commit 8170fc58a3 into main 2026-10-08 19:48:04 +00:00
mesh-admin deleted branch fix/335-a-passed-gate-is-not-judged-again 2026-10-08 19:48:04 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#165