Send a merge's builds to every machine at once, with no first-machine gate (hq ADR 0360) #332

Merged
mesh-admin merged 4 commits from feat/lean-rollout into main 2026-10-14 17:53:35 +00:00
Contributor

Implements novox/hq ADR 0360 (proposed, needs the operator's Approve): the operator's decision of 2026-10-14 for the leanest rollout.

  • Merge walk: every rolled-out module is sent to every machine running it in one send; no first machine, no gate, no one-at-a-time for the node-engine or resolver (release_plan.go: policy treated as together unless gateFirstMachine or the module already has a first send from a walk begun before this change).
  • Tiers: built-by orders nothing and gates nothing (tiersOf, gates, hasCycle); stands-on, declared, worker-of and group order still order. A controller merge with build-agent and route-proxy is now two tiers: mesh-controller,route-proxy | build-agent.
  • Walk end: after its last tier a walk waits only for every machine sent to report on its send, or ApplySilentAfter; it names failed/refused and silent machines (walkReports). apply-failing raises the condition. A walk that moved the controller then carries the bus's user list (ADR 0236 §34, formerly on the gate's pass).
  • Backlog walk: no first machine; every machine heard from in one step, passed on its applied report, failed (nothing put back) on a failed/refused one.
  • The gate's code stays behind one switch, gateFirstMachine (off), for walks begun before; its tests turn it on with withTheGate(t). The node-engine witness and its conditions are untouched.

Tests: new lean_walk_test.go (walk end on reports; backlog walk at once, failure named with nothing put back, silent machine, kept send not made again) and TestABuildRollsToEveryMachineAtOnceWithNoGate. Changed to the new tiering: planner_rules_test, planner_records_test, release_plan_test, worker_order_test, issue648_test (built-by no longer waits). Gate-path tests now call withTheGate(t). None deleted; isBaseOf removed as unused.

Implements novox/hq ADR 0360 (proposed, needs the operator's Approve): the operator's decision of 2026-10-14 for the leanest rollout. - **Merge walk**: every rolled-out module is sent to every machine running it in one send; no first machine, no gate, no one-at-a-time for the node-engine or resolver (`release_plan.go`: policy treated as together unless `gateFirstMachine` or the module already has a first send from a walk begun before this change). - **Tiers**: built-by orders nothing and gates nothing (`tiersOf`, `gates`, `hasCycle`); stands-on, declared, worker-of and group order still order. A controller merge with build-agent and route-proxy is now two tiers: `mesh-controller,route-proxy | build-agent`. - **Walk end**: after its last tier a walk waits only for every machine sent to report on its send, or ApplySilentAfter; it names failed/refused and silent machines (`walkReports`). apply-failing raises the condition. A walk that moved the controller then carries the bus's user list (ADR 0236 §34, formerly on the gate's pass). - **Backlog walk**: no first machine; every machine heard from in one step, passed on its applied report, failed (nothing put back) on a failed/refused one. - **The gate's code** stays behind one switch, `gateFirstMachine` (off), for walks begun before; its tests turn it on with `withTheGate(t)`. The node-engine witness and its conditions are untouched. Tests: new `lean_walk_test.go` (walk end on reports; backlog walk at once, failure named with nothing put back, silent machine, kept send not made again) and `TestABuildRollsToEveryMachineAtOnceWithNoGate`. Changed to the new tiering: planner_rules_test, planner_records_test, release_plan_test, worker_order_test, issue648_test (built-by no longer waits). Gate-path tests now call `withTheGate(t)`. None deleted; `isBaseOf` removed as unused.
mesh-admin added 1 commit 2026-10-14 17:20:00 +00:00
Send a merge's builds to every machine at once, with no first-machine gate (hq ADR 0360)
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate head da8a5e9bc0f7 merged into trunk 76304d9db817 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
mesh/repo-check head da8a5e9bc0f7 merged into trunk 76304d9db817 — fail: its merge-check.sh failed: --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestA…
da8a5e9bc0
The operator chose the leanest rollout: no gate, no one machine first, failures loud and fixed forward.
A walk sends every rolled-out module to every machine running it in one step, built-by orders no tier,
and a walk ends on its machines' reports. The backlog walk sends every machine at once and passes each
on its applied report.
Author
Contributor

Delivery novox/mesh-controller@704b21b3c547 — delivered since 2026-10-14T17:57:31Z

Delivery plan — builds mesh-controller → novox; no bus step

  • tier 0: mesh-controller
  • novox: receives mesh-controller

Machines

  • mesh-controller on novox: passed — healthy 1 times over 1m46s, by the controller's rule: one reading once it is ready, after the node-engine's witness window (novox/hq ADR 0351)
  • mesh-controller on the rest running it: sent

Transitions

  • 2026-10-14 17:36 (new) → proposed (announced): novox/mesh-controller#332's head announced
  • 2026-10-14 17:44 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-14 17:44 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-14 17:54 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-14 17:54 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
  • 2026-10-14 17:57 delivering → delivered (done): its walk is done, carrying its own commit: 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@704b21b3c547` — **delivered** since 2026-10-14T17:57:31Z **Delivery plan** — builds mesh-controller → novox; no bus step - tier 0: mesh-controller - novox: receives mesh-controller **Machines** - mesh-controller on novox: passed — healthy 1 times over 1m46s, by the controller's rule: one reading once it is ready, after the node-engine's witness window (novox/hq ADR 0351) - mesh-controller on the rest running it: sent **Transitions** - 2026-10-14 17:36 (new) → proposed (announced): novox/mesh-controller#332's head announced - 2026-10-14 17:44 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-14 17:44 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-14 17:54 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-14 17:54 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit - 2026-10-14 17:57 delivering → delivered (done): its walk is done, carrying its own commit: 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`.
jschoubben added 1 commit 2026-10-14 17:21:43 +00:00
Assert the backlog walk sends every machine at once and passes on the report (hq ADR 0360)
mesh/merge-gate head 0e974138751e merged into trunk 76304d9db817 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
mesh/repo-check head 0e974138751e merged into trunk 76304d9db817 — fail: its merge-check.sh failed: --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestA…
mesh/delivery superseded: a newer head of the same pull request
0e97413875
Author
Contributor

Merge check at da8a5e9b
Judged: head da8a5e9bc0f7 merged into trunk 76304d9db817; read beside it: mesh-catalog e1c8965ddbf1, mesh-controller-main 76304d9db817, mesh-host 1a2677882380, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.41s); and TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send, TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send, TestThePlansOwnModuleKeepsItsPassWhenItsSendFails, TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict, TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther and 23 more

Delivery plan — builds mesh-controller → novox; no bus step

  • tier 0: mesh-controller
  • novox: receives mesh-controller
  • read by no module's build: cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/worker_order_test.go

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

settings-1791998678424197422: the settings of app on the whole mesh — approved (ask s8): sent to anchor, laptop, one machine at a time, each judged
settings-1791998678424197422: the settings of app on the whole mesh not sent to laptop: the settings cannot be sent with every build kept: what laptop was last sent is not known; the layer stays as the operator approved it; not heard from, left as they were: anchor
release-1791998678458323797: 1 build(s) wait for a gate on laptop; one machine first, then the rest at once, each judged
status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
notes on laptop:
  + places.data.owner
  + places.data.path
  + x
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
notes on laptop:
  ~ x
  the layer it replaced is kept: settings show notes --node laptop --history
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
{
  "places": {
    "data": {
      "owner": "1001:1001",
      "path": "/srv/notes"
    }
  },
  "x": 1
}
  set by an unnamed account at a shell on Ace through settings at 2026-10-14 17:24
keycloak on anchor:
  + issuer
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
power on anchor:
  + lid
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
keycloak on anchor:
  ~ x
  the layer it replaced is kept: settings show keycloak --node anchor --history
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
claude-code on laptop:
  + managed_settings.permissions.allow
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
claude-code on the whole mesh:
  + mcp_servers.listener.type
  + mcp_servers.listener.url
  run `push --behind` to send it to the machines running it
{
  "managed_settings": {
    "permissions": {
      "allow": [
        "Bash"
      ]
    }
  }
}
  set at the controller's terminal by an unnamed account at a shell on Ace at 2026-10-14 17:24
