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/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…
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.
Deliverynovox/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`.
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…
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
```
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
```
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…
mesh/merge-gate head 704b21b3c547 merged into trunk 76304d9db817 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
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
```
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)
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Implements novox/hq ADR 0360 (proposed, needs the operator's Approve): the operator's decision of 2026-10-14 for the leanest rollout.
release_plan.go: policy treated as together unlessgateFirstMachineor the module already has a first send from a walk begun before this change).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.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).gateFirstMachine(off), for walks begun before; its tests turn it on withwithTheGate(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) andTestABuildRollsToEveryMachineAtOnceWithNoGate. 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 callwithTheGate(t). None deleted;isBaseOfremoved as unused.Delivery
novox/mesh-controller@704b21b3c547— delivered since 2026-10-14T17:57:31ZDelivery plan — builds mesh-controller → novox; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
da8a5e9bJudged: head
da8a5e9bc0f7merged into trunk76304d9db817; read beside it: mesh-cataloge1c8965ddbf1, mesh-controller-main76304d9db817, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/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 moreDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on ace as
build-1791998423683653805(builds --log build-1791998423683653805).Merge check at
0e974138Judged: head
0e974138751emerged into trunk76304d9db817; read beside it: mesh-cataloge1c8965ddbf1, mesh-controller-main76304d9db817, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/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 moreDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on novox as
build-1791998516171531223(builds --log build-1791998516171531223).Merge check at
5b455b8aJudged: head
5b455b8a2438merged into trunk76304d9db817; read beside it: mesh-cataloge1c8965ddbf1, mesh-controller-main76304d9db817, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/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
Run by the build seat on ace as
build-1791999339227513841(builds --log build-1791999339227513841).Merge check at
704b21b3Judged: head
704b21b3c547merged into trunk76304d9db817; read beside it: mesh-cataloge1c8965ddbf1, mesh-controller-main76304d9db817, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/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 passedDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on novox as
build-1791999399977255839(builds --log build-1791999399977255839).