Fixes hq issue 721 (a change a module's program does not contain still rebuilds and rolls that module).
Proof. mesh-controller #335 changed one sentence in internal/inventory/walkphases.go. cmd/mesh-builder built from the source tree alone (no .git, -trimpath, as build-agent's image builds it) at a5500f73 and c2ec0a60: sha256 a7fe6422… vs 78f2b7a2…, 79 bytes apart. The only difference is Go's build ID, whose action ID hashes every input package; the content ID part is the same (HPdlp2UU…). Built with -ldflags=-buildid= both are c02a337c… The changed string is in neither binary.
Change.
builder: a merge check's build for the merge is compared with the build the mesh holds of the module (Held): the whole image (platform, config without Labels/Image/Hostname, every file by path, type, mode, owner, link, xattrs and bytes, never times). Equal on every artifact → CheckBuilt.Same ("unchanged: its program is the same as running build …") and SameAs (the held reference compared). A non-image artifact, no held build, or a failed comparison says nothing: the module moves as today.
controller: a walk is cut without a module when every pull request it answers was checked at the head it merged, each check found the module the same, and the mesh still holds the build it was compared with. It is named in Delivery.Unchanged with the check's sentence; a walk left with no module is done.
Tests: TestAModuleWhoseProgramDidNotChangeIsSaidUnchanged, TestAnImageWithAnotherEntrypointIsNotTheSame (internal/builder), TestAWalkLeavesOutAModuleWhoseProgramDidNotChange (cmd/mesh-controller). gofmt, go vet, go test -race on the changed packages pass locally.
The build ID itself is dropped from build-agent's and route-proxy's images in novox/mesh-catalog (same branch name), which goes after this.
Fixes hq issue 721 (a change a module's program does not contain still rebuilds and rolls that module).
**Proof.** mesh-controller #335 changed one sentence in internal/inventory/walkphases.go. cmd/mesh-builder built from the source tree alone (no .git, -trimpath, as build-agent's image builds it) at a5500f73 and c2ec0a60: sha256 a7fe6422… vs 78f2b7a2…, 79 bytes apart. The only difference is Go's build ID, whose action ID hashes every input package; the content ID part is the same (HPdlp2UU…). Built with -ldflags=-buildid= both are c02a337c… The changed string is in neither binary.
**Change.**
- builder: a merge check's build for the merge is compared with the build the mesh holds of the module (`Held`): the whole image (platform, config without Labels/Image/Hostname, every file by path, type, mode, owner, link, xattrs and bytes, never times). Equal on every artifact → `CheckBuilt.Same` ("unchanged: its program is the same as running build …") and `SameAs` (the held reference compared). A non-image artifact, no held build, or a failed comparison says nothing: the module moves as today.
- controller: a walk is cut without a module when every pull request it answers was checked at the head it merged, each check found the module the same, and the mesh still holds the build it was compared with. It is named in `Delivery.Unchanged` with the check's sentence; a walk left with no module is done.
Tests: `TestAModuleWhoseProgramDidNotChangeIsSaidUnchanged`, `TestAnImageWithAnotherEntrypointIsNotTheSame` (internal/builder), `TestAWalkLeavesOutAModuleWhoseProgramDidNotChange` (cmd/mesh-controller). gofmt, go vet, go test -race on the changed packages pass locally.
The build ID itself is dropped from build-agent's and route-proxy's images in novox/mesh-catalog (same branch name), which goes after this.
mesh/merge-gate head 32bd8b5d5fb2 merged into trunk c2ec0a601acb — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
A one-sentence change in a package mesh-builder imports but never reaches moved
build-agent. A merge check now compares each module it builds with the build the
mesh holds, the whole image without file times, labels or creation time, and a
walk is cut without a module every check of its pull requests found the same,
while the mesh still holds that build. A comparison that fails moves the module
as before.
Deliverynovox/mesh-controller@b34055f580d4 — failed since 2026-10-14T20:32:11Z
Covered: covered after its failure: a later walk that contains it was delivered: plan-1792009731456564734 (novox/mesh-controller at 60cc9ec3 into main, done, contains its merge 5d22d7df)
Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before route-proxy, build-agent is judged on its first machine
composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
Transitions
2026-10-14 19:56 (new) → proposed (announced): novox/mesh-controller#336's head announced
2026-10-14 19:59 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-14 19:59 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-14 20:14 ready → proposed (trunk moved): out of date: judged against trunk c2ec0a601a, the trunk is now 86057f455194; judged again on a recheck or when it is merged
2026-10-14 20:18 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-14 20:18 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-14 20:28 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 20:28 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 20:32 delivering → failed (failed): its walk failed, carrying its own commit: a gate on a first machine (what it carried put back), a build, a machine
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@b34055f580d4` — **failed** since 2026-10-14T20:32:11Z
**Covered**: covered after its failure: a later walk that contains it was delivered: plan-1792009731456564734 (novox/mesh-controller at 60cc9ec3 into main, done, contains its merge 5d22d7df)
**Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller, route-proxy
- tier 1: build-agent
- ace: receives route-proxy, build-agent
- g14: receives build-agent
- novox: receives mesh-controller, route-proxy, build-agent
- shanks: receives build-agent
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before route-proxy, build-agent is judged on its first machine
**Group** `fix/a-module-moves-only-when-its-program-changes`, in order: novox/mesh-controller@b34055f580d4 → novox/mesh-catalog@d94764f00168
- novox/mesh-controller@b34055f580d4 before novox/mesh-catalog@d94764f00168: declared, over built by
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Transitions**
- 2026-10-14 19:56 (new) → proposed (announced): novox/mesh-controller#336's head announced
- 2026-10-14 19:59 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-14 19:59 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-14 20:14 ready → proposed (trunk moved): out of date: judged against trunk c2ec0a601acb, the trunk is now 86057f455194; judged again on a recheck or when it is merged
- 2026-10-14 20:18 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-14 20:18 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-14 20:28 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 20:28 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 20:32 delivering → failed (failed): its walk failed, carrying its own commit: a gate on a first machine (what it carried put back), a build, a machine
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Merge check at 32bd8b5d
Judged: head 32bd8b5d5fb2 merged into trunk c2ec0a601acb; read beside it: mesh-catalog 482232e8c51c, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go
Run by the build seat on novox as build-1792004879060520962 (builds --log build-1792004879060520962).
--- the gate: build-agent, 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-14T19:01:09Z 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-14T19:01:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go and internal/builder/same_program_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.540s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.055s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.071s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.033s
ok github.com/novox/mesh-controller/examples/route-proxy 1.180s
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 9.680s
ok github.com/novox/mesh-controller/internal/catalogue 13.030s
ok github.com/novox/mesh-controller/internal/conditions 2.916s
ok github.com/novox/mesh-controller/internal/envfile 1.049s
ok github.com/novox/mesh-controller/internal/facts 1.069s
ok github.com/novox/mesh-controller/internal/identity 19.553s
ok github.com/novox/mesh-controller/internal/lease 10.200s
ok github.com/novox/mesh-controller/internal/licences 15.764s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.022s
--- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:105 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:110 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:26: 7 error branch(es) answer empty, each saying why
FAIL
FAIL github.com/novox/mesh-controller/internal/lint 2.224s
ok github.com/novox/mesh-controller/internal/outward 1.124s
ok github.com/novox/mesh-controller/internal/overlay 1.108s
ok github.com/novox/mesh-controller/internal/secrets 1.821s
ok github.com/novox/mesh-controller/internal/store 7.612s
ok github.com/novox/mesh-controller/internal/testbus 1.441s
ok github.com/novox/mesh-controller/internal/token 1.062s
FAIL
ok github.com/novox/mesh-controller/cmd/mesh-controller 96s (shard 1 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 101s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 108s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 91s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 85s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 94s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 102s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 99s (shard 8 of 8: 114 tests)
ok github.com/novox/mesh-controller/internal/inventory 40s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 35s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 36s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 39s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 92s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 37s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 103s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 67s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 24s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 22s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 21s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.87s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (2.63s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (2.71s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.91s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (1.42s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.74s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.50s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.82s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.59s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.62s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (2.20s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (2.32s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (1.15s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (1.86s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.74s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (2.45s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.61s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.54s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.88s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.97s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (2.11s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (1.04s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (1.81s)
./cmd/mesh-controller --- PASS: TestReplay201 (1.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.53s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.88s)
./cmd/mesh-controller --- PASS: TestReplay401 (1.15s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.97s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.81s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.90s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (1.47s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.65s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.64s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.49s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.88s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.23s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.99s)
./cmd/mesh-controller --- PASS: TestReplay164 (1.55s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (6.07s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (2.29s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (1.70s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (1.35s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (2.69s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (1.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (1.86s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (1.48s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (2.94s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.96s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (1.11s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (1.30s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.87s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (1.31s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.58s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (1.46s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (2.25s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (1.11s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.87s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.97s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.14s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.14s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.20s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.14s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.11s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.14s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.12s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.12s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.12s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.14s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.15s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.12s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.54s)
the suite failed: each package or shard that failed is said above with its output
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:105 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:110 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:26: 7 error branch(es) answer empty, each saying why
FAIL github.com/novox/mesh-controller/internal/lint 2.224s
**Merge check** at `32bd8b5d`
Judged: head `32bd8b5d5fb2` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `482232e8c51c`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go
Run by the build seat on novox as `build-1792004879060520962` (`builds --log build-1792004879060520962`).
```
--- the gate: build-agent, 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-14T19:01:09Z 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-14T19:01:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go and internal/builder/same_program_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.540s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.055s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.071s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.033s
ok github.com/novox/mesh-controller/examples/route-proxy 1.180s
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 9.680s
ok github.com/novox/mesh-controller/internal/catalogue 13.030s
ok github.com/novox/mesh-controller/internal/conditions 2.916s
ok github.com/novox/mesh-controller/internal/envfile 1.049s
ok github.com/novox/mesh-controller/internal/facts 1.069s
ok github.com/novox/mesh-controller/internal/identity 19.553s
ok github.com/novox/mesh-controller/internal/lease 10.200s
ok github.com/novox/mesh-controller/internal/licences 15.764s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.022s
--- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:105 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:110 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:26: 7 error branch(es) answer empty, each saying why
FAIL
FAIL github.com/novox/mesh-controller/internal/lint 2.224s
ok github.com/novox/mesh-controller/internal/outward 1.124s
ok github.com/novox/mesh-controller/internal/overlay 1.108s
ok github.com/novox/mesh-controller/internal/secrets 1.821s
ok github.com/novox/mesh-controller/internal/store 7.612s
ok github.com/novox/mesh-controller/internal/testbus 1.441s
ok github.com/novox/mesh-controller/internal/token 1.062s
FAIL
ok github.com/novox/mesh-controller/cmd/mesh-controller 96s (shard 1 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 101s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 108s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 91s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 85s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 94s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 102s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 99s (shard 8 of 8: 114 tests)
ok github.com/novox/mesh-controller/internal/inventory 40s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 35s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 36s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 39s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 92s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 37s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 103s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 67s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 24s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 22s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 21s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.87s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (2.63s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (2.71s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.91s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (1.42s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.74s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.50s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.82s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.59s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.62s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (2.20s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (2.32s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (1.15s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (1.86s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.74s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (2.45s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.61s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.54s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.88s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.97s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (2.11s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (1.04s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (1.81s)
./cmd/mesh-controller --- PASS: TestReplay201 (1.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.53s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.88s)
./cmd/mesh-controller --- PASS: TestReplay401 (1.15s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.97s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.81s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.90s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (1.47s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.65s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.64s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.49s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.88s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.23s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.99s)
./cmd/mesh-controller --- PASS: TestReplay164 (1.55s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (6.07s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (2.29s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (1.70s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (1.35s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (2.69s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (1.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (1.86s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (1.48s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (2.94s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.96s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (1.11s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (1.30s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.87s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (1.31s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.58s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (1.46s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (2.25s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (1.11s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.87s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.97s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.14s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.14s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.20s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.14s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.11s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.14s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.12s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.12s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.12s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.14s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.15s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.12s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.54s)
the suite failed: each package or shard that failed is said above with its output
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:105 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:23: cmd/mesh-controller/same_program.go:110 (leaveSameAsRunning) answers an empty collection and no error when it could not read: refuse by name (return the error), or say at the return why empty is the truth (// empty-on-error: <why>)
emptyonerror_test.go:26: 7 error branch(es) answer empty, each saying why
FAIL github.com/novox/mesh-controller/internal/lint 2.224s
```
mesh/merge-gate head e6a28a2d2814 merged into trunk c2ec0a601acb — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
Merge check at e6a28a2d
Judged: head e6a28a2d2814 merged into trunk c2ec0a601acb; read beside it: mesh-catalog 482232e8c51c, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go
Run by the build seat on ace as build-1792005340069273947 (builds --log build-1792005340069273947).
--- the gate: build-agent, 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-14T19:10:09Z 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-14T19:10:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go and internal/builder/same_program_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.119s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.029s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.025s
ok github.com/novox/mesh-controller/examples/route-proxy 1.121s
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.044s
ok github.com/novox/mesh-controller/internal/catalogue 12.691s
ok github.com/novox/mesh-controller/internal/conditions 2.812s
ok github.com/novox/mesh-controller/internal/envfile 1.042s
ok github.com/novox/mesh-controller/internal/facts 1.040s
ok github.com/novox/mesh-controller/internal/identity 6.394s
ok github.com/novox/mesh-controller/internal/lease 10.195s
ok github.com/novox/mesh-controller/internal/licences 4.896s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.033s
ok github.com/novox/mesh-controller/internal/lint 2.829s
ok github.com/novox/mesh-controller/internal/outward 1.075s
ok github.com/novox/mesh-controller/internal/overlay 1.055s
ok github.com/novox/mesh-controller/internal/secrets 1.513s
ok github.com/novox/mesh-controller/internal/store 3.556s
ok github.com/novox/mesh-controller/internal/testbus 1.302s
ok github.com/novox/mesh-controller/internal/token 1.078s
ok github.com/novox/mesh-controller/cmd/mesh-controller 25s (shard 1 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 29s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 31s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 27s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 23s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 25s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 30s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 28s (shard 8 of 8: 114 tests)
ok github.com/novox/mesh-controller/internal/inventory 14s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 12s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 12s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 13s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 32s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 13s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 26s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 16s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 14s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.58s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.48s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.56s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.46s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.40s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.37s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.07s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.53s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.25s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.32s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.47s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.50s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.40s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.32s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.40s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.42s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.25s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.23s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.25s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.27s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.26s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.36s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.25s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.29s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.21s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.40s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.75s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.42s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.23s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (1.02s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.35s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.25s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.41s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.61s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.23s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.25s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.27s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.21s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.23s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.52s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.19s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.21s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.09s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.10s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.64s)
**Merge check** at `e6a28a2d`
Judged: head `e6a28a2d2814` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `482232e8c51c`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go
Run by the build seat on ace as `build-1792005340069273947` (`builds --log build-1792005340069273947`).
```
--- the gate: build-agent, 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-14T19:10:09Z 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-14T19:10:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go and internal/builder/same_program_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.119s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.029s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.025s
ok github.com/novox/mesh-controller/examples/route-proxy 1.121s
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.044s
ok github.com/novox/mesh-controller/internal/catalogue 12.691s
ok github.com/novox/mesh-controller/internal/conditions 2.812s
ok github.com/novox/mesh-controller/internal/envfile 1.042s
ok github.com/novox/mesh-controller/internal/facts 1.040s
ok github.com/novox/mesh-controller/internal/identity 6.394s
ok github.com/novox/mesh-controller/internal/lease 10.195s
ok github.com/novox/mesh-controller/internal/licences 4.896s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.033s
ok github.com/novox/mesh-controller/internal/lint 2.829s
ok github.com/novox/mesh-controller/internal/outward 1.075s
ok github.com/novox/mesh-controller/internal/overlay 1.055s
ok github.com/novox/mesh-controller/internal/secrets 1.513s
ok github.com/novox/mesh-controller/internal/store 3.556s
ok github.com/novox/mesh-controller/internal/testbus 1.302s
ok github.com/novox/mesh-controller/internal/token 1.078s
ok github.com/novox/mesh-controller/cmd/mesh-controller 25s (shard 1 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 29s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 31s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 27s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 23s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 25s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 30s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 28s (shard 8 of 8: 114 tests)
ok github.com/novox/mesh-controller/internal/inventory 14s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 12s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 12s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 13s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 32s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 13s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 26s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 16s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 14s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.58s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.48s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.56s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.46s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.40s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.37s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.07s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.53s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.25s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.32s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.47s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.50s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.40s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.32s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.40s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.42s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.25s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.23s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.25s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.27s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.26s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.36s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.25s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.29s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.21s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.40s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.75s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.42s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.23s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (1.02s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.35s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.25s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.41s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.61s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.23s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.25s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.27s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.21s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.23s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.52s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.19s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.21s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.09s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.10s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.64s)
```
mesh/merge-gate head 4390589c61a4 merged into trunk c2ec0a601acb — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
Merge check at 4390589c
Judged: head 4390589c61a4 merged into trunk c2ec0a601acb; read beside it: mesh-catalog 482232e8c51c, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go
Run by the build seat on ace as build-1792005569383627685 (builds --log build-1792005569383627685).
--- the gate: build-agent, 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-14T19:10:09Z 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-14T19:10:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go and internal/builder/same_program_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.098s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/route-proxy 1.103s
ok github.com/novox/mesh-controller/internal/artifacts 1.049s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.955s
ok github.com/novox/mesh-controller/internal/catalogue 13.455s
ok github.com/novox/mesh-controller/internal/conditions 2.649s
ok github.com/novox/mesh-controller/internal/envfile 1.039s
ok github.com/novox/mesh-controller/internal/facts 1.043s
ok github.com/novox/mesh-controller/internal/identity 6.491s
ok github.com/novox/mesh-controller/internal/lease 10.216s
ok github.com/novox/mesh-controller/internal/licences 4.551s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.041s
ok github.com/novox/mesh-controller/internal/lint 2.444s
ok github.com/novox/mesh-controller/internal/outward 1.063s
ok github.com/novox/mesh-controller/internal/overlay 1.047s
ok github.com/novox/mesh-controller/internal/secrets 1.474s
ok github.com/novox/mesh-controller/internal/store 3.410s
ok github.com/novox/mesh-controller/internal/testbus 1.239s
ok github.com/novox/mesh-controller/internal/token 1.041s
ok github.com/novox/mesh-controller/cmd/mesh-controller 27s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 29s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 34s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 30s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 24s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 25s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 26s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 27s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 13s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 14s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 36s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 14s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 32s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 17s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 14s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.40s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.33s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.32s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.36s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.30s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.26s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.30s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.25s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.30s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.26s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.25s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.44s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.38s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.39s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.36s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.28s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.34s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.26s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.34s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.35s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.25s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.22s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.17s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.28s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.71s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.27s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (2.29s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.25s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.25s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.70s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.25s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.91s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.81s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.32s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.30s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.18s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (2.69s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.40s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.31s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.42s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.18s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.18s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.11s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.10s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.11s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.21s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.13s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.13s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.47s)
**Merge check** at `4390589c`
Judged: head `4390589c61a4` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `482232e8c51c`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go
Run by the build seat on ace as `build-1792005569383627685` (`builds --log build-1792005569383627685`).
```
--- the gate: build-agent, 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-14T19:10:09Z 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-14T19:10:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go and internal/builder/same_program_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.098s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/route-proxy 1.103s
ok github.com/novox/mesh-controller/internal/artifacts 1.049s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.955s
ok github.com/novox/mesh-controller/internal/catalogue 13.455s
ok github.com/novox/mesh-controller/internal/conditions 2.649s
ok github.com/novox/mesh-controller/internal/envfile 1.039s
ok github.com/novox/mesh-controller/internal/facts 1.043s
ok github.com/novox/mesh-controller/internal/identity 6.491s
ok github.com/novox/mesh-controller/internal/lease 10.216s
ok github.com/novox/mesh-controller/internal/licences 4.551s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.041s
ok github.com/novox/mesh-controller/internal/lint 2.444s
ok github.com/novox/mesh-controller/internal/outward 1.063s
ok github.com/novox/mesh-controller/internal/overlay 1.047s
ok github.com/novox/mesh-controller/internal/secrets 1.474s
ok github.com/novox/mesh-controller/internal/store 3.410s
ok github.com/novox/mesh-controller/internal/testbus 1.239s
ok github.com/novox/mesh-controller/internal/token 1.041s
ok github.com/novox/mesh-controller/cmd/mesh-controller 27s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 29s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 34s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 30s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 24s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 25s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 26s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 27s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 13s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 14s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 36s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 14s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 32s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 17s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 14s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.40s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.33s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.32s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.36s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.30s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.26s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.30s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.25s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.30s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.26s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.25s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.44s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.38s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.39s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.36s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.28s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.34s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.26s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.34s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.35s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.25s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.22s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.17s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.28s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.71s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.27s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (2.29s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.25s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.25s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.70s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.25s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.91s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.81s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.32s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.30s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.18s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (2.69s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.40s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.31s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.42s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.18s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.18s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.11s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.10s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.11s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.21s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.13s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.13s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.47s)
```
mesh/merge-gate head 6acce60f8bd3 merged into trunk c2ec0a601acb — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
Merge check at 6acce60f
Judged: head 6acce60f8bd3 merged into trunk c2ec0a601acb; read beside it: mesh-catalog 482232e8c51c, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, testdata/store-tests
Run by the build seat on shanks as build-1792005849305958885 (builds --log build-1792005849305958885).
--- the gate: build-agent, 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-14T19:10:09Z 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-14T19:10:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go and testdata/store-tests 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.245s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.035s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.031s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.036s
ok github.com/novox/mesh-controller/examples/route-proxy 1.299s
ok github.com/novox/mesh-controller/internal/artifacts 1.180s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.411s
ok github.com/novox/mesh-controller/internal/catalogue 15.604s
ok github.com/novox/mesh-controller/internal/conditions 3.326s
ok github.com/novox/mesh-controller/internal/envfile 1.063s
ok github.com/novox/mesh-controller/internal/facts 1.090s
ok github.com/novox/mesh-controller/internal/identity 8.116s
ok github.com/novox/mesh-controller/internal/lease 10.311s
ok github.com/novox/mesh-controller/internal/licences 6.249s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.091s
ok github.com/novox/mesh-controller/internal/lint 3.453s
ok github.com/novox/mesh-controller/internal/outward 1.198s
ok github.com/novox/mesh-controller/internal/overlay 1.092s
ok github.com/novox/mesh-controller/internal/secrets 1.808s
ok github.com/novox/mesh-controller/internal/store 3.989s
ok github.com/novox/mesh-controller/internal/testbus 1.378s
ok github.com/novox/mesh-controller/internal/token 1.075s
ok github.com/novox/mesh-controller/cmd/mesh-controller 35s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 37s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 44s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 39s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 31s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 34s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 35s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 36s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 21s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 21s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 44s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 17s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 38s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 23s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 18s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 18s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 18s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.59s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.59s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.63s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.57s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.61s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.60s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (5.89s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.54s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.29s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.50s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.34s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.32s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.49s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.46s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.45s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.35s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.61s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.30s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.37s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.44s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.97s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.39s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.54s)
./cmd/mesh-controller --- PASS: TestReplay340 (1.10s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.31s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.47s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.37s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.61s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.31s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.20s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.88s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.64s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.32s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.36s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.38s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.28s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.82s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.31s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.26s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.41s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.76s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.45s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (2.32s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.61s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.92s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.39s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.40s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.39s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.33s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.69s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (1.03s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.38s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.10s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.09s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.12s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.45s)
**Merge check** at `6acce60f`
Judged: head `6acce60f8bd3` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `482232e8c51c`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, testdata/store-tests
Run by the build seat on shanks as `build-1792005849305958885` (`builds --log build-1792005849305958885`).
```
--- the gate: build-agent, 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-14T19:10:09Z 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-14T19:10:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go and testdata/store-tests 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.245s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.035s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.031s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.036s
ok github.com/novox/mesh-controller/examples/route-proxy 1.299s
ok github.com/novox/mesh-controller/internal/artifacts 1.180s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.411s
ok github.com/novox/mesh-controller/internal/catalogue 15.604s
ok github.com/novox/mesh-controller/internal/conditions 3.326s
ok github.com/novox/mesh-controller/internal/envfile 1.063s
ok github.com/novox/mesh-controller/internal/facts 1.090s
ok github.com/novox/mesh-controller/internal/identity 8.116s
ok github.com/novox/mesh-controller/internal/lease 10.311s
ok github.com/novox/mesh-controller/internal/licences 6.249s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.091s
ok github.com/novox/mesh-controller/internal/lint 3.453s
ok github.com/novox/mesh-controller/internal/outward 1.198s
ok github.com/novox/mesh-controller/internal/overlay 1.092s
ok github.com/novox/mesh-controller/internal/secrets 1.808s
ok github.com/novox/mesh-controller/internal/store 3.989s
ok github.com/novox/mesh-controller/internal/testbus 1.378s
ok github.com/novox/mesh-controller/internal/token 1.075s
ok github.com/novox/mesh-controller/cmd/mesh-controller 35s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 37s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 44s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 39s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 31s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 34s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 35s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 36s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 21s (shard 2 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 21s (shard 3 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 44s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 17s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 38s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 23s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 18s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 18s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 18s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.59s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.59s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.63s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.57s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.61s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.60s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (5.89s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.54s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.29s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.50s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.34s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.32s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.49s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.46s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.45s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.35s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.61s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.30s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.37s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.44s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.97s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.39s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.54s)
./cmd/mesh-controller --- PASS: TestReplay340 (1.10s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.31s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.47s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.37s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.61s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.31s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.20s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.88s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.64s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.32s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.36s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.38s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.28s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.82s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.31s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.26s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.41s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.76s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.45s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (2.32s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.61s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.92s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.39s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.40s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.39s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.33s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.69s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (1.03s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.38s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.10s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.09s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.12s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.45s)
```
mesh/merge-gate head 38c87a7e4714 merged into trunk c2ec0a601acb — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
Merge check at 38c87a7e
Judged: head 38c87a7e4714 merged into trunk c2ec0a601acb; read beside it: mesh-catalog 482232e8c51c, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go, testdata/store-tests
Run by the build seat on novox as build-1792006228398870024 (builds --log build-1792006228398870024).
plan-1792006526000000000 waits for mesh-delivery's word before its first tier is asked
novox/mesh-controller merged into main (k2); group pr/k2 has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792006766000000000 — assembling: 90 s left (at the latest 19:49:26) — group pr/k2 has a member still to merge: novox/elsewhere (ready); grouped: novox/mesh-controller@k2 (on the controller's own path); plan not yet calculated
mesh-controller: read whole: no build source recorded, so every file of its repository is its build source
plan-1792006766000000000 cut: novox/mesh-controller k2, answering novox/mesh-controller@k2; 1 module(s) in 1 tier(s)
0: mesh-controller
tier 0: tier 0: tier 0: build-sudo: sudo is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-host: mesh-host is new to the catalogue, and novox/mesh-host on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: unifi is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: the build seat did not say whether 1111111a is on its repository's trunk (it predates ADR 0238); registered as before
b-2: the build seat did not say whether 9c97a8a1 is on its repository's trunk (it predates ADR 0238); registered as before
b-3: the build seat did not say whether deadbeef is on its repository's trunk (it predates ADR 0238); registered as before
made the bus a certificate for [mesh-broker], valid until 2036-10-11T19:36:13Z
/tmp/TestTheBusCertificateIsMadeOnce1065719370/001/tls.crt
/tmp/TestTheBusCertificateIsMadeOnce1065719370/001/tls.key
the bus already has a certificate at /tmp/TestTheBusCertificateIsMadeOnce1065719370/001/tls.crt, and it was left alone
build-1: a dry run of ssh://forge/app.git on unreviewed, not taken in
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 1s, for at most 1m0s in all (novox/hq issue 486)
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 2s, for at most 1m0s in all (novox/hq issue 486)
the forge answered about novox/mesh-catalog again, after 3s (novox/hq issue 486)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: app passed its gate on anchor (healthy 1 times over 0s, by a leaf module's rule: one reading (novox/hq ADR 0304)); the rest are sent
plan-gate: tier 0 built; sent app to laptop, one send each
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
KEPT: anchor was last sent mesh-controller c2bbbbbb, and the mesh holds the older c1aaaaaa (asked 2026-10-14T17:36:31Z, before 2026-10-14T19:35:31Z): a send there keeps c2bbbbbb; `push anchor` sends the older build, and a newer merge or `rebuild mesh-controller` moves the record forward (novox/hq issue 201)
novox/one merged into main (c1); group feat/a has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792006526000000000 — assembling: 90 s left (at the latest 19:45:26) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c1; plan not yet calculated
novox/two merged into main (c2); group feat/b has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792006531000000000 — assembling: 90 s left (at the latest 19:45:31) — group feat/b has a member still to merge: novox/elsewhere (ready); grouped: novox/two@c2; plan not yet calculated
novox/one merged into main (c3); related to plan-1792006526000000000 (both change novox/one), and to plan-1792006531000000000 (both are members of group feat/b), folded into it, it joins plan-1792006526000000000 — assembling: 90 s left (at the latest 19:45:26) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c3 (answers c1), novox/two@c2; plan not yet calculated
one: read whole: no build source recorded, so every file of its repository is its build source
two: read whole: no build source recorded, so every file of its repository is its build source
plan-1792006526000000000 cut: novox/one c3, novox/two c2, answering novox/one@c1, novox/one@c3, novox/two@c2; 2 module(s) in 1 tier(s)
0: one, two
tier 0: tier 0: mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "token", as an ordinary call
mesh-cli (no call): operator on laptop asked "secret", as an ordinary call
mesh-cli (no call): operator on laptop asked "operator", as an ordinary call
mesh-cli (no call): operator on laptop asked "assign", as an ordinary call
novox/mesh-catalog merged into main (3da80a4b); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792006671530508586 — cut at once, sharing nothing with a batch assembling; grouped: novox/mesh-catalog@3da80a4b; plan not yet calculated
modules/sensors is a new module in novox/mesh-catalog and could not be built: cannot submit a build: nats: timeout — a hand `build` of it asks again
novox/mesh-catalog merged into main (3da80a4b); it changed nothing any module the mesh holds is built from
plan-1792006671530508586 (novox/mesh-catalog 3da80a4b): its merges move nothing the mesh holds
plan-457: c settled from the build records as built (build-c)
settings-1792006692283014995: the settings of notes on laptop — approved (ask s9): sent to laptop, one machine at a time, each judged
settings-1792006692332153627: the settings of notes on laptop — approved (ask s10): sent to laptop, one machine at a time, each judged
settings-1792006692341170309: the settings of notes on laptop — approved (ask s12): sent to laptop, one machine at a time, each judged
build-1792003095128388751: mailu is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-1792003095128388751: the build seat did not say whether c74f407a is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003096128388751: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003155128388751: the build seat did not say whether 1ab84e69 is on its repository's trunk (it predates ADR 0238); registered as before
tier 0: plan-retry: tier 0 done; asking tier 1: b
tier 1: build-1792006702936155049: could not build https://forge.example/novox/w1.git:
cancelled by hand
build-1792006702937155049: could not build https://forge.example/novox/w2.git:
cancelled by hand
build-1792006702935155049: could not build https://forge.example/novox/dead.git:
cancelled by hand
plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (m01, m02), the rest once its gate passes
plan-tier: tier 0 built; sent m01, m02 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
release-1792006709477900840: 2 build(s) wait for a gate on anchor, desk, laptop; one machine first, then the rest at once, each judged
release-1792006709477900840: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792006709477900840: passed on anchor; the rest are sent at once, each judged
release-1792006709477900840: sent desk 1 build(s) that waited for a gate; judging them there
release-1792006709477900840: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792006709477900840: released on anchor, desk, laptop
release-1792006710623352633: 2 build(s) wait for a gate on desk, laptop, anchor; one machine first, then the rest at once, each judged
release-1792006710623352633: sent desk 1 build(s) that waited for a gate; judging them there
release-1792006710623352633: passed on desk; the rest are sent at once, each judged
release-1792006710623352633: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792006710623352633: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792006710623352633: released on desk, laptop, anchor
novox/one merged into main (one1aaaa); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792006527000000000 — cut at once, sharing nothing with a batch assembling; grouped: novox/one@one1aaaa; plan not yet calculated
one: its build source changed: 1 changed file(s) in it, e.g. main.go
plan-1792006527000000000 cut: novox/one one1aaaa, answering novox/one@one1aaaa; 1 module(s) in 1 tier(s)
0: one
tier 0:
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)
same_program_test.go:129: the walk reads building, tiers [[one]], modules map[one:0xc000542300]; want done with nothing to walk
settings-1792006715066175288: the settings of app on the whole mesh — approved (ask s2): sent to anchor, laptop, one machine at a time, each judged
settings-1792006715066175288: sent anchor the settings of app on the whole mesh (ask s2), every build there kept; judging app there
settings-1792006715066175288: the settings of app on the whole mesh failed its gate on anchor: anchor failed what it was sent — the layer stays as the operator approved it, and the one it replaced is in `settings app` history; not sent: laptop
release-1792006715438888821: 1 build(s) wait for a gate on anchor, 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
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 19:38
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
release-1792006727083420508: 2 build(s) wait for a gate on anchor, laptop; one machine first, then the rest at once, each judged
release-1792006727083420508 releases it; `plans release-1792006727083420508` says where it is
FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 210s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 97s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 97s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 98s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 96s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 190s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 74s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 114s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 87s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 32s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 31s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.93s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (8.41s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (4.68s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (3.82s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (4.09s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (1.51s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.74s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (2.52s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.82s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (1.55s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (1.46s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (2.67s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.86s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (5.95s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (1.38s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (1.38s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.68s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (4.88s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (2.26s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (8.30s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (4.81s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (4.69s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (6.01s)
./cmd/mesh-controller --- PASS: TestReplay201 (2.09s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (3.89s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (1.14s)
./cmd/mesh-controller --- PASS: TestReplay401 (3.01s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (1.03s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (2.15s)
./cmd/mesh-controller --- PASS: TestReplay340 (3.65s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (1.68s)
./cmd/mesh-controller --- PASS: TestReplay349 (1.55s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (1.67s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (4.12s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (1.39s)
./cmd/mesh-controller --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (1.30s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.83s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (5.95s)
./cmd/mesh-controller --- PASS: TestReplay164 (1.50s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (1.90s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (5.96s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (3.08s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (2.92s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (20.28s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (7.32s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (13.95s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (1.87s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.91s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (1.96s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (1.81s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (1.01s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (1.42s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (1.64s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (1.63s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (1.99s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (1.68s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (1.05s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (1.76s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (1.86s)
./cmd/mesh-controller FAIL: go test exited 1
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.30s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.35s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (1.02s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.28s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.14s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.19s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.20s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.79s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.24s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.30s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.33s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.23s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.96s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.26s)
2 store test(s) listed in testdata/store-tests did not run and pass against the store
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)
same_program_test.go:129: the walk reads building, tiers [[one]], modules map[one:0xc000542300]; want done with nothing to walk
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 210s (shard 8 of 8: 115 tests)
**Merge check** at `38c87a7e`
Judged: head `38c87a7e4714` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `482232e8c51c`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go, testdata/store-tests
Run by the build seat on novox as `build-1792006228398870024` (`builds --log build-1792006228398870024`).
```
plan-1792006526000000000 waits for mesh-delivery's word before its first tier is asked
novox/mesh-controller merged into main (k2); group pr/k2 has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792006766000000000 — assembling: 90 s left (at the latest 19:49:26) — group pr/k2 has a member still to merge: novox/elsewhere (ready); grouped: novox/mesh-controller@k2 (on the controller's own path); plan not yet calculated
mesh-controller: read whole: no build source recorded, so every file of its repository is its build source
plan-1792006766000000000 cut: novox/mesh-controller k2, answering novox/mesh-controller@k2; 1 module(s) in 1 tier(s)
0: mesh-controller
tier 0: tier 0: tier 0: build-sudo: sudo is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-host: mesh-host is new to the catalogue, and novox/mesh-host on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: unifi is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: the build seat did not say whether 1111111a is on its repository's trunk (it predates ADR 0238); registered as before
b-2: the build seat did not say whether 9c97a8a1 is on its repository's trunk (it predates ADR 0238); registered as before
b-3: the build seat did not say whether deadbeef is on its repository's trunk (it predates ADR 0238); registered as before
made the bus a certificate for [mesh-broker], valid until 2036-10-11T19:36:13Z
/tmp/TestTheBusCertificateIsMadeOnce1065719370/001/tls.crt
/tmp/TestTheBusCertificateIsMadeOnce1065719370/001/tls.key
the bus already has a certificate at /tmp/TestTheBusCertificateIsMadeOnce1065719370/001/tls.crt, and it was left alone
build-1: a dry run of ssh://forge/app.git on unreviewed, not taken in
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 1s, for at most 1m0s in all (novox/hq issue 486)
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 2s, for at most 1m0s in all (novox/hq issue 486)
the forge answered about novox/mesh-catalog again, after 3s (novox/hq issue 486)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: app passed its gate on anchor (healthy 1 times over 0s, by a leaf module's rule: one reading (novox/hq ADR 0304)); the rest are sent
plan-gate: tier 0 built; sent app to laptop, one send each
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
KEPT: anchor was last sent mesh-controller c2bbbbbb, and the mesh holds the older c1aaaaaa (asked 2026-10-14T17:36:31Z, before 2026-10-14T19:35:31Z): a send there keeps c2bbbbbb; `push anchor` sends the older build, and a newer merge or `rebuild mesh-controller` moves the record forward (novox/hq issue 201)
novox/one merged into main (c1); group feat/a has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792006526000000000 — assembling: 90 s left (at the latest 19:45:26) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c1; plan not yet calculated
novox/two merged into main (c2); group feat/b has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792006531000000000 — assembling: 90 s left (at the latest 19:45:31) — group feat/b has a member still to merge: novox/elsewhere (ready); grouped: novox/two@c2; plan not yet calculated
novox/one merged into main (c3); related to plan-1792006526000000000 (both change novox/one), and to plan-1792006531000000000 (both are members of group feat/b), folded into it, it joins plan-1792006526000000000 — assembling: 90 s left (at the latest 19:45:26) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c3 (answers c1), novox/two@c2; plan not yet calculated
one: read whole: no build source recorded, so every file of its repository is its build source
two: read whole: no build source recorded, so every file of its repository is its build source
plan-1792006526000000000 cut: novox/one c3, novox/two c2, answering novox/one@c1, novox/one@c3, novox/two@c2; 2 module(s) in 1 tier(s)
0: one, two
tier 0: tier 0: mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "token", as an ordinary call
mesh-cli (no call): operator on laptop asked "secret", as an ordinary call
mesh-cli (no call): operator on laptop asked "operator", as an ordinary call
mesh-cli (no call): operator on laptop asked "assign", as an ordinary call
novox/mesh-catalog merged into main (3da80a4b); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792006671530508586 — cut at once, sharing nothing with a batch assembling; grouped: novox/mesh-catalog@3da80a4b; plan not yet calculated
modules/sensors is a new module in novox/mesh-catalog and could not be built: cannot submit a build: nats: timeout — a hand `build` of it asks again
novox/mesh-catalog merged into main (3da80a4b); it changed nothing any module the mesh holds is built from
plan-1792006671530508586 (novox/mesh-catalog 3da80a4b): its merges move nothing the mesh holds
plan-457: c settled from the build records as built (build-c)
settings-1792006692283014995: the settings of notes on laptop — approved (ask s9): sent to laptop, one machine at a time, each judged
settings-1792006692332153627: the settings of notes on laptop — approved (ask s10): sent to laptop, one machine at a time, each judged
settings-1792006692341170309: the settings of notes on laptop — approved (ask s12): sent to laptop, one machine at a time, each judged
build-1792003095128388751: mailu is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-1792003095128388751: the build seat did not say whether c74f407a is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003096128388751: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003155128388751: the build seat did not say whether 1ab84e69 is on its repository's trunk (it predates ADR 0238); registered as before
tier 0: plan-retry: tier 0 done; asking tier 1: b
tier 1: build-1792006702936155049: could not build https://forge.example/novox/w1.git:
cancelled by hand
build-1792006702937155049: could not build https://forge.example/novox/w2.git:
cancelled by hand
build-1792006702935155049: could not build https://forge.example/novox/dead.git:
cancelled by hand
plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (m01, m02), the rest once its gate passes
plan-tier: tier 0 built; sent m01, m02 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
release-1792006709477900840: 2 build(s) wait for a gate on anchor, desk, laptop; one machine first, then the rest at once, each judged
release-1792006709477900840: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792006709477900840: passed on anchor; the rest are sent at once, each judged
release-1792006709477900840: sent desk 1 build(s) that waited for a gate; judging them there
release-1792006709477900840: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792006709477900840: released on anchor, desk, laptop
release-1792006710623352633: 2 build(s) wait for a gate on desk, laptop, anchor; one machine first, then the rest at once, each judged
release-1792006710623352633: sent desk 1 build(s) that waited for a gate; judging them there
release-1792006710623352633: passed on desk; the rest are sent at once, each judged
release-1792006710623352633: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792006710623352633: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792006710623352633: released on desk, laptop, anchor
novox/one merged into main (one1aaaa); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792006527000000000 — cut at once, sharing nothing with a batch assembling; grouped: novox/one@one1aaaa; plan not yet calculated
one: its build source changed: 1 changed file(s) in it, e.g. main.go
plan-1792006527000000000 cut: novox/one one1aaaa, answering novox/one@one1aaaa; 1 module(s) in 1 tier(s)
0: one
tier 0:
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)
same_program_test.go:129: the walk reads building, tiers [[one]], modules map[one:0xc000542300]; want done with nothing to walk
settings-1792006715066175288: the settings of app on the whole mesh — approved (ask s2): sent to anchor, laptop, one machine at a time, each judged
settings-1792006715066175288: sent anchor the settings of app on the whole mesh (ask s2), every build there kept; judging app there
settings-1792006715066175288: the settings of app on the whole mesh failed its gate on anchor: anchor failed what it was sent — the layer stays as the operator approved it, and the one it replaced is in `settings app` history; not sent: laptop
release-1792006715438888821: 1 build(s) wait for a gate on anchor, 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
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 19:38
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
release-1792006727083420508: 2 build(s) wait for a gate on anchor, laptop; one machine first, then the rest at once, each judged
release-1792006727083420508 releases it; `plans release-1792006727083420508` says where it is
FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 210s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 97s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 97s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 98s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 96s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 190s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 74s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 114s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 87s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 32s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 31s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.93s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (8.41s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (4.68s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (3.82s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (4.09s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (1.51s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.74s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (2.52s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.82s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (1.55s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (1.46s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (2.67s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.86s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (5.95s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (1.38s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (1.38s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.68s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (4.88s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (2.26s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (8.30s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (4.81s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (4.69s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (6.01s)
./cmd/mesh-controller --- PASS: TestReplay201 (2.09s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (3.89s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (1.14s)
./cmd/mesh-controller --- PASS: TestReplay401 (3.01s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (1.03s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (2.15s)
./cmd/mesh-controller --- PASS: TestReplay340 (3.65s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (1.68s)
./cmd/mesh-controller --- PASS: TestReplay349 (1.55s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (1.67s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (4.12s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (1.39s)
./cmd/mesh-controller --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (1.30s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.83s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (5.95s)
./cmd/mesh-controller --- PASS: TestReplay164 (1.50s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (1.90s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (5.96s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (3.08s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (2.92s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (20.28s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (7.32s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (13.95s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (1.87s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.91s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (1.96s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (1.81s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (1.01s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (1.42s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (1.64s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (1.63s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (1.99s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (1.68s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (1.05s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (1.76s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (1.86s)
./cmd/mesh-controller FAIL: go test exited 1
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.30s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.35s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (1.02s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.28s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.14s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.19s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.20s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.79s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.24s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.30s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.33s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.23s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.96s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.26s)
2 store test(s) listed in testdata/store-tests did not run and pass against the store
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)
same_program_test.go:129: the walk reads building, tiers [[one]], modules map[one:0xc000542300]; want done with nothing to walk
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 210s (shard 8 of 8: 115 tests)
```
mesh/merge-gate head 480657d95b9b merged into trunk c2ec0a601acb — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
Merge check at 480657d9
Judged: head 480657d95b9b merged into trunk c2ec0a601acb; read beside it: mesh-catalog 7e3e62062bef, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go, testdata/store-tests
Run by the build seat on novox as build-1792007023596669464 (builds --log build-1792007023596669464).
tier 0: app: read whole: no build source recorded, so its directory is its build source; e.g. modules/app/module.json
notes: read whole: no build source recorded, so its directory is its build source; e.g. modules/notes/module.json
plan-1792007288000000000 cut: novox/mesh-catalog bbbb0002, answering novox/mesh-catalog@aaaa0001, novox/mesh-catalog@bbbb0002; 2 module(s) in 1 tier(s)
0: app, notes
plan-1792007288000000000 waits for mesh-delivery's word before its first tier is asked
novox/mesh-controller merged into main (k2); group pr/k2 has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792007528000000000 — assembling: 90 s left (at the latest 20:02:08) — group pr/k2 has a member still to merge: novox/elsewhere (ready); grouped: novox/mesh-controller@k2 (on the controller's own path); plan not yet calculated
mesh-controller: read whole: no build source recorded, so every file of its repository is its build source
plan-1792007528000000000 cut: novox/mesh-controller k2, answering novox/mesh-controller@k2; 1 module(s) in 1 tier(s)
0: mesh-controller
tier 0: tier 0: tier 0: build-sudo: sudo is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-host: mesh-host is new to the catalogue, and novox/mesh-host on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: unifi is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: the build seat did not say whether 1111111a is on its repository's trunk (it predates ADR 0238); registered as before
b-2: the build seat did not say whether 9c97a8a1 is on its repository's trunk (it predates ADR 0238); registered as before
b-3: the build seat did not say whether deadbeef is on its repository's trunk (it predates ADR 0238); registered as before
made the bus a certificate for [mesh-broker], valid until 2036-10-11T19:49:01Z
/tmp/TestTheBusCertificateIsMadeOnce3998696061/001/tls.crt
/tmp/TestTheBusCertificateIsMadeOnce3998696061/001/tls.key
the bus already has a certificate at /tmp/TestTheBusCertificateIsMadeOnce3998696061/001/tls.crt, and it was left alone
build-1: a dry run of ssh://forge/app.git on unreviewed, not taken in
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 1s, for at most 1m0s in all (novox/hq issue 486)
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 2s, for at most 1m0s in all (novox/hq issue 486)
the forge answered about novox/mesh-catalog again, after 3s (novox/hq issue 486)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: app passed its gate on anchor (healthy 1 times over 0s, by a leaf module's rule: one reading (novox/hq ADR 0304)); the rest are sent
plan-gate: tier 0 built; sent app to laptop, one send each
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
KEPT: anchor was last sent mesh-controller c2bbbbbb, and the mesh holds the older c1aaaaaa (asked 2026-10-14T17:49:37Z, before 2026-10-14T19:48:37Z): a send there keeps c2bbbbbb; `push anchor` sends the older build, and a newer merge or `rebuild mesh-controller` moves the record forward (novox/hq issue 201)
novox/one merged into main (c1); group feat/a has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792007288000000000 — assembling: 90 s left (at the latest 19:58:08) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c1; plan not yet calculated
novox/two merged into main (c2); group feat/b has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792007293000000000 — assembling: 90 s left (at the latest 19:58:13) — group feat/b has a member still to merge: novox/elsewhere (ready); grouped: novox/two@c2; plan not yet calculated
novox/one merged into main (c3); related to plan-1792007288000000000 (both change novox/one), and to plan-1792007293000000000 (both are members of group feat/b), folded into it, it joins plan-1792007288000000000 — assembling: 90 s left (at the latest 19:58:08) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c3 (answers c1), novox/two@c2; plan not yet calculated
one: read whole: no build source recorded, so every file of its repository is its build source
two: read whole: no build source recorded, so every file of its repository is its build source
plan-1792007288000000000 cut: novox/one c3, novox/two c2, answering novox/one@c1, novox/one@c3, novox/two@c2; 2 module(s) in 1 tier(s)
0: one, two
tier 0: tier 0: mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "token", as an ordinary call
mesh-cli (no call): operator on laptop asked "secret", as an ordinary call
mesh-cli (no call): operator on laptop asked "operator", as an ordinary call
mesh-cli (no call): operator on laptop asked "assign", as an ordinary call
novox/mesh-catalog merged into main (3da80a4b); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792007432315327416 — cut at once, sharing nothing with a batch assembling; grouped: novox/mesh-catalog@3da80a4b; plan not yet calculated
modules/sensors is a new module in novox/mesh-catalog and could not be built: cannot submit a build: nats: timeout — a hand `build` of it asks again
novox/mesh-catalog merged into main (3da80a4b); it changed nothing any module the mesh holds is built from
plan-1792007432315327416 (novox/mesh-catalog 3da80a4b): its merges move nothing the mesh holds
plan-457: c settled from the build records as built (build-c)
settings-1792007453109224608: the settings of notes on laptop — approved (ask s9): sent to laptop, one machine at a time, each judged
settings-1792007453227714491: the settings of notes on laptop — approved (ask s10): sent to laptop, one machine at a time, each judged
settings-1792007453235774517: the settings of notes on laptop — approved (ask s12): sent to laptop, one machine at a time, each judged
build-1792003854237194348: mailu is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-1792003854237194348: the build seat did not say whether c74f407a is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003855237194348: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003914237194348: the build seat did not say whether 1ab84e69 is on its repository's trunk (it predates ADR 0238); registered as before
tier 0: plan-retry: tier 0 done; asking tier 1: b
tier 1: build-1792007457094506344: could not build https://forge.example/novox/w1.git:
cancelled by hand
build-1792007457095506344: could not build https://forge.example/novox/w2.git:
cancelled by hand
build-1792007457093506344: could not build https://forge.example/novox/dead.git:
cancelled by hand
plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (m01, m02), the rest once its gate passes
plan-tier: tier 0 built; sent m01, m02 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
release-1792007469101564344: 2 build(s) wait for a gate on anchor, desk, laptop; one machine first, then the rest at once, each judged
release-1792007469101564344: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792007469101564344: passed on anchor; the rest are sent at once, each judged
release-1792007469101564344: sent desk 1 build(s) that waited for a gate; judging them there
release-1792007469101564344: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792007469101564344: released on anchor, desk, laptop
release-1792007471094009705: 2 build(s) wait for a gate on desk, laptop, anchor; one machine first, then the rest at once, each judged
release-1792007471094009705: sent desk 1 build(s) that waited for a gate; judging them there
release-1792007471094009705: passed on desk; the rest are sent at once, each judged
release-1792007471094009705: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792007471094009705: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792007471094009705: released on desk, laptop, anchor
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)
same_program_test.go:115: a build asked later is already what the module is: one is at a build asked 2026-10-14T19:51:12Z, and this one was asked 2026-10-14T18:48:08Z
settings-1792007474789745075: the settings of app on the whole mesh — approved (ask s2): sent to anchor, laptop, one machine at a time, each judged
settings-1792007474789745075: sent anchor the settings of app on the whole mesh (ask s2), every build there kept; judging app there
settings-1792007474789745075: the settings of app on the whole mesh failed its gate on anchor: anchor failed what it was sent — the layer stays as the operator approved it, and the one it replaced is in `settings app` history; not sent: laptop
release-1792007474932407657: 1 build(s) wait for a gate on anchor, 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
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 19:51
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
release-1792007477754071769: 2 build(s) wait for a gate on anchor, laptop; one machine first, then the rest at once, each judged
release-1792007477754071769 releases it; `plans release-1792007477754071769` says where it is
FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 189s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 127s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 128s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 127s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 119s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 192s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 123s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 198s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 155s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 37s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (3.15s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (1.22s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (1.79s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (2.47s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (3.89s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (5.97s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (3.57s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (1.88s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (2.74s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (1.88s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (1.40s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.71s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.78s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (1.10s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.76s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.89s)
./cmd/mesh-controller --- PASS: TestReplay237 (5.38s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (1.55s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (1.48s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (1.30s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (6.93s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (4.16s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (2.89s)
./cmd/mesh-controller --- PASS: TestReplay201 (1.19s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (1.19s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (2.49s)
./cmd/mesh-controller --- PASS: TestReplay401 (2.35s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (5.66s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (5.57s)
./cmd/mesh-controller --- PASS: TestReplay340 (3.92s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (6.35s)
./cmd/mesh-controller --- PASS: TestReplay349 (7.31s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (2.77s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (5.29s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (3.04s)
./cmd/mesh-controller --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (1.25s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.54s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (7.50s)
./cmd/mesh-controller --- PASS: TestReplay164 (8.50s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (1.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (3.63s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (1.11s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (1.98s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (4.44s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.99s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (2.35s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (2.25s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (1.77s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (3.17s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (4.11s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (2.11s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (2.51s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (2.24s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (1.61s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (1.70s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (1.32s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (1.41s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (11.04s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (10.57s)
./cmd/mesh-controller FAIL: go test exited 1
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.24s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.16s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.24s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.16s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.11s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.17s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.16s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.15s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.11s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.19s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.22s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.15s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.78s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.20s)
2 store test(s) listed in testdata/store-tests did not run and pass against the store
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)
same_program_test.go:115: a build asked later is already what the module is: one is at a build asked 2026-10-14T19:51:12Z, and this one was asked 2026-10-14T18:48:08Z
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 189s (shard 8 of 8: 115 tests)
**Merge check** at `480657d9`
Judged: head `480657d95b9b` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `7e3e62062bef`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go, testdata/store-tests
Run by the build seat on novox as `build-1792007023596669464` (`builds --log build-1792007023596669464`).
```
tier 0: app: read whole: no build source recorded, so its directory is its build source; e.g. modules/app/module.json
notes: read whole: no build source recorded, so its directory is its build source; e.g. modules/notes/module.json
plan-1792007288000000000 cut: novox/mesh-catalog bbbb0002, answering novox/mesh-catalog@aaaa0001, novox/mesh-catalog@bbbb0002; 2 module(s) in 1 tier(s)
0: app, notes
plan-1792007288000000000 waits for mesh-delivery's word before its first tier is asked
novox/mesh-controller merged into main (k2); group pr/k2 has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792007528000000000 — assembling: 90 s left (at the latest 20:02:08) — group pr/k2 has a member still to merge: novox/elsewhere (ready); grouped: novox/mesh-controller@k2 (on the controller's own path); plan not yet calculated
mesh-controller: read whole: no build source recorded, so every file of its repository is its build source
plan-1792007528000000000 cut: novox/mesh-controller k2, answering novox/mesh-controller@k2; 1 module(s) in 1 tier(s)
0: mesh-controller
tier 0: tier 0: tier 0: build-sudo: sudo is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-host: mesh-host is new to the catalogue, and novox/mesh-host on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: unifi is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-1: the build seat did not say whether 1111111a is on its repository's trunk (it predates ADR 0238); registered as before
b-2: the build seat did not say whether 9c97a8a1 is on its repository's trunk (it predates ADR 0238); registered as before
b-3: the build seat did not say whether deadbeef is on its repository's trunk (it predates ADR 0238); registered as before
made the bus a certificate for [mesh-broker], valid until 2036-10-11T19:49:01Z
/tmp/TestTheBusCertificateIsMadeOnce3998696061/001/tls.crt
/tmp/TestTheBusCertificateIsMadeOnce3998696061/001/tls.key
the bus already has a certificate at /tmp/TestTheBusCertificateIsMadeOnce3998696061/001/tls.crt, and it was left alone
build-1: a dry run of ssh://forge/app.git on unreviewed, not taken in
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 1s, for at most 1m0s in all (novox/hq issue 486)
the forge cannot be asked about novox/mesh-catalog now (cannot ask gitea.gitea_api: nothing serves it); asking again in 2s, for at most 1m0s in all (novox/hq issue 486)
the forge answered about novox/mesh-catalog again, after 3s (novox/hq issue 486)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: app passed its gate on anchor (healthy 1 times over 0s, by a leaf module's rule: one reading (novox/hq ADR 0304)); the rest are sent
plan-gate: tier 0 built; sent app to laptop, one send each
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
KEPT: anchor was last sent mesh-controller c2bbbbbb, and the mesh holds the older c1aaaaaa (asked 2026-10-14T17:49:37Z, before 2026-10-14T19:48:37Z): a send there keeps c2bbbbbb; `push anchor` sends the older build, and a newer merge or `rebuild mesh-controller` moves the record forward (novox/hq issue 201)
novox/one merged into main (c1); group feat/a has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792007288000000000 — assembling: 90 s left (at the latest 19:58:08) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c1; plan not yet calculated
novox/two merged into main (c2); group feat/b has a member still to merge: novox/elsewhere (ready), it waits for the window in a batch of its own, it joins plan-1792007293000000000 — assembling: 90 s left (at the latest 19:58:13) — group feat/b has a member still to merge: novox/elsewhere (ready); grouped: novox/two@c2; plan not yet calculated
novox/one merged into main (c3); related to plan-1792007288000000000 (both change novox/one), and to plan-1792007293000000000 (both are members of group feat/b), folded into it, it joins plan-1792007288000000000 — assembling: 90 s left (at the latest 19:58:08) — group feat/a has a member still to merge: novox/elsewhere (ready); grouped: novox/one@c3 (answers c1), novox/two@c2; plan not yet calculated
one: read whole: no build source recorded, so every file of its repository is its build source
two: read whole: no build source recorded, so every file of its repository is its build source
plan-1792007288000000000 cut: novox/one c3, novox/two c2, answering novox/one@c1, novox/one@c3, novox/two@c2; 2 module(s) in 1 tier(s)
0: one, two
tier 0: tier 0: mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "node", as an ordinary call
mesh-cli (no call): operator on laptop asked "token", as an ordinary call
mesh-cli (no call): operator on laptop asked "secret", as an ordinary call
mesh-cli (no call): operator on laptop asked "operator", as an ordinary call
mesh-cli (no call): operator on laptop asked "assign", as an ordinary call
novox/mesh-catalog merged into main (3da80a4b); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792007432315327416 — cut at once, sharing nothing with a batch assembling; grouped: novox/mesh-catalog@3da80a4b; plan not yet calculated
modules/sensors is a new module in novox/mesh-catalog and could not be built: cannot submit a build: nats: timeout — a hand `build` of it asks again
novox/mesh-catalog merged into main (3da80a4b); it changed nothing any module the mesh holds is built from
plan-1792007432315327416 (novox/mesh-catalog 3da80a4b): its merges move nothing the mesh holds
plan-457: c settled from the build records as built (build-c)
settings-1792007453109224608: the settings of notes on laptop — approved (ask s9): sent to laptop, one machine at a time, each judged
settings-1792007453227714491: the settings of notes on laptop — approved (ask s10): sent to laptop, one machine at a time, each judged
settings-1792007453235774517: the settings of notes on laptop — approved (ask s12): sent to laptop, one machine at a time, each judged
build-1792003854237194348: mailu is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-1792003854237194348: the build seat did not say whether c74f407a is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003855237194348: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1792003914237194348: the build seat did not say whether 1ab84e69 is on its repository's trunk (it predates ADR 0238); registered as before
tier 0: plan-retry: tier 0 done; asking tier 1: b
tier 1: build-1792007457094506344: could not build https://forge.example/novox/w1.git:
cancelled by hand
build-1792007457095506344: could not build https://forge.example/novox/w2.git:
cancelled by hand
build-1792007457093506344: could not build https://forge.example/novox/dead.git:
cancelled by hand
plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (m01, m02), the rest once its gate passes
plan-tier: tier 0 built; sent m01, m02 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
release-1792007469101564344: 2 build(s) wait for a gate on anchor, desk, laptop; one machine first, then the rest at once, each judged
release-1792007469101564344: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792007469101564344: passed on anchor; the rest are sent at once, each judged
release-1792007469101564344: sent desk 1 build(s) that waited for a gate; judging them there
release-1792007469101564344: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792007469101564344: released on anchor, desk, laptop
release-1792007471094009705: 2 build(s) wait for a gate on desk, laptop, anchor; one machine first, then the rest at once, each judged
release-1792007471094009705: sent desk 1 build(s) that waited for a gate; judging them there
release-1792007471094009705: passed on desk; the rest are sent at once, each judged
release-1792007471094009705: sent laptop 2 build(s) that waited for a gate; judging them there
release-1792007471094009705: sent anchor 1 build(s) that waited for a gate; judging them there
release-1792007471094009705: released on desk, laptop, anchor
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)
same_program_test.go:115: a build asked later is already what the module is: one is at a build asked 2026-10-14T19:51:12Z, and this one was asked 2026-10-14T18:48:08Z
settings-1792007474789745075: the settings of app on the whole mesh — approved (ask s2): sent to anchor, laptop, one machine at a time, each judged
settings-1792007474789745075: sent anchor the settings of app on the whole mesh (ask s2), every build there kept; judging app there
settings-1792007474789745075: the settings of app on the whole mesh failed its gate on anchor: anchor failed what it was sent — the layer stays as the operator approved it, and the one it replaced is in `settings app` history; not sent: laptop
release-1792007474932407657: 1 build(s) wait for a gate on anchor, 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
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 19:51
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
release-1792007477754071769: 2 build(s) wait for a gate on anchor, laptop; one machine first, then the rest at once, each judged
release-1792007477754071769 releases it; `plans release-1792007477754071769` says where it is
FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 189s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 127s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 128s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 127s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 119s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 192s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 123s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 198s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 155s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 37s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 30s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (3.15s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (1.22s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (1.79s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (2.47s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (3.89s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (5.97s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (3.57s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (1.88s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (2.74s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (1.88s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (1.40s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.71s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.78s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (1.10s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.76s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.89s)
./cmd/mesh-controller --- PASS: TestReplay237 (5.38s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (1.55s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (1.48s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (1.30s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (6.93s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (4.16s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (2.89s)
./cmd/mesh-controller --- PASS: TestReplay201 (1.19s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (1.19s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (2.49s)
./cmd/mesh-controller --- PASS: TestReplay401 (2.35s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (5.66s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (5.57s)
./cmd/mesh-controller --- PASS: TestReplay340 (3.92s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (6.35s)
./cmd/mesh-controller --- PASS: TestReplay349 (7.31s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (2.77s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (5.29s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (3.04s)
./cmd/mesh-controller --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (1.25s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.54s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (7.50s)
./cmd/mesh-controller --- PASS: TestReplay164 (8.50s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (1.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (3.63s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (1.11s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (1.98s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (4.44s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.99s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (2.35s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (2.25s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (1.77s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (3.17s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (4.11s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (2.11s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (2.51s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (2.24s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (1.61s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (1.70s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (1.32s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (1.41s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (11.04s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (10.57s)
./cmd/mesh-controller FAIL: go test exited 1
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.24s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.16s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.24s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.16s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.11s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.17s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.16s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.15s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.11s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.19s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.22s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.15s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.78s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.20s)
2 store test(s) listed in testdata/store-tests did not run and pass against the store
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)
same_program_test.go:115: a build asked later is already what the module is: one is at a build asked 2026-10-14T19:51:12Z, and this one was asked 2026-10-14T18:48:08Z
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 189s (shard 8 of 8: 115 tests)
```
mesh/delivery covered after its failure: a later walk that contains it was delivered: plan-1792009731456564734 (novox/mesh-controller at 60cc9ec3 into ma…
mesh/delivery-group group fix/a-module-moves-only-when-its-program-changes delivering: 1 of 2 delivered; novox/mesh-catalog@d94764f00168, stopped for a member …
Merge check at b34055f5
Judged: head b34055f580d4 merged into trunk c2ec0a601acb; read beside it: mesh-catalog 7e3e62062bef, mesh-controller-main c2ec0a601acb, 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: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go, testdata/store-tests
Run by the build seat on ace as build-1792007808557273708 (builds --log build-1792007808557273708).
--- the gate: build-agent, 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-14T19:40:09Z 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-14T19:40:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go and testdata/store-tests 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.129s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.035s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/route-proxy 1.124s
ok github.com/novox/mesh-controller/internal/artifacts 1.065s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.568s
ok github.com/novox/mesh-controller/internal/catalogue 16.167s
ok github.com/novox/mesh-controller/internal/conditions 2.644s
ok github.com/novox/mesh-controller/internal/envfile 1.024s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 7.879s
ok github.com/novox/mesh-controller/internal/lease 10.226s
ok github.com/novox/mesh-controller/internal/licences 5.775s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.065s
ok github.com/novox/mesh-controller/internal/lint 2.614s
ok github.com/novox/mesh-controller/internal/outward 1.056s
ok github.com/novox/mesh-controller/internal/overlay 1.040s
ok github.com/novox/mesh-controller/internal/secrets 1.457s
ok github.com/novox/mesh-controller/internal/store 3.479s
ok github.com/novox/mesh-controller/internal/testbus 1.243s
ok github.com/novox/mesh-controller/internal/token 1.069s
ok github.com/novox/mesh-controller/cmd/mesh-controller 50s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 51s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 57s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 52s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 46s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 49s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 49s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 49s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 33s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 31s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 26s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 46s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 21s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 41s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 26s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.71s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (1.09s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (2.31s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.66s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.48s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.43s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (7.00s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.48s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.54s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.30s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.26s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.39s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (1.74s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.62s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.57s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.60s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.96s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.53s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.63s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.47s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.45s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.32s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.76s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.36s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.24s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.43s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.24s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.78s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.27s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.11s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.83s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.45s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.35s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.35s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.66s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.21s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.38s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (1.03s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.38s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.34s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.28s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.36s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.29s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.24s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.29s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.28s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.45s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (2.39s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.22s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.23s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.27s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.21s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.18s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.16s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.26s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.30s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.26s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.23s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.23s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.22s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.20s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.49s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.35s)
**Merge check** at `b34055f5`
Judged: head `b34055f580d4` merged into trunk `c2ec0a601acb`; read beside it: mesh-catalog `7e3e62062bef`, mesh-controller-main `c2ec0a601acb`, 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: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go, testdata/store-tests
Run by the build seat on ace as `build-1792007808557273708` (`builds --log build-1792007808557273708`).
```
--- the gate: build-agent, 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-14T19:40:09Z 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-14T19:40:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go and testdata/store-tests 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.129s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.035s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/route-proxy 1.124s
ok github.com/novox/mesh-controller/internal/artifacts 1.065s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.568s
ok github.com/novox/mesh-controller/internal/catalogue 16.167s
ok github.com/novox/mesh-controller/internal/conditions 2.644s
ok github.com/novox/mesh-controller/internal/envfile 1.024s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 7.879s
ok github.com/novox/mesh-controller/internal/lease 10.226s
ok github.com/novox/mesh-controller/internal/licences 5.775s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.065s
ok github.com/novox/mesh-controller/internal/lint 2.614s
ok github.com/novox/mesh-controller/internal/outward 1.056s
ok github.com/novox/mesh-controller/internal/overlay 1.040s
ok github.com/novox/mesh-controller/internal/secrets 1.457s
ok github.com/novox/mesh-controller/internal/store 3.479s
ok github.com/novox/mesh-controller/internal/testbus 1.243s
ok github.com/novox/mesh-controller/internal/token 1.069s
ok github.com/novox/mesh-controller/cmd/mesh-controller 50s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 51s (shard 2 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 57s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 52s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 46s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 49s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 49s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 49s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 33s (shard 1 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 31s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 26s (shard 4 of 4: 67 tests)
ok github.com/novox/mesh-controller/internal/builder 46s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 21s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 41s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 26s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 4 of 4: 43 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.71s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (1.09s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (2.31s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.66s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.48s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.43s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (7.00s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.48s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.54s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.30s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.26s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.39s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (1.74s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.62s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.57s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.60s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.96s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.53s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.63s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.47s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.45s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.32s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.76s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.36s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.24s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.43s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.24s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.78s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.27s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.11s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.83s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.45s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.35s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.35s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.66s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.21s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.38s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (1.03s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.38s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.34s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.28s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.36s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.29s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.24s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.29s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.28s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.45s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (2.39s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.22s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.23s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.27s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.21s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.18s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.16s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.26s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.30s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.26s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.23s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.23s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.22s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.20s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.49s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.35s)
```
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before route-proxy, build-agent is judged on its first machine
Run by the build seat on shanks as build-1792008864037552356 (builds --log build-1792008864037552356).
--- the gate: build-agent, mesh-controller, route-proxy
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-14T20:00:09Z 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-14T20:00:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go and testdata/store-tests 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.194s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.057s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.109s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.039s
ok github.com/novox/mesh-controller/examples/route-proxy 1.308s
ok github.com/novox/mesh-controller/internal/artifacts 1.198s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.173s
ok github.com/novox/mesh-controller/internal/catalogue 15.295s
ok github.com/novox/mesh-controller/internal/conditions 3.264s
ok github.com/novox/mesh-controller/internal/envfile 1.074s
ok github.com/novox/mesh-controller/internal/facts 1.083s
ok github.com/novox/mesh-controller/internal/identity 7.717s
ok github.com/novox/mesh-controller/internal/lease 10.343s
ok github.com/novox/mesh-controller/internal/licences 6.018s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.084s
ok github.com/novox/mesh-controller/internal/lint 3.224s
ok github.com/novox/mesh-controller/internal/outward 1.113s
ok github.com/novox/mesh-controller/internal/overlay 1.090s
ok github.com/novox/mesh-controller/internal/secrets 1.740s
ok github.com/novox/mesh-controller/internal/store 3.913s
ok github.com/novox/mesh-controller/internal/testbus 1.299s
ok github.com/novox/mesh-controller/internal/token 1.064s
ok github.com/novox/mesh-controller/cmd/mesh-controller 33s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 40s (shard 2 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 44s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 37s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 36s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 29s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 36s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 34s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 1 of 4: 69 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 4 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/builder 44s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 15s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 38s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 19s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 13s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 21s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 13s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 17s (shard 4 of 4: 44 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.51s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.78s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.65s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.50s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.58s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.61s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.08s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.64s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.77s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.56s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.35s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.75s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.42s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.33s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.43s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.40s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.34s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.38s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.58s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.47s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.28s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.40s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.40s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.31s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.35s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (3.42s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.36s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.38s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.22s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.22s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.59s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.26s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.81s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.44s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.28s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (2.24s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.54s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.50s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.28s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.54s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.28s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.62s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.35s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.30s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.09s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.09s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.10s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.43s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.10s)
**Merge check** at `b34055f5`
Judged: head `b34055f580d4` merged into trunk `86057f455194`; read beside it: mesh-catalog `fadf5025cc5a`, mesh-controller-main `86057f455194`, 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: build-agent, mesh-controller, route-proxy)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller, route-proxy
- tier 1: build-agent
- ace: receives route-proxy, build-agent
- g14: receives build-agent
- novox: receives mesh-controller, route-proxy, build-agent
- shanks: receives build-agent
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before route-proxy, build-agent is judged on its first machine
Run by the build seat on shanks as `build-1792008864037552356` (`builds --log build-1792008864037552356`).
```
--- the gate: build-agent, mesh-controller, route-proxy
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-14T20:00:09Z 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-14T20:00:09Z
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 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/same_program_test.go, internal/builder/same_program_test.go, internal/inventory/registered_held_test.go and testdata/store-tests 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.194s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.057s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.109s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.039s
ok github.com/novox/mesh-controller/examples/route-proxy 1.308s
ok github.com/novox/mesh-controller/internal/artifacts 1.198s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.173s
ok github.com/novox/mesh-controller/internal/catalogue 15.295s
ok github.com/novox/mesh-controller/internal/conditions 3.264s
ok github.com/novox/mesh-controller/internal/envfile 1.074s
ok github.com/novox/mesh-controller/internal/facts 1.083s
ok github.com/novox/mesh-controller/internal/identity 7.717s
ok github.com/novox/mesh-controller/internal/lease 10.343s
ok github.com/novox/mesh-controller/internal/licences 6.018s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.084s
ok github.com/novox/mesh-controller/internal/lint 3.224s
ok github.com/novox/mesh-controller/internal/outward 1.113s
ok github.com/novox/mesh-controller/internal/overlay 1.090s
ok github.com/novox/mesh-controller/internal/secrets 1.740s
ok github.com/novox/mesh-controller/internal/store 3.913s
ok github.com/novox/mesh-controller/internal/testbus 1.299s
ok github.com/novox/mesh-controller/internal/token 1.064s
ok github.com/novox/mesh-controller/cmd/mesh-controller 33s (shard 1 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 40s (shard 2 of 8: 116 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 44s (shard 3 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 37s (shard 4 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 36s (shard 5 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 29s (shard 6 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 36s (shard 7 of 8: 115 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 34s (shard 8 of 8: 115 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 1 of 4: 69 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 2 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 3 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 4 of 4: 68 tests)
ok github.com/novox/mesh-controller/internal/builder 44s (shard 1 of 4: 52 tests)
ok github.com/novox/mesh-controller/internal/builder 15s (shard 2 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 38s (shard 3 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/builder 19s (shard 4 of 4: 51 tests)
ok github.com/novox/mesh-controller/internal/link 13s (shard 1 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 21s (shard 2 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 13s (shard 3 of 4: 44 tests)
ok github.com/novox/mesh-controller/internal/link 17s (shard 4 of 4: 44 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.51s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.78s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.65s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.50s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.58s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.61s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.08s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.64s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.77s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.56s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.35s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.75s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.42s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.33s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.43s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.40s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.34s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.38s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.58s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.47s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.28s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.40s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.40s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.31s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.35s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (3.42s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.36s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.38s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.22s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.22s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.59s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.26s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.81s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.44s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.28s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (2.24s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.54s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.50s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.28s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.54s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.28s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.62s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.35s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.30s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.09s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.09s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.10s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.43s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.10s)
```
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.
Fixes hq issue 721 (a change a module's program does not contain still rebuilds and rolls that module).
Proof. mesh-controller #335 changed one sentence in internal/inventory/walkphases.go. cmd/mesh-builder built from the source tree alone (no .git, -trimpath, as build-agent's image builds it) at
a5500f73andc2ec0a60: sha256 a7fe6422… vs 78f2b7a2…, 79 bytes apart. The only difference is Go's build ID, whose action ID hashes every input package; the content ID part is the same (HPdlp2UU…). Built with -ldflags=-buildid= both are c02a337c… The changed string is in neither binary.Change.
Held): the whole image (platform, config without Labels/Image/Hostname, every file by path, type, mode, owner, link, xattrs and bytes, never times). Equal on every artifact →CheckBuilt.Same("unchanged: its program is the same as running build …") andSameAs(the held reference compared). A non-image artifact, no held build, or a failed comparison says nothing: the module moves as today.Delivery.Unchangedwith the check's sentence; a walk left with no module is done.Tests:
TestAModuleWhoseProgramDidNotChangeIsSaidUnchanged,TestAnImageWithAnotherEntrypointIsNotTheSame(internal/builder),TestAWalkLeavesOutAModuleWhoseProgramDidNotChange(cmd/mesh-controller). gofmt, go vet, go test -race on the changed packages pass locally.The build ID itself is dropped from build-agent's and route-proxy's images in novox/mesh-catalog (same branch name), which goes after this.
Delivery
novox/mesh-controller@b34055f580d4— failed since 2026-10-14T20:32:11ZCovered: covered after its failure: a later walk that contains it was delivered: plan-1792009731456564734 (novox/mesh-controller at
60cc9ec3into main, done, contains its merge5d22d7df)Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Group
fix/a-module-moves-only-when-its-program-changes, in order: novox/mesh-controller@b34055f580 → novox/mesh-catalog@d94764f001Transitions
c2ec0a601a, the trunk is now 86057f455194; judged again on a recheck or when it is mergedThe commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
32bd8b5dJudged: head
32bd8b5d5fb2merged into trunkc2ec0a601acb; read beside it: mesh-catalog482232e8c51c, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestNoReaderAnswersEmptyForAnError (2.20s)Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on novox as
build-1792004879060520962(builds --log build-1792004879060520962).Merge check at
e6a28a2dJudged: head
e6a28a2d2814merged into trunkc2ec0a601acb; read beside it: mesh-catalog482232e8c51c, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1792005340069273947(builds --log build-1792005340069273947).Merge check at
4390589cJudged: head
4390589c61a4merged into trunkc2ec0a601acb; read beside it: mesh-catalog482232e8c51c, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1792005569383627685(builds --log build-1792005569383627685).Merge check at
6acce60fJudged: head
6acce60f8bd3merged into trunkc2ec0a601acb; read beside it: mesh-catalog482232e8c51c, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1792005849305958885(builds --log build-1792005849305958885).Merge check at
38c87a7eJudged: head
38c87a7e4714merged into trunkc2ec0a601acb; read beside it: mesh-catalog482232e8c51c, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.60s)Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on novox as
build-1792006228398870024(builds --log build-1792006228398870024).Merge check at
480657d9Judged: head
480657d95b9bmerged into trunkc2ec0a601acb; read beside it: mesh-catalog7e3e62062bef, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.87s)Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on novox as
build-1792007023596669464(builds --log build-1792007023596669464).Merge check at
b34055f5Judged: head
b34055f580d4merged into trunkc2ec0a601acb; read beside it: mesh-catalog7e3e62062bef, mesh-controller-mainc2ec0a601acb, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1792007808557273708(builds --log build-1792007808557273708).Merge check at
b34055f5Judged: head
b34055f580d4merged into trunk86057f455194; read beside it: mesh-catalogfadf5025cc5a, mesh-controller-main86057f455194, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1792008864037552356(builds --log build-1792008864037552356).