keycloak on anchor:
  + url
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
{
  "url": "https://id.example"
}
  set at the controller's terminal by an unnamed account at a shell on Ace at 2026-10-14 17:24
notifier on anchor:
  + font
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
mailer on the whole mesh:
  + tags.todo.name
  run `push --behind` to send it to the machines running it
sonarr on anchor:
  + pgid
  + puid
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
sonarr on anchor:
  ~ x
  the layer it replaced is kept: settings show sonarr --node anchor --history
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to anchor, laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
--- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.32s)
    tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier
plan-tier: tier 0 built; sent app1, app2, node-tools to anchor, laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
--- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.31s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x2150869]

goroutine 13197 [running]:
testing.tRunner.func1.2({0x23d6cc0, 0x37ce640})
	/usr/local/go/src/testing/testing.go:1974 +0x419
testing.tRunner.func1()
	/usr/local/go/src/testing/testing.go:1977 +0x67f
panic({0x23d6cc0?, 0x37ce640?})
	/usr/local/go/src/runtime/panic.go:860 +0x13a
github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000b3f688)
	/var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9
testing.tRunner(0xc000b3f688, 0x26f67a0)
	/usr/local/go/src/testing/testing.go:2036 +0x21d
created by testing.(*T).Run in goroutine 1
	/usr/local/go/src/testing/testing.go:2101 +0xb13
FAIL	github.com/novox/mesh-controller/cmd/mesh-controller	143.353s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.011s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.016s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.012s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.095s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.034s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	4.021s
ok  	github.com/novox/mesh-controller/internal/builder	33.204s
ok  	github.com/novox/mesh-controller/internal/catalogue	7.679s
ok  	github.com/novox/mesh-controller/internal/conditions	2.542s
ok  	github.com/novox/mesh-controller/internal/envfile	1.071s
ok  	github.com/novox/mesh-controller/internal/facts	1.112s
ok  	github.com/novox/mesh-controller/internal/identity	4.324s
ok  	github.com/novox/mesh-controller/internal/inventory	29.932s
ok  	github.com/novox/mesh-controller/internal/lease	30.928s
ok  	github.com/novox/mesh-controller/internal/licences	3.679s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.117s
ok  	github.com/novox/mesh-controller/internal/link	57.833s
ok  	github.com/novox/mesh-controller/internal/lint	2.344s
ok  	github.com/novox/mesh-controller/internal/outward	1.139s
ok  	github.com/novox/mesh-controller/internal/overlay	1.122s
ok  	github.com/novox/mesh-controller/internal/secrets	1.496s
ok  	github.com/novox/mesh-controller/internal/store	3.377s
ok  	github.com/novox/mesh-controller/internal/testbus	1.245s
ok  	github.com/novox/mesh-controller/internal/token	1.015s
FAIL
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.41s)
    check_builds_test.go:186: the gate judged <nil>, not the reused build
  the checks' builds of 1 pull request(s) could not be read, so the walk builds: no bus
  the earlier checks' builds of novox/shop#7 could not be read, so the check builds: no bus
--- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore (0.51s)
    --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send (0.25s)
        found_wait_test.go:106: the wait is not carried: verdict "laptop reported it applied its send (novox/hq ADR 0360)", walk "released on anchor, laptop"
    --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send (0.26s)
        found_wait_test.go:111: a directory this send found let the walk through: released on anchor, laptop
--- FAIL: TestThePlansOwnModuleKeepsItsPassWhenItsSendFails (0.24s)
    gate_followup_test.go:212: the plan is done: ; want it failed on late
--- FAIL: TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict (0.30s)
    gate_followup_test.go:401: the node tools' registered build at each judging: []; want c2, then c1 at the very next judging
--- FAIL: TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther (0.28s)
    gate_test.go:167: sent [[anchor laptop]], not the first machine alone
--- FAIL: TestABuildThatPassesItsGateRollsEverywhereUnattended (0.36s)
    gate_test.go:260: sent [[anchor laptop]]
--- FAIL: TestALeafModulePassesOnOneHealthyReading (0.29s)
    gate_test.go:285: a leaf module's gate after one healthy judging: <nil> (plan done: )
--- FAIL: TestABuildNeverHealthyFailsAtTheBound (0.29s)
    gate_test.go:302: judged before the bound: done [[anchor laptop]]
--- FAIL: TestReplay352 (0.53s)
    --- FAIL: TestReplay352/a_send_that_moves_the_module_supersedes_the_judging (0.26s)
        issue352_test.go:127: the release is done: released on anchor, laptop
--- FAIL: TestAPlansFirstSendWaitsForAReleaseJudgingTheModuleThere (0.26s)
    issue352_test.go:76: a newer build of a judged module was sent under the release's gate: <nil>
--- FAIL: TestAPlansJudgingIsSupersededByASendThatMovesItsModule (0.33s)
    issue352_test.go:97: the plan is done: 
--- FAIL: TestANoMoveTierWaitsForNoNewReport (0.31s)
    issue648_test.go:85: a machine that has not answered its last send was not waited on: tier 1, ""
--- FAIL: TestAModuleHealthyOnItsOwnKeepsItsPassWhenItsSendFails (0.25s)
    person_wait_test.go:188: the walk is done: released on laptop; want it failed on late
--- FAIL: TestASharedRepositoryIsPlannedFromTheRecordedBuildSources (0.10s)
    planner_records_test.go:148: a package all three build from: all three: planned "mesh-controller,route-proxy | build-agent", wanted "mesh-controller | build-agent | route-proxy"
--- FAIL: TestTheBacklogIsReleasedOneMachineAtATimeEachJudged (0.26s)
    release_test.go:191: sent [[anchor] [laptop]]: the first machine alone, before it is judged
--- FAIL: TestAFailedReleaseIsPutBackAndTheNextWaitsForAPerson (0.25s)
    release_test.go:231: the release is done: released on anchor, laptop
--- FAIL: TestReplay318 (0.36s)
    replay318_test.go:232: openrazer's pass does not carry its wait for a person: "workstation reported it applied its send (novox/hq ADR 0360)"
    replay318_test.go:252: nothing says a new login is needed on the laptop:
--- FAIL: TestACarriedModuleTakesItsLeadsPassBeforeItsStepIsRead (0.28s)
    replay335_test.go:87: sent [[anchor laptop]]: the first machine once, for the tier
--- FAIL: TestReplayCrashLoopFailsItsGateOnTheFirstMachine (0.28s)
    replays_test.go:269: sent [[anchor laptop]], not the first machine first
--- FAIL: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.26s)
    rest_at_once_test.go:104: the release is done: released on anchor, desk, laptop &{Order:[anchor desk laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc0005eb180 desk:0xc0005eafc0 laptop:0xc0005eb340] Failed:[] Silent:[] Done:[anchor desk laptop] Skipped:[] By: Settings:<nil>}
--- FAIL: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.25s)
    rest_at_once_test.go:136: the release is not judging anchor: <nil>
--- FAIL: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.30s)
    rest_at_once_test.go:188: the send was made again: [[anchor laptop] [anchor laptop]]
--- FAIL: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.22s)
    rest_at_once_test.go:212: the send was not kept before it was made: &{Order:[anchor laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc0005eaa80 laptop:0xc0005eac40] Failed:[] Silent:[] Done:[] Skipped:[] By: Settings:<nil>} <nil>
--- FAIL: TestAFirstMachineThatFailsStillStopsTheWalk (0.26s)
    rest_at_once_test.go:242: the release is done: released on anchor, desk, laptop &{Order:[anchor desk laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc00028a540 desk:0xc00028a380 laptop:0xc00028aa80] Failed:[] Silent:[] Done:[anchor desk laptop] Skipped:[] By: Settings:<nil>}
--- FAIL: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.29s)
    rest_at_once_test.go:310: the release is done: laptop said nothing on its send within 15m0s: left silent; released on anchor; silent on their send, left: laptop &{Order:[anchor laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc001086a80 laptop:0xc001086c40] Failed:[] Silent:[laptop] Done:[anchor] Skipped:[] By: Settings:<nil>}
--- FAIL: TestAPlanSendsNothingForAnUnchangedSource (0.51s)
    --- FAIL: TestAPlanSendsNothingForAnUnchangedSource/changed (0.26s)
        same_source_test.go:198: sent [[anchor laptop]], want [[anchor]]
--- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.32s)
    tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier
--- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.31s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x2150869]

goroutine 13197 [running]:
testing.tRunner.func1.2({0x23d6cc0, 0x37ce640})
	/usr/local/go/src/testing/testing.go:1974 +0x419
testing.tRunner.func1()
	/usr/local/go/src/testing/testing.go:1977 +0x67f
panic({0x23d6cc0?, 0x37ce640?})
	/usr/local/go/src/runtime/panic.go:860 +0x13a
github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000b3f688)
	/var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9
testing.tRunner(0xc000b3f688, 0x26f67a0)
	/usr/local/go/src/testing/testing.go:2036 +0x21d
created by testing.(*T).Run in goroutine 1
	/usr/local/go/src/testing/testing.go:2101 +0xb13
FAIL	github.com/novox/mesh-controller/cmd/mesh-controller	143.353s
**Merge check** at `da8a5e9b` Judged: head `da8a5e9bc0f7` merged into trunk `76304d9db817`; read beside it: mesh-catalog `e1c8965ddbf1`, mesh-controller-main `76304d9db817`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.41s); and TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send, TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send, TestThePlansOwnModuleKeepsItsPassWhenItsSendFails, TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict, TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther and 23 more **Delivery plan** — builds mesh-controller → novox; no bus step - tier 0: mesh-controller - novox: receives mesh-controller - read by no module's build: cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/worker_order_test.go Run by the build seat on ace as `build-1791998423683653805` (`builds --log build-1791998423683653805`). ``` settings-1791998678424197422: the settings of app on the whole mesh — approved (ask s8): sent to anchor, laptop, one machine at a time, each judged settings-1791998678424197422: the settings of app on the whole mesh not sent to laptop: the settings cannot be sent with every build kept: what laptop was last sent is not known; the layer stays as the operator approved it; not heard from, left as they were: anchor release-1791998678458323797: 1 build(s) wait for a gate on laptop; one machine first, then the rest at once, each judged status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node notes on laptop: + places.data.owner + places.data.path + x run `plan laptop --diff` to see what it changes, `push laptop` to send it notes on laptop: ~ x the layer it replaced is kept: settings show notes --node laptop --history run `plan laptop --diff` to see what it changes, `push laptop` to send it { "places": { "data": { "owner": "1001:1001", "path": "/srv/notes" } }, "x": 1 } set by an unnamed account at a shell on Ace through settings at 2026-10-14 17:24 keycloak on anchor: + issuer + x run `plan anchor --diff` to see what it changes, `push anchor` to send it power on anchor: + lid + x run `plan anchor --diff` to see what it changes, `push anchor` to send it keycloak on anchor: ~ x the layer it replaced is kept: settings show keycloak --node anchor --history run `plan anchor --diff` to see what it changes, `push anchor` to send it claude-code on laptop: + managed_settings.permissions.allow run `plan laptop --diff` to see what it changes, `push laptop` to send it claude-code on the whole mesh: + mcp_servers.listener.type + mcp_servers.listener.url run `push --behind` to send it to the machines running it { "managed_settings": { "permissions": { "allow": [ "Bash" ] } } } set at the controller's terminal by an unnamed account at a shell on Ace at 2026-10-14 17:24 keycloak on anchor: + url run `plan anchor --diff` to see what it changes, `push anchor` to send it { "url": "https://id.example" } set at the controller's terminal by an unnamed account at a shell on Ace at 2026-10-14 17:24 notifier on anchor: + font run `plan anchor --diff` to see what it changes, `push anchor` to send it mailer on the whole mesh: + tags.todo.name run `push --behind` to send it to the machines running it sonarr on anchor: + pgid + puid + x run `plan anchor --diff` to see what it changes, `push anchor` to send it sonarr on anchor: ~ x the layer it replaced is kept: settings show sonarr --node anchor --history run `plan anchor --diff` to see what it changes, `push anchor` to send it plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to anchor, laptop, one send each plan-tier: done — novox/mesh-catalog at c2, 1 tier(s) --- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.32s) tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier plan-tier: tier 0 built; sent app1, app2, node-tools to anchor, laptop, one send each plan-tier: done — novox/mesh-catalog at c2, 1 tier(s) --- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.31s) panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked] [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x2150869] goroutine 13197 [running]: testing.tRunner.func1.2({0x23d6cc0, 0x37ce640}) /usr/local/go/src/testing/testing.go:1974 +0x419 testing.tRunner.func1() /usr/local/go/src/testing/testing.go:1977 +0x67f panic({0x23d6cc0?, 0x37ce640?}) /usr/local/go/src/runtime/panic.go:860 +0x13a github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000b3f688) /var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9 testing.tRunner(0xc000b3f688, 0x26f67a0) /usr/local/go/src/testing/testing.go:2036 +0x21d created by testing.(*T).Run in goroutine 1 /usr/local/go/src/testing/testing.go:2101 +0xb13 FAIL github.com/novox/mesh-controller/cmd/mesh-controller 143.353s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.011s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s ok github.com/novox/mesh-controller/examples/route-proxy 1.095s ok github.com/novox/mesh-controller/internal/artifacts 1.034s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 4.021s ok github.com/novox/mesh-controller/internal/builder 33.204s ok github.com/novox/mesh-controller/internal/catalogue 7.679s ok github.com/novox/mesh-controller/internal/conditions 2.542s ok github.com/novox/mesh-controller/internal/envfile 1.071s ok github.com/novox/mesh-controller/internal/facts 1.112s ok github.com/novox/mesh-controller/internal/identity 4.324s ok github.com/novox/mesh-controller/internal/inventory 29.932s ok github.com/novox/mesh-controller/internal/lease 30.928s ok github.com/novox/mesh-controller/internal/licences 3.679s ok github.com/novox/mesh-controller/internal/licences/adapters 1.117s ok github.com/novox/mesh-controller/internal/link 57.833s ok github.com/novox/mesh-controller/internal/lint 2.344s ok github.com/novox/mesh-controller/internal/outward 1.139s ok github.com/novox/mesh-controller/internal/overlay 1.122s ok github.com/novox/mesh-controller/internal/secrets 1.496s ok github.com/novox/mesh-controller/internal/store 3.377s ok github.com/novox/mesh-controller/internal/testbus 1.245s ok github.com/novox/mesh-controller/internal/token 1.015s FAIL --- what failed, picked from the whole of its output (the whole is in the build's log) --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.41s) check_builds_test.go:186: the gate judged <nil>, not the reused build the checks' builds of 1 pull request(s) could not be read, so the walk builds: no bus the earlier checks' builds of novox/shop#7 could not be read, so the check builds: no bus --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore (0.51s) --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send (0.25s) found_wait_test.go:106: the wait is not carried: verdict "laptop reported it applied its send (novox/hq ADR 0360)", walk "released on anchor, laptop" --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send (0.26s) found_wait_test.go:111: a directory this send found let the walk through: released on anchor, laptop --- FAIL: TestThePlansOwnModuleKeepsItsPassWhenItsSendFails (0.24s) gate_followup_test.go:212: the plan is done: ; want it failed on late --- FAIL: TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict (0.30s) gate_followup_test.go:401: the node tools' registered build at each judging: []; want c2, then c1 at the very next judging --- FAIL: TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther (0.28s) gate_test.go:167: sent [[anchor laptop]], not the first machine alone --- FAIL: TestABuildThatPassesItsGateRollsEverywhereUnattended (0.36s) gate_test.go:260: sent [[anchor laptop]] --- FAIL: TestALeafModulePassesOnOneHealthyReading (0.29s) gate_test.go:285: a leaf module's gate after one healthy judging: <nil> (plan done: ) --- FAIL: TestABuildNeverHealthyFailsAtTheBound (0.29s) gate_test.go:302: judged before the bound: done [[anchor laptop]] --- FAIL: TestReplay352 (0.53s) --- FAIL: TestReplay352/a_send_that_moves_the_module_supersedes_the_judging (0.26s) issue352_test.go:127: the release is done: released on anchor, laptop --- FAIL: TestAPlansFirstSendWaitsForAReleaseJudgingTheModuleThere (0.26s) issue352_test.go:76: a newer build of a judged module was sent under the release's gate: <nil> --- FAIL: TestAPlansJudgingIsSupersededByASendThatMovesItsModule (0.33s) issue352_test.go:97: the plan is done: --- FAIL: TestANoMoveTierWaitsForNoNewReport (0.31s) issue648_test.go:85: a machine that has not answered its last send was not waited on: tier 1, "" --- FAIL: TestAModuleHealthyOnItsOwnKeepsItsPassWhenItsSendFails (0.25s) person_wait_test.go:188: the walk is done: released on laptop; want it failed on late --- FAIL: TestASharedRepositoryIsPlannedFromTheRecordedBuildSources (0.10s) planner_records_test.go:148: a package all three build from: all three: planned "mesh-controller,route-proxy | build-agent", wanted "mesh-controller | build-agent | route-proxy" --- FAIL: TestTheBacklogIsReleasedOneMachineAtATimeEachJudged (0.26s) release_test.go:191: sent [[anchor] [laptop]]: the first machine alone, before it is judged --- FAIL: TestAFailedReleaseIsPutBackAndTheNextWaitsForAPerson (0.25s) release_test.go:231: the release is done: released on anchor, laptop --- FAIL: TestReplay318 (0.36s) replay318_test.go:232: openrazer's pass does not carry its wait for a person: "workstation reported it applied its send (novox/hq ADR 0360)" replay318_test.go:252: nothing says a new login is needed on the laptop: --- FAIL: TestACarriedModuleTakesItsLeadsPassBeforeItsStepIsRead (0.28s) replay335_test.go:87: sent [[anchor laptop]]: the first machine once, for the tier --- FAIL: TestReplayCrashLoopFailsItsGateOnTheFirstMachine (0.28s) replays_test.go:269: sent [[anchor laptop]], not the first machine first --- FAIL: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.26s) rest_at_once_test.go:104: the release is done: released on anchor, desk, laptop &{Order:[anchor desk laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc0005eb180 desk:0xc0005eafc0 laptop:0xc0005eb340] Failed:[] Silent:[] Done:[anchor desk laptop] Skipped:[] By: Settings:<nil>} --- FAIL: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.25s) rest_at_once_test.go:136: the release is not judging anchor: <nil> --- FAIL: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.30s) rest_at_once_test.go:188: the send was made again: [[anchor laptop] [anchor laptop]] --- FAIL: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.22s) rest_at_once_test.go:212: the send was not kept before it was made: &{Order:[anchor laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc0005eaa80 laptop:0xc0005eac40] Failed:[] Silent:[] Done:[] Skipped:[] By: Settings:<nil>} <nil> --- FAIL: TestAFirstMachineThatFailsStillStopsTheWalk (0.26s) rest_at_once_test.go:242: the release is done: released on anchor, desk, laptop &{Order:[anchor desk laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc00028a540 desk:0xc00028a380 laptop:0xc00028aa80] Failed:[] Silent:[] Done:[anchor desk laptop] Skipped:[] By: Settings:<nil>} --- FAIL: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.29s) rest_at_once_test.go:310: the release is done: laptop said nothing on its send within 15m0s: left silent; released on anchor; silent on their send, left: laptop &{Order:[anchor laptop] Next:0 Gate:<nil> Rest:true Gates:map[anchor:0xc001086a80 laptop:0xc001086c40] Failed:[] Silent:[laptop] Done:[anchor] Skipped:[] By: Settings:<nil>} --- FAIL: TestAPlanSendsNothingForAnUnchangedSource (0.51s) --- FAIL: TestAPlanSendsNothingForAnUnchangedSource/changed (0.26s) same_source_test.go:198: sent [[anchor laptop]], want [[anchor]] --- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.32s) tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier --- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.31s) panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked] [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x2150869] goroutine 13197 [running]: testing.tRunner.func1.2({0x23d6cc0, 0x37ce640}) /usr/local/go/src/testing/testing.go:1974 +0x419 testing.tRunner.func1() /usr/local/go/src/testing/testing.go:1977 +0x67f panic({0x23d6cc0?, 0x37ce640?}) /usr/local/go/src/runtime/panic.go:860 +0x13a github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000b3f688) /var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9 testing.tRunner(0xc000b3f688, 0x26f67a0) /usr/local/go/src/testing/testing.go:2036 +0x21d created by testing.(*T).Run in goroutine 1 /usr/local/go/src/testing/testing.go:2101 +0xb13 FAIL github.com/novox/mesh-controller/cmd/mesh-controller 143.353s ```
Author
Contributor

Merge check at 0e974138
Judged: head 0e974138751e merged into trunk 76304d9db817; read beside it: mesh-catalog e1c8965ddbf1, mesh-controller-main 76304d9db817, mesh-host 1a2677882380, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.57s); and TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send, TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send, TestThePlansOwnModuleKeepsItsPassWhenItsSendFails, TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict, TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther and 17 more

Delivery plan — builds mesh-controller → novox; no bus step

  • tier 0: mesh-controller
  • novox: receives mesh-controller
  • read by no module's build: cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/worker_order_test.go

Run by the build seat on novox as build-1791998516171531223 (builds --log build-1791998516171531223).

settings-1791998907299804326: the settings of app on the whole mesh — approved (ask s8): sent to anchor, laptop, one machine at a time, each judged
settings-1791998907299804326: the settings of app on the whole mesh not sent to laptop: the settings cannot be sent with every build kept: what laptop was last sent is not known; the layer stays as the operator approved it; not heard from, left as they were: anchor
release-1791998907342470549: 1 build(s) wait for a gate on laptop; one machine first, then the rest at once, each judged
status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
  - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
notes on laptop:
  + places.data.owner
  + places.data.path
  + x
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
notes on laptop:
  ~ x
  the layer it replaced is kept: settings show notes --node laptop --history
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
{
  "places": {
    "data": {
      "owner": "1001:1001",
      "path": "/srv/notes"
    }
  },
  "x": 1
}
  set by an unnamed account at a shell on novox-be through settings at 2026-10-14 17:28
keycloak on anchor:
  + issuer
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
power on anchor:
  + lid
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
keycloak on anchor:
  ~ x
  the layer it replaced is kept: settings show keycloak --node anchor --history
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
claude-code on laptop:
  + managed_settings.permissions.allow
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
claude-code on the whole mesh:
  + mcp_servers.listener.type
  + mcp_servers.listener.url
  run `push --behind` to send it to the machines running it
{
  "managed_settings": {
    "permissions": {
      "allow": [
        "Bash"
      ]
    }
  }
}
  set at the controller's terminal by an unnamed account at a shell on novox-be at 2026-10-14 17:28
keycloak on anchor:
  + url
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
{
  "url": "https://id.example"
}
  set at the controller's terminal by an unnamed account at a shell on novox-be at 2026-10-14 17:28
notifier on anchor:
  + font
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
mailer on the whole mesh:
  + tags.todo.name
  run `push --behind` to send it to the machines running it
sonarr on anchor:
  + pgid
  + puid
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
sonarr on anchor:
  ~ x
  the layer it replaced is kept: settings show sonarr --node anchor --history
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to anchor, laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
--- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.47s)
    tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier
plan-tier: tier 0 built; sent app1, app2, node-tools to anchor, laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
--- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.40s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x214e049]

goroutine 12642 [running]:
testing.tRunner.func1.2({0x23d4cc0, 0x37cb640})
	/usr/local/go/src/testing/testing.go:1974 +0x419
testing.tRunner.func1()
	/usr/local/go/src/testing/testing.go:1977 +0x67f
panic({0x23d4cc0?, 0x37cb640?})
	/usr/local/go/src/runtime/panic.go:860 +0x13a
github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000d04488)
	/var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9
testing.tRunner(0xc000d04488, 0x26f4500)
	/usr/local/go/src/testing/testing.go:2036 +0x21d
created by testing.(*T).Run in goroutine 1
	/usr/local/go/src/testing/testing.go:2101 +0xb13
FAIL	github.com/novox/mesh-controller/cmd/mesh-controller	205.332s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.018s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.036s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.029s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.158s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.061s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	5.191s
ok  	github.com/novox/mesh-controller/internal/builder	51.868s
ok  	github.com/novox/mesh-controller/internal/catalogue	9.998s
ok  	github.com/novox/mesh-controller/internal/conditions	2.987s
ok  	github.com/novox/mesh-controller/internal/envfile	1.036s
ok  	github.com/novox/mesh-controller/internal/facts	1.054s
ok  	github.com/novox/mesh-controller/internal/identity	6.202s
ok  	github.com/novox/mesh-controller/internal/inventory	50.430s
ok  	github.com/novox/mesh-controller/internal/lease	31.123s
ok  	github.com/novox/mesh-controller/internal/licences	4.846s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.016s
ok  	github.com/novox/mesh-controller/internal/link	68.442s
ok  	github.com/novox/mesh-controller/internal/lint	2.747s
ok  	github.com/novox/mesh-controller/internal/outward	1.047s
ok  	github.com/novox/mesh-controller/internal/overlay	1.029s
ok  	github.com/novox/mesh-controller/internal/secrets	1.516s
ok  	github.com/novox/mesh-controller/internal/store	3.665s
ok  	github.com/novox/mesh-controller/internal/testbus	1.217s
ok  	github.com/novox/mesh-controller/internal/token	1.016s
FAIL
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.57s)
    check_builds_test.go:186: the gate judged <nil>, not the reused build
  the checks' builds of 1 pull request(s) could not be read, so the walk builds: no bus
  the earlier checks' builds of novox/shop#7 could not be read, so the check builds: no bus
--- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore (0.66s)
    --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send (0.33s)
        found_wait_test.go:106: the wait is not carried: verdict "laptop reported it applied its send (novox/hq ADR 0360)", walk "released on anchor, laptop"
    --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send (0.34s)
        found_wait_test.go:111: a directory this send found let the walk through: released on anchor, laptop
--- FAIL: TestThePlansOwnModuleKeepsItsPassWhenItsSendFails (0.30s)
    gate_followup_test.go:212: the plan is done: ; want it failed on late
--- FAIL: TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict (0.40s)
    gate_followup_test.go:401: the node tools' registered build at each judging: []; want c2, then c1 at the very next judging
--- FAIL: TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther (0.47s)
    gate_test.go:167: sent [[anchor laptop]], not the first machine alone
--- FAIL: TestABuildThatPassesItsGateRollsEverywhereUnattended (0.46s)
    gate_test.go:260: sent [[anchor laptop]]
--- FAIL: TestALeafModulePassesOnOneHealthyReading (0.37s)
    gate_test.go:285: a leaf module's gate after one healthy judging: <nil> (plan done: )
--- FAIL: TestABuildNeverHealthyFailsAtTheBound (0.37s)
    gate_test.go:302: judged before the bound: done [[anchor laptop]]
--- FAIL: TestReplay352 (0.85s)
    --- FAIL: TestReplay352/a_send_that_moves_the_module_supersedes_the_judging (0.34s)
        issue352_test.go:127: the release is done: released on anchor, laptop
--- FAIL: TestAPlansFirstSendWaitsForAReleaseJudgingTheModuleThere (0.33s)
    issue352_test.go:76: a newer build of a judged module was sent under the release's gate: <nil>
--- FAIL: TestAPlansJudgingIsSupersededByASendThatMovesItsModule (0.42s)
    issue352_test.go:97: the plan is done: 
--- FAIL: TestANoMoveTierWaitsForNoNewReport (0.39s)
    issue648_test.go:85: a machine that has not answered its last send was not waited on: tier 1, ""
--- FAIL: TestAModuleHealthyOnItsOwnKeepsItsPassWhenItsSendFails (0.42s)
    person_wait_test.go:188: the walk is done: released on laptop; want it failed on late
--- FAIL: TestASharedRepositoryIsPlannedFromTheRecordedBuildSources (0.13s)
    planner_records_test.go:148: a package all three build from: all three: planned "mesh-controller,route-proxy | build-agent", wanted "mesh-controller | build-agent | route-proxy"
--- FAIL: TestTheBacklogIsReleasedOneMachineAtATimeEachJudged (0.33s)
    release_test.go:196: sent [[anchor] [laptop]]: the first machine alone, before it is judged
--- FAIL: TestAFailedReleaseIsPutBackAndTheNextWaitsForAPerson (0.33s)
    release_test.go:239: sent [[anchor] [laptop]]: the first machine, then the put-back to it, and nothing to laptop
--- FAIL: TestReplay318 (0.56s)
    replay318_test.go:232: openrazer's pass does not carry its wait for a person: "workstation reported it applied its send (novox/hq ADR 0360)"
    replay318_test.go:252: nothing says a new login is needed on the laptop:
--- FAIL: TestACarriedModuleTakesItsLeadsPassBeforeItsStepIsRead (0.43s)
    replay335_test.go:87: sent [[anchor laptop]]: the first machine once, for the tier
--- FAIL: TestReplayCrashLoopFailsItsGateOnTheFirstMachine (0.37s)
    replays_test.go:269: sent [[anchor laptop]], not the first machine first
--- FAIL: TestAPlanSendsNothingForAnUnchangedSource (0.68s)
    --- FAIL: TestAPlanSendsNothingForAnUnchangedSource/changed (0.33s)
        same_source_test.go:198: sent [[anchor laptop]], want [[anchor]]
--- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.47s)
    tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier
--- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.40s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked]
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x214e049]

goroutine 12642 [running]:
testing.tRunner.func1.2({0x23d4cc0, 0x37cb640})
	/usr/local/go/src/testing/testing.go:1974 +0x419
testing.tRunner.func1()
	/usr/local/go/src/testing/testing.go:1977 +0x67f
panic({0x23d4cc0?, 0x37cb640?})
	/usr/local/go/src/runtime/panic.go:860 +0x13a
github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000d04488)
	/var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9
testing.tRunner(0xc000d04488, 0x26f4500)
	/usr/local/go/src/testing/testing.go:2036 +0x21d
created by testing.(*T).Run in goroutine 1
	/usr/local/go/src/testing/testing.go:2101 +0xb13
FAIL	github.com/novox/mesh-controller/cmd/mesh-controller	205.332s
**Merge check** at `0e974138` Judged: head `0e974138751e` merged into trunk `76304d9db817`; read beside it: mesh-catalog `e1c8965ddbf1`, mesh-controller-main `76304d9db817`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.57s); and TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send, TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send, TestThePlansOwnModuleKeepsItsPassWhenItsSendFails, TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict, TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther and 17 more **Delivery plan** — builds mesh-controller → novox; no bus step - tier 0: mesh-controller - novox: receives mesh-controller - read by no module's build: cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/worker_order_test.go Run by the build seat on novox as `build-1791998516171531223` (`builds --log build-1791998516171531223`). ``` settings-1791998907299804326: the settings of app on the whole mesh — approved (ask s8): sent to anchor, laptop, one machine at a time, each judged settings-1791998907299804326: the settings of app on the whole mesh not sent to laptop: the settings cannot be sent with every build kept: what laptop was last sent is not known; the layer stays as the operator approved it; not heard from, left as they were: anchor release-1791998907342470549: 1 build(s) wait for a gate on laptop; one machine first, then the rest at once, each judged status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node anchor is not counted as on the network: it does not resolve: these assignments cannot be applied: - rival-one and rival-two both claim "the-seat", and only one thing may hold it per node notes on laptop: + places.data.owner + places.data.path + x run `plan laptop --diff` to see what it changes, `push laptop` to send it notes on laptop: ~ x the layer it replaced is kept: settings show notes --node laptop --history run `plan laptop --diff` to see what it changes, `push laptop` to send it { "places": { "data": { "owner": "1001:1001", "path": "/srv/notes" } }, "x": 1 } set by an unnamed account at a shell on novox-be through settings at 2026-10-14 17:28 keycloak on anchor: + issuer + x run `plan anchor --diff` to see what it changes, `push anchor` to send it power on anchor: + lid + x run `plan anchor --diff` to see what it changes, `push anchor` to send it keycloak on anchor: ~ x the layer it replaced is kept: settings show keycloak --node anchor --history run `plan anchor --diff` to see what it changes, `push anchor` to send it claude-code on laptop: + managed_settings.permissions.allow run `plan laptop --diff` to see what it changes, `push laptop` to send it claude-code on the whole mesh: + mcp_servers.listener.type + mcp_servers.listener.url run `push --behind` to send it to the machines running it { "managed_settings": { "permissions": { "allow": [ "Bash" ] } } } set at the controller's terminal by an unnamed account at a shell on novox-be at 2026-10-14 17:28 keycloak on anchor: + url run `plan anchor --diff` to see what it changes, `push anchor` to send it { "url": "https://id.example" } set at the controller's terminal by an unnamed account at a shell on novox-be at 2026-10-14 17:28 notifier on anchor: + font run `plan anchor --diff` to see what it changes, `push anchor` to send it mailer on the whole mesh: + tags.todo.name run `push --behind` to send it to the machines running it sonarr on anchor: + pgid + puid + x run `plan anchor --diff` to see what it changes, `push anchor` to send it sonarr on anchor: ~ x the layer it replaced is kept: settings show sonarr --node anchor --history run `plan anchor --diff` to see what it changes, `push anchor` to send it plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to anchor, laptop, one send each plan-tier: done — novox/mesh-catalog at c2, 1 tier(s) --- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.47s) tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier plan-tier: tier 0 built; sent app1, app2, node-tools to anchor, laptop, one send each plan-tier: done — novox/mesh-catalog at c2, 1 tier(s) --- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.40s) panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked] [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x214e049] goroutine 12642 [running]: testing.tRunner.func1.2({0x23d4cc0, 0x37cb640}) /usr/local/go/src/testing/testing.go:1974 +0x419 testing.tRunner.func1() /usr/local/go/src/testing/testing.go:1977 +0x67f panic({0x23d4cc0?, 0x37cb640?}) /usr/local/go/src/runtime/panic.go:860 +0x13a github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000d04488) /var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9 testing.tRunner(0xc000d04488, 0x26f4500) /usr/local/go/src/testing/testing.go:2036 +0x21d created by testing.(*T).Run in goroutine 1 /usr/local/go/src/testing/testing.go:2101 +0xb13 FAIL github.com/novox/mesh-controller/cmd/mesh-controller 205.332s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.036s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.029s ok github.com/novox/mesh-controller/examples/route-proxy 1.158s ok github.com/novox/mesh-controller/internal/artifacts 1.061s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 5.191s ok github.com/novox/mesh-controller/internal/builder 51.868s ok github.com/novox/mesh-controller/internal/catalogue 9.998s ok github.com/novox/mesh-controller/internal/conditions 2.987s ok github.com/novox/mesh-controller/internal/envfile 1.036s ok github.com/novox/mesh-controller/internal/facts 1.054s ok github.com/novox/mesh-controller/internal/identity 6.202s ok github.com/novox/mesh-controller/internal/inventory 50.430s ok github.com/novox/mesh-controller/internal/lease 31.123s ok github.com/novox/mesh-controller/internal/licences 4.846s ok github.com/novox/mesh-controller/internal/licences/adapters 1.016s ok github.com/novox/mesh-controller/internal/link 68.442s ok github.com/novox/mesh-controller/internal/lint 2.747s ok github.com/novox/mesh-controller/internal/outward 1.047s ok github.com/novox/mesh-controller/internal/overlay 1.029s ok github.com/novox/mesh-controller/internal/secrets 1.516s ok github.com/novox/mesh-controller/internal/store 3.665s ok github.com/novox/mesh-controller/internal/testbus 1.217s ok github.com/novox/mesh-controller/internal/token 1.016s FAIL --- what failed, picked from the whole of its output (the whole is in the build's log) --- FAIL: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.57s) check_builds_test.go:186: the gate judged <nil>, not the reused build the checks' builds of 1 pull request(s) could not be read, so the walk builds: no bus the earlier checks' builds of novox/shop#7 could not be read, so the check builds: no bus --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore (0.66s) --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_a_day_before_the_send (0.33s) found_wait_test.go:106: the wait is not carried: verdict "laptop reported it applied its send (novox/hq ADR 0360)", walk "released on anchor, laptop" --- FAIL: TestAFixGoesThroughPastADirectoryFoundBefore/found_by_this_send (0.34s) found_wait_test.go:111: a directory this send found let the walk through: released on anchor, laptop --- FAIL: TestThePlansOwnModuleKeepsItsPassWhenItsSendFails (0.30s) gate_followup_test.go:212: the plan is done: ; want it failed on late --- FAIL: TestABrokenModuleIsPutBackAtOnceAndTheOneBesideItGetsItsOwnVerdict (0.40s) gate_followup_test.go:401: the node tools' registered build at each judging: []; want c2, then c1 at the very next judging --- FAIL: TestABuildThatFailsItsGateIsRolledBackOnItsFirstMachineAndGoesNoFurther (0.47s) gate_test.go:167: sent [[anchor laptop]], not the first machine alone --- FAIL: TestABuildThatPassesItsGateRollsEverywhereUnattended (0.46s) gate_test.go:260: sent [[anchor laptop]] --- FAIL: TestALeafModulePassesOnOneHealthyReading (0.37s) gate_test.go:285: a leaf module's gate after one healthy judging: <nil> (plan done: ) --- FAIL: TestABuildNeverHealthyFailsAtTheBound (0.37s) gate_test.go:302: judged before the bound: done [[anchor laptop]] --- FAIL: TestReplay352 (0.85s) --- FAIL: TestReplay352/a_send_that_moves_the_module_supersedes_the_judging (0.34s) issue352_test.go:127: the release is done: released on anchor, laptop --- FAIL: TestAPlansFirstSendWaitsForAReleaseJudgingTheModuleThere (0.33s) issue352_test.go:76: a newer build of a judged module was sent under the release's gate: <nil> --- FAIL: TestAPlansJudgingIsSupersededByASendThatMovesItsModule (0.42s) issue352_test.go:97: the plan is done: --- FAIL: TestANoMoveTierWaitsForNoNewReport (0.39s) issue648_test.go:85: a machine that has not answered its last send was not waited on: tier 1, "" --- FAIL: TestAModuleHealthyOnItsOwnKeepsItsPassWhenItsSendFails (0.42s) person_wait_test.go:188: the walk is done: released on laptop; want it failed on late --- FAIL: TestASharedRepositoryIsPlannedFromTheRecordedBuildSources (0.13s) planner_records_test.go:148: a package all three build from: all three: planned "mesh-controller,route-proxy | build-agent", wanted "mesh-controller | build-agent | route-proxy" --- FAIL: TestTheBacklogIsReleasedOneMachineAtATimeEachJudged (0.33s) release_test.go:196: sent [[anchor] [laptop]]: the first machine alone, before it is judged --- FAIL: TestAFailedReleaseIsPutBackAndTheNextWaitsForAPerson (0.33s) release_test.go:239: sent [[anchor] [laptop]]: the first machine, then the put-back to it, and nothing to laptop --- FAIL: TestReplay318 (0.56s) replay318_test.go:232: openrazer's pass does not carry its wait for a person: "workstation reported it applied its send (novox/hq ADR 0360)" replay318_test.go:252: nothing says a new login is needed on the laptop: --- FAIL: TestACarriedModuleTakesItsLeadsPassBeforeItsStepIsRead (0.43s) replay335_test.go:87: sent [[anchor laptop]]: the first machine once, for the tier --- FAIL: TestReplayCrashLoopFailsItsGateOnTheFirstMachine (0.37s) replays_test.go:269: sent [[anchor laptop]], not the first machine first --- FAIL: TestAPlanSendsNothingForAnUnchangedSource (0.68s) --- FAIL: TestAPlanSendsNothingForAnUnchangedSource/changed (0.33s) same_source_test.go:198: sent [[anchor laptop]], want [[anchor]] --- FAIL: TestATierOfManyModulesIsSentToEachMachineOnce (0.47s) tier_send_test.go:184: sent [[anchor laptop]]: the first machine once, for the whole tier --- FAIL: TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule (0.40s) panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked] [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x214e049] goroutine 12642 [running]: testing.tRunner.func1.2({0x23d4cc0, 0x37cb640}) /usr/local/go/src/testing/testing.go:1974 +0x419 testing.tRunner.func1() /usr/local/go/src/testing/testing.go:1977 +0x67f panic({0x23d4cc0?, 0x37cb640?}) /usr/local/go/src/runtime/panic.go:860 +0x13a github.com/novox/mesh-controller/cmd/mesh-controller.TestACoreBehindWhileTheNodeToolsSettleFailsNoOtherModule(0xc000d04488) /var/lib/build-agent/workspace/check/mesh-controller/cmd/mesh-controller/tier_send_test.go:242 +0x3e9 testing.tRunner(0xc000d04488, 0x26f4500) /usr/local/go/src/testing/testing.go:2036 +0x21d created by testing.(*T).Run in goroutine 1 /usr/local/go/src/testing/testing.go:2101 +0xb13 FAIL github.com/novox/mesh-controller/cmd/mesh-controller 205.332s ```
jschoubben added 1 commit 2026-10-14 17:35:09 +00:00
Keep the first-machine gate behind a switch for walks begun before hq ADR 0360, and test both paths
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate head 5b455b8a2438 merged into trunk 76304d9db817 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
mesh/repo-check head 5b455b8a2438 merged into trunk 76304d9db817 — fail: its merge-check.sh failed: --- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsSt…
5b455b8a24
jschoubben added 1 commit 2026-10-14 17:36:30 +00:00
Carry the new controller's user list to the bus when its walk ends, as the gate's pass did (hq ADR 0236 §34, ADR 0360)
mesh/merge-gate head 704b21b3c547 merged into trunk 76304d9db817 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
mesh/repo-check head 704b21b3c547 merged into trunk 76304d9db817 — pass: its merge-check.sh passed
mesh/delivery delivered
704b21b3c5
Author
Contributor

Merge check at 5b455b8a
Judged: head 5b455b8a2438 merged into trunk 76304d9db817; read beside it: mesh-catalog e1c8965ddbf1, mesh-controller-main 76304d9db817, mesh-host 1a2677882380, mesh-tools 954e1a53eef9

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsStillTheHolders (3.13s)

Delivery plan — builds mesh-controller → novox; no bus step

  • tier 0: mesh-controller
  • novox: receives mesh-controller
  • read by no module's build: cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go, cmd/mesh-controller/worker_order_test.go

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

--- the gate: mesh-controller
mesh-controller: ok, 60 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); 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
files asking for a setting without saying whether it is trusted: 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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-14T17:11:10Z 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-14T17:11:10Z

modules the change moves:
  - mesh-controller (changed)

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 1 module(s) in 1 tier(s): mesh-controller

notes:
  - cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go and cmd/mesh-controller/worker_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.081s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	165.499s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.025s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.036s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.026s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.133s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.063s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	3.982s
ok  	github.com/novox/mesh-controller/internal/builder	43.708s
ok  	github.com/novox/mesh-controller/internal/catalogue	7.609s
ok  	github.com/novox/mesh-controller/internal/conditions	2.518s
ok  	github.com/novox/mesh-controller/internal/envfile	1.055s
ok  	github.com/novox/mesh-controller/internal/facts	1.029s
ok  	github.com/novox/mesh-controller/internal/identity	4.258s
ok  	github.com/novox/mesh-controller/internal/inventory	42.082s
--- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsStillTheHolders (3.13s)
    lease_test.go:73: a: took the controller lease at epoch 1 (a)
    lease_test.go:73: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-14T17:38:05Z and it is lost at 2026-10-14T17:38:06Z unless a renewal is made first
    lease_test.go:73: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded — this controller stops acting at once
    lease_test.go:448: a lost the lease to its own renewal: no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded
FAIL
FAIL	github.com/novox/mesh-controller/internal/lease	31.282s
ok  	github.com/novox/mesh-controller/internal/licences	3.596s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.053s
ok  	github.com/novox/mesh-controller/internal/link	63.431s
ok  	github.com/novox/mesh-controller/internal/lint	2.290s
ok  	github.com/novox/mesh-controller/internal/outward	1.085s
ok  	github.com/novox/mesh-controller/internal/overlay	1.053s
ok  	github.com/novox/mesh-controller/internal/secrets	1.429s
ok  	github.com/novox/mesh-controller/internal/store	3.292s
ok  	github.com/novox/mesh-controller/internal/testbus	1.236s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
FAIL
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsStillTheHolders (3.13s)
    lease_test.go:73: a: took the controller lease at epoch 1 (a)
    lease_test.go:73: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-14T17:38:05Z and it is lost at 2026-10-14T17:38:06Z unless a renewal is made first
    lease_test.go:73: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded — this controller stops acting at once
    lease_test.go:448: a lost the lease to its own renewal: no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded
FAIL	github.com/novox/mesh-controller/internal/lease	31.282s
**Merge check** at `5b455b8a` Judged: head `5b455b8a2438` merged into trunk `76304d9db817`; read beside it: mesh-catalog `e1c8965ddbf1`, mesh-controller-main `76304d9db817`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsStillTheHolders (3.13s) **Delivery plan** — builds mesh-controller → novox; no bus step - tier 0: mesh-controller - novox: receives mesh-controller - read by no module's build: cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go, cmd/mesh-controller/worker_order_test.go Run by the build seat on ace as `build-1791999339227513841` (`builds --log build-1791999339227513841`). ``` --- the gate: mesh-controller mesh-controller: ok, 60 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); 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 files asking for a setting without saying whether it is trusted: 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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-14T17:11:10Z 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-14T17:11:10Z modules the change moves: - mesh-controller (changed) 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 1 module(s) in 1 tier(s): mesh-controller notes: - cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go and cmd/mesh-controller/worker_order_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.081s ok github.com/novox/mesh-controller/cmd/mesh-controller 165.499s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.025s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.036s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.026s ok github.com/novox/mesh-controller/examples/route-proxy 1.133s ok github.com/novox/mesh-controller/internal/artifacts 1.063s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 3.982s ok github.com/novox/mesh-controller/internal/builder 43.708s ok github.com/novox/mesh-controller/internal/catalogue 7.609s ok github.com/novox/mesh-controller/internal/conditions 2.518s ok github.com/novox/mesh-controller/internal/envfile 1.055s ok github.com/novox/mesh-controller/internal/facts 1.029s ok github.com/novox/mesh-controller/internal/identity 4.258s ok github.com/novox/mesh-controller/internal/inventory 42.082s --- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsStillTheHolders (3.13s) lease_test.go:73: a: took the controller lease at epoch 1 (a) lease_test.go:73: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-14T17:38:05Z and it is lost at 2026-10-14T17:38:06Z unless a renewal is made first lease_test.go:73: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded — this controller stops acting at once lease_test.go:448: a lost the lease to its own renewal: no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded FAIL FAIL github.com/novox/mesh-controller/internal/lease 31.282s ok github.com/novox/mesh-controller/internal/licences 3.596s ok github.com/novox/mesh-controller/internal/licences/adapters 1.053s ok github.com/novox/mesh-controller/internal/link 63.431s ok github.com/novox/mesh-controller/internal/lint 2.290s ok github.com/novox/mesh-controller/internal/outward 1.085s ok github.com/novox/mesh-controller/internal/overlay 1.053s ok github.com/novox/mesh-controller/internal/secrets 1.429s ok github.com/novox/mesh-controller/internal/store 3.292s ok github.com/novox/mesh-controller/internal/testbus 1.236s ok github.com/novox/mesh-controller/internal/token 1.017s FAIL --- what failed, picked from the whole of its output (the whole is in the build's log) --- FAIL: TestARenewalWrittenThoughItsAnswerWasLostIsStillTheHolders (3.13s) lease_test.go:73: a: took the controller lease at epoch 1 (a) lease_test.go:73: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-14T17:38:05Z and it is lost at 2026-10-14T17:38:06Z unless a renewal is made first lease_test.go:73: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded — this controller stops acting at once lease_test.go:448: a lost the lease to its own renewal: no renewal was made within the key's age of 3s (the last at 2026-10-14T17:38:03Z, 1 failed since): the renewal could not be made: context deadline exceeded FAIL github.com/novox/mesh-controller/internal/lease 31.282s ```
Author
Contributor

Merge check at 704b21b3
Judged: head 704b21b3c547 merged into trunk 76304d9db817; read beside it: mesh-catalog e1c8965ddbf1, mesh-controller-main 76304d9db817, mesh-host 1a2677882380, mesh-tools 954e1a53eef9

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

Delivery plan — builds mesh-controller → novox; no bus step

  • tier 0: mesh-controller
  • novox: receives mesh-controller
  • read by no module's build: cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go, cmd/mesh-controller/worker_order_test.go

Run by the build seat on novox as build-1791999399977255839 (builds --log build-1791999399977255839).

--- the gate: mesh-controller
mesh-controller: ok, 60 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); 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
files asking for a setting without saying whether it is trusted: 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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-14T17:11:10Z 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-14T17:11:10Z

modules the change moves:
  - mesh-controller (changed)

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 1 module(s) in 1 tier(s): mesh-controller

notes:
  - cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go and cmd/mesh-controller/worker_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.213s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	231.313s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.061s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.041s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.032s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.222s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.101s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	6.800s
ok  	github.com/novox/mesh-controller/internal/builder	71.972s
ok  	github.com/novox/mesh-controller/internal/catalogue	9.409s
ok  	github.com/novox/mesh-controller/internal/conditions	2.877s
ok  	github.com/novox/mesh-controller/internal/envfile	1.046s
ok  	github.com/novox/mesh-controller/internal/facts	1.049s
ok  	github.com/novox/mesh-controller/internal/identity	8.684s
ok  	github.com/novox/mesh-controller/internal/inventory	45.704s
ok  	github.com/novox/mesh-controller/internal/lease	30.837s
ok  	github.com/novox/mesh-controller/internal/licences	8.300s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.013s
ok  	github.com/novox/mesh-controller/internal/link	63.972s
ok  	github.com/novox/mesh-controller/internal/lint	2.432s
ok  	github.com/novox/mesh-controller/internal/outward	1.040s
ok  	github.com/novox/mesh-controller/internal/overlay	1.028s
ok  	github.com/novox/mesh-controller/internal/secrets	1.449s
ok  	github.com/novox/mesh-controller/internal/store	4.469s
ok  	github.com/novox/mesh-controller/internal/testbus	1.476s
ok  	github.com/novox/mesh-controller/internal/token	1.022s
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.34s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.25s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.26s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.30s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.23s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.31s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.26s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.14s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.30s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.27s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.28s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.23s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.21s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.22s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.60s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.36s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.20s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.18s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.18s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.47s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.30s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.41s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (0.29s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.23s)
  ./cmd/mesh-controller --- PASS: TestReplay349 (0.23s)
  ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.24s)
  ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
  ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.21s)
  ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
  ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.55s)
  ./cmd/mesh-controller --- PASS: TestReplay164 (0.36s)
  ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.22s)
  ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.20s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.21s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.61s)
  ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.21s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
  ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.25s)
  ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.40s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.28s)
  ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.29s)
  ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.27s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
  ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
  ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.24s)
  ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s)
  ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.24s)
  ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.20s)
  ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.19s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
  ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
  ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
  ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
  ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.09s)
**Merge check** at `704b21b3` Judged: head `704b21b3c547` merged into trunk `76304d9db817`; read beside it: mesh-catalog `e1c8965ddbf1`, mesh-controller-main `76304d9db817`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds mesh-controller → novox; no bus step - tier 0: mesh-controller - novox: receives mesh-controller - read by no module's build: cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go, cmd/mesh-controller/worker_order_test.go Run by the build seat on novox as `build-1791999399977255839` (`builds --log build-1791999399977255839`). ``` --- the gate: mesh-controller mesh-controller: ok, 60 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); 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 files asking for a setting without saying whether it is trusted: 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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-14T17:11:10Z 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-14T17:11:10Z modules the change moves: - mesh-controller (changed) 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 1 module(s) in 1 tier(s): mesh-controller notes: - cmd/mesh-controller/check_builds_test.go, cmd/mesh-controller/found_wait_test.go, cmd/mesh-controller/gate_followup_test.go, cmd/mesh-controller/gate_test.go, cmd/mesh-controller/issue352_test.go, cmd/mesh-controller/issue648_test.go, cmd/mesh-controller/lean_walk_test.go, cmd/mesh-controller/person_wait_test.go, cmd/mesh-controller/planner_records_test.go, cmd/mesh-controller/planner_rules_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/release_plan_test.go, cmd/mesh-controller/release_test.go, cmd/mesh-controller/replay318_test.go, cmd/mesh-controller/replay335_test.go, cmd/mesh-controller/replay336_test.go, cmd/mesh-controller/replays_test.go, cmd/mesh-controller/rest_at_once_test.go, cmd/mesh-controller/tier_send_test.go and cmd/mesh-controller/worker_order_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.213s ok github.com/novox/mesh-controller/cmd/mesh-controller 231.313s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.061s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.041s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.032s ok github.com/novox/mesh-controller/examples/route-proxy 1.222s ok github.com/novox/mesh-controller/internal/artifacts 1.101s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 6.800s ok github.com/novox/mesh-controller/internal/builder 71.972s ok github.com/novox/mesh-controller/internal/catalogue 9.409s ok github.com/novox/mesh-controller/internal/conditions 2.877s ok github.com/novox/mesh-controller/internal/envfile 1.046s ok github.com/novox/mesh-controller/internal/facts 1.049s ok github.com/novox/mesh-controller/internal/identity 8.684s ok github.com/novox/mesh-controller/internal/inventory 45.704s ok github.com/novox/mesh-controller/internal/lease 30.837s ok github.com/novox/mesh-controller/internal/licences 8.300s ok github.com/novox/mesh-controller/internal/licences/adapters 1.013s ok github.com/novox/mesh-controller/internal/link 63.972s ok github.com/novox/mesh-controller/internal/lint 2.432s ok github.com/novox/mesh-controller/internal/outward 1.040s ok github.com/novox/mesh-controller/internal/overlay 1.028s ok github.com/novox/mesh-controller/internal/secrets 1.449s ok github.com/novox/mesh-controller/internal/store 4.469s ok github.com/novox/mesh-controller/internal/testbus 1.476s ok github.com/novox/mesh-controller/internal/token 1.022s store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.34s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.25s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.26s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.30s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.23s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.31s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.26s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.14s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.30s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.27s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.28s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.23s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.21s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.22s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.60s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.36s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.20s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.18s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.18s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.47s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.30s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.41s) ./cmd/mesh-controller --- PASS: TestReplay340 (0.29s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.23s) ./cmd/mesh-controller --- PASS: TestReplay349 (0.23s) ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.24s) ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s) ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.21s) ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s) ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.55s) ./cmd/mesh-controller --- PASS: TestReplay164 (0.36s) ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.22s) ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.20s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.21s) ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.61s) ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.21s) ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s) ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.25s) ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.40s) ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.28s) ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.29s) ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.27s) ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s) ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s) ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.24s) ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s) ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.24s) ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.20s) ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.19s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s) ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s) ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s) ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s) ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.09s) ```
mesh-admin merged commit 4af9f1147d into main 2026-10-14 17:53:35 +00:00
mesh-admin deleted branch feat/lean-rollout 2026-10-14 17:53:35 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#332