Mail seats: a declared seat carries needs; a secret given is told once (issues 802, 835) #345

Merged
mesh-tools merged 5 commits from feat/mail-seats into main 2026-10-15 17:44:20 +00:00
Member

Feature feat/mail-seats (playbook 07), one delivery group with novox/mesh-catalog and novox/mesh-host on branch feat/mail-seats.

  • Issue 802 (ADR 0378 §8, ADR 0379 §5): a module's seat declaration may carry needs (node seats), judged as ADR 0220 §5-§6; the catalogue check refuses malformed needs.
  • Issue 835 (ADR 0380): a secret given at the desk or the terminal is told once through operator-channel.tell ('A password was entered for 's on '), opens no secret-given condition, and clears the open ones; falls back to the condition while nothing serves tell. The controller is granted operator-channel.tell; testdata/beside refreshed from mesh-host c3b2fce.

Reviewed locally: round 1 approved 802 at b5a441a9; round 2 changes (name the machine), round 3 approved at a18c17d3. merge-check.sh green. Follow-ups: 834, 842.

Feature feat/mail-seats (playbook 07), one delivery group with novox/mesh-catalog and novox/mesh-host on branch feat/mail-seats. - Issue 802 (ADR 0378 §8, ADR 0379 §5): a module's seat declaration may carry `needs` (node seats), judged as ADR 0220 §5-§6; the catalogue check refuses malformed needs. - Issue 835 (ADR 0380): a secret given at the desk or the terminal is told once through operator-channel.tell ('A password was entered for <module>'s <secret> on <node>'), opens no secret-given condition, and clears the open ones; falls back to the condition while nothing serves tell. The controller is granted operator-channel.tell; testdata/beside refreshed from mesh-host c3b2fce. Reviewed locally: round 1 approved 802 at b5a441a9; round 2 changes (name the machine), round 3 approved at a18c17d3. merge-check.sh green. Follow-ups: 834, 842.
mesh-tools added 4 commits 2026-10-15 17:04:38 +00:00
ADR 0220's dependency mechanism served compiled seats only and retired its one user with
node-resolver-config (commit f68521da). ADR 0378 S8 revives it for module-declared seats:
SeatDeclaration gains Needs, judged by the catalogue check (node scope only, a name that
resolves to a node seat somewhere in the catalogue, never itself), and DependsOn now takes
the catalogue so a claimed seat's needs are found wherever they are declared.
ADR 0380: giving a module's own secret now asks the operator channel's
tell over the bus, naming the secret, where, when and who asked, and
raises no secret-given condition. Until nothing serves tell yet, or the
controller's grant is refused (link.ErrNothingServes / the new
link.ErrGrantRefused), the condition is raised exactly as before, so the
change composes whichever side of issue 797 merges first. A successful
tell also retires every open secret-given condition. The terminal's own
secret accept now records a hand act too, as the desk path already did.

The controller's bus grant for operator-channel.tell is added to the
composed config (golden fixture updated).
mesh-host joined feat/mail-seats to add the controller's new
operator-channel.tell publish subject to its genesis user list. Moved
per testdata/beside/CAPTURED's own recipe (git archive, never by hand);
the refreshed snapshot also carries main's drift since the last capture
(ADR 0338's store placement). TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose
now passes; merge-check.sh green.
Name the machine in the secret-given message (issue 835, review round 2)
mesh/delivery-group group feat/mail-seats delivering: 1 of 3 delivered
mesh/merge-gate head a18c17d3cc5f merged into trunk 0ab61d1be8c5 — pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus…
mesh/repo-check head a18c17d3cc5f merged into trunk 0ab61d1be8c5 — fail: its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheContro…
mesh/delivery superseded: a newer head of the same pull request
a18c17d3cc
ADR 0380 §1 says the message names the module and the machine it is
for; the words named no machine at the terminal and only the desk's
machine at the desk. The headline now ends "on <node>" and the tell
carries "subject": <node> in both cases.

Also covers two gaps review round 2 flagged: a tell failure other
than ErrNothingServes/ErrGrantRefused surfaces and raises no
condition, and the terminal's hand act now names who asked (not just
where), extracted into terminalGiveHandAct so it is testable on its
own.
Author
Member

Delivery novox/mesh-controller@5cf8938f55b3 — delivered since 2026-10-15T17:50:31Z

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 feat/mail-seats, in order: novox/mesh-controller@5cf8938f55 → novox/mesh-catalog@c2cd2e1eb1 → novox/mesh-host@c3b2fce0a2

Machines

  • mesh-controller on every machine running it: sent
  • route-proxy on every machine running it: sent
  • build-agent on every machine running it: sent

Transitions

  • 2026-10-15 17:35 (new) → proposed (announced): novox/mesh-controller#345's head announced
  • 2026-10-15 17:40 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-15 17:40 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-15 17:45 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-15 17:45 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-15 17:50 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@5cf8938f55b3` — **delivered** since 2026-10-15T17:50:31Z **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** `feat/mail-seats`, in order: novox/mesh-controller@5cf8938f55b3 → novox/mesh-catalog@c2cd2e1eb15e → novox/mesh-host@c3b2fce0a29f - novox/mesh-controller@a18c17d3cc5f before novox/mesh-catalog@c2cd2e1eb15e: declared **Machines** - mesh-controller on every machine running it: sent - route-proxy on every machine running it: sent - build-agent on every machine running it: sent **Transitions** - 2026-10-15 17:35 (new) → proposed (announced): novox/mesh-controller#345's head announced - 2026-10-15 17:40 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-15 17:40 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-15 17:45 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-15 17:45 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-15 17:50 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Member

Merge check at a18c17d3
Judged: head a18c17d3cc5f merged into trunk 0ab61d1be8c5; read beside it: mesh-catalog 789b0a9474c8, mesh-controller-main 0ab61d1be8c5, mesh-host 198fd34ec497, mesh-tools 6b3e15042fee

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.68s)

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
  • read by no module's build: cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-host/examples/foundation-first-node.lock

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

--- 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-15T15:07:29Z 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-15T15:07:29Z

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 3 module(s) in 2 tier(s): build-agent, mesh-controller, route-proxy

notes:
  - cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED and testdata/beside/mesh-host/examples/foundation-first-node.lock 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.110s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.019s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.025s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.018s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.116s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.055s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
--- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.68s)
    genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check
    genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried
FAIL
FAIL	github.com/novox/mesh-controller/internal/broker	6.582s
ok  	github.com/novox/mesh-controller/internal/catalogue	13.142s
ok  	github.com/novox/mesh-controller/internal/conditions	3.107s
ok  	github.com/novox/mesh-controller/internal/envfile	1.032s
ok  	github.com/novox/mesh-controller/internal/facts	1.033s
ok  	github.com/novox/mesh-controller/internal/identity	7.298s
ok  	github.com/novox/mesh-controller/internal/lease	10.335s
ok  	github.com/novox/mesh-controller/internal/licences	6.201s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.037s
ok  	github.com/novox/mesh-controller/internal/lint	3.605s
ok  	github.com/novox/mesh-controller/internal/outward	1.142s
ok  	github.com/novox/mesh-controller/internal/overlay	1.081s
ok  	github.com/novox/mesh-controller/internal/secrets	1.697s
ok  	github.com/novox/mesh-controller/internal/store	4.152s
ok  	github.com/novox/mesh-controller/internal/testbus	1.252s
ok  	github.com/novox/mesh-controller/internal/token	1.029s
FAIL
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	23s	(shard 1 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	31s	(shard 2 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	22s	(shard 3 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	22s	(shard 4 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	37s	(shard 5 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	30s	(shard 6 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	23s	(shard 7 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	30s	(shard 8 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	14s	(shard 1 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	14s	(shard 2 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	14s	(shard 3 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	14s	(shard 4 of 4: 68 tests)
ok  	github.com/novox/mesh-controller/internal/builder	33s	(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	27s	(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: 47 tests)
ok  	github.com/novox/mesh-controller/internal/link	19s	(shard 2 of 4: 46 tests)
ok  	github.com/novox/mesh-controller/internal/link	18s	(shard 3 of 4: 46 tests)
ok  	github.com/novox/mesh-controller/internal/link	13s	(shard 4 of 4: 46 tests)
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.25s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.29s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.29s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.30s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.22s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.22s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.13s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.40s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.12s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.35s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.31s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.24s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.30s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.36s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.35s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.31s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.32s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.53s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.44s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.52s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.45s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.65s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.73s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.17s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.17s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.18s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.34s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.35s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.42s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (0.35s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.30s)
  ./cmd/mesh-controller --- PASS: TestReplay349 (0.27s)
  ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.23s)
  ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.24s)
  ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.21s)
  ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.19s)
  ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
  ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.17s)
  ./cmd/mesh-controller --- PASS: TestReplay164 (0.49s)
  ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.24s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.27s)
  ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.18s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.22s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.60s)
  ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.18s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.28s)
  ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.25s)
  ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.41s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.23s)
  ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.21s)
  ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.18s)
  ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.24s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
  ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.20s)
  ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.21s)
  ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.19s)
  ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.32s)
  ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.30s)
  ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.25s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.47s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.84s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.95s)
  ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.57s)
  ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.47s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.12s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.11s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.10s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.11s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.11s)
  ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
  ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.08s)
  ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
  ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.33s)
  ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.10s)
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: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.68s)
    genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check
    genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried
FAIL	github.com/novox/mesh-controller/internal/broker	6.582s
**Merge check** at `a18c17d3` Judged: head `a18c17d3cc5f` merged into trunk `0ab61d1be8c5`; read beside it: mesh-catalog `789b0a9474c8`, mesh-controller-main `0ab61d1be8c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.68s) **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 - read by no module's build: cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-host/examples/foundation-first-node.lock Run by the build seat on ace as `build-1792083880074101083` (`builds --log build-1792083880074101083`). ``` --- 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-15T15:07:29Z 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-15T15:07:29Z 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 3 module(s) in 2 tier(s): build-agent, mesh-controller, route-proxy notes: - cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED and testdata/beside/mesh-host/examples/foundation-first-node.lock 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.110s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.019s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.025s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s ok github.com/novox/mesh-controller/examples/route-proxy 1.116s ok github.com/novox/mesh-controller/internal/artifacts 1.055s ? github.com/novox/mesh-controller/internal/beside [no test files] --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.68s) genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried FAIL FAIL github.com/novox/mesh-controller/internal/broker 6.582s ok github.com/novox/mesh-controller/internal/catalogue 13.142s ok github.com/novox/mesh-controller/internal/conditions 3.107s ok github.com/novox/mesh-controller/internal/envfile 1.032s ok github.com/novox/mesh-controller/internal/facts 1.033s ok github.com/novox/mesh-controller/internal/identity 7.298s ok github.com/novox/mesh-controller/internal/lease 10.335s ok github.com/novox/mesh-controller/internal/licences 6.201s ok github.com/novox/mesh-controller/internal/licences/adapters 1.037s ok github.com/novox/mesh-controller/internal/lint 3.605s ok github.com/novox/mesh-controller/internal/outward 1.142s ok github.com/novox/mesh-controller/internal/overlay 1.081s ok github.com/novox/mesh-controller/internal/secrets 1.697s ok github.com/novox/mesh-controller/internal/store 4.152s ok github.com/novox/mesh-controller/internal/testbus 1.252s ok github.com/novox/mesh-controller/internal/token 1.029s FAIL ok github.com/novox/mesh-controller/cmd/mesh-controller 23s (shard 1 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 31s (shard 2 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 22s (shard 3 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 22s (shard 4 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 37s (shard 5 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 30s (shard 6 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 23s (shard 7 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 30s (shard 8 of 8: 118 tests) ok github.com/novox/mesh-controller/internal/inventory 14s (shard 1 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 14s (shard 2 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 14s (shard 3 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 14s (shard 4 of 4: 68 tests) ok github.com/novox/mesh-controller/internal/builder 33s (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 27s (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: 47 tests) ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 46 tests) ok github.com/novox/mesh-controller/internal/link 18s (shard 3 of 4: 46 tests) ok github.com/novox/mesh-controller/internal/link 13s (shard 4 of 4: 46 tests) store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.25s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.29s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.29s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.30s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.22s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.22s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.13s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.40s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.12s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.35s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.31s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.24s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.30s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.36s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.35s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.31s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.32s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.53s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.44s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.52s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.45s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.65s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.73s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.17s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.17s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.18s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.34s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.35s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.42s) ./cmd/mesh-controller --- PASS: TestReplay340 (0.35s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.30s) ./cmd/mesh-controller --- PASS: TestReplay349 (0.27s) ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.23s) ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.24s) ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.21s) ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.19s) ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s) ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.17s) ./cmd/mesh-controller --- PASS: TestReplay164 (0.49s) ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.24s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.27s) ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.18s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.22s) ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.60s) ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.18s) ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.28s) ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.25s) ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.41s) ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.23s) ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.21s) ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.18s) ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.24s) ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s) ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.20s) ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.21s) ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.19s) ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.32s) ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.30s) ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.25s) ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.47s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.84s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.95s) ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.57s) ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.47s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.12s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.11s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.10s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.11s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.11s) ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s) ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.08s) ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s) ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.33s) ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.10s) 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: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.68s) genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried FAIL github.com/novox/mesh-controller/internal/broker 6.582s ```
Author
Member

Merge check at a18c17d3
Judged: head a18c17d3cc5f merged into trunk 0ab61d1be8c5; read beside it: mesh-catalog 789b0a9474c8, mesh-controller-main 0ab61d1be8c5, mesh-host 198fd34ec497, mesh-tools 6b3e15042fee

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.82s)

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
  • read by no module's build: cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-host/examples/foundation-first-node.lock

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

--- 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-15T15:07:29Z 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-15T15:07:29Z

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 3 module(s) in 2 tier(s): build-agent, mesh-controller, route-proxy

notes:
  - cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED and testdata/beside/mesh-host/examples/foundation-first-node.lock 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.623s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.027s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.043s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.023s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.150s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.073s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
--- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.82s)
    genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check
    genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried
FAIL
FAIL	github.com/novox/mesh-controller/internal/broker	8.260s
ok  	github.com/novox/mesh-controller/internal/catalogue	26.561s
ok  	github.com/novox/mesh-controller/internal/conditions	3.959s
ok  	github.com/novox/mesh-controller/internal/envfile	1.073s
ok  	github.com/novox/mesh-controller/internal/facts	1.040s
ok  	github.com/novox/mesh-controller/internal/identity	11.907s
ok  	github.com/novox/mesh-controller/internal/lease	10.300s
ok  	github.com/novox/mesh-controller/internal/licences	8.918s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.029s
ok  	github.com/novox/mesh-controller/internal/lint	4.893s
ok  	github.com/novox/mesh-controller/internal/outward	1.064s
ok  	github.com/novox/mesh-controller/internal/overlay	1.062s
ok  	github.com/novox/mesh-controller/internal/secrets	1.952s
ok  	github.com/novox/mesh-controller/internal/store	5.224s
ok  	github.com/novox/mesh-controller/internal/testbus	1.338s
ok  	github.com/novox/mesh-controller/internal/token	1.060s
FAIL
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	59s	(shard 1 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	69s	(shard 2 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	61s	(shard 3 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	59s	(shard 4 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	79s	(shard 5 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	71s	(shard 6 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	63s	(shard 7 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	72s	(shard 8 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	30s	(shard 1 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	28s	(shard 2 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	31s	(shard 3 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	30s	(shard 4 of 4: 68 tests)
ok  	github.com/novox/mesh-controller/internal/builder	94s	(shard 1 of 4: 52 tests)
ok  	github.com/novox/mesh-controller/internal/builder	40s	(shard 2 of 4: 51 tests)
ok  	github.com/novox/mesh-controller/internal/builder	75s	(shard 3 of 4: 51 tests)
ok  	github.com/novox/mesh-controller/internal/builder	45s	(shard 4 of 4: 51 tests)
ok  	github.com/novox/mesh-controller/internal/link	20s	(shard 1 of 4: 47 tests)
ok  	github.com/novox/mesh-controller/internal/link	23s	(shard 2 of 4: 46 tests)
ok  	github.com/novox/mesh-controller/internal/link	24s	(shard 3 of 4: 46 tests)
ok  	github.com/novox/mesh-controller/internal/link	21s	(shard 4 of 4: 46 tests)
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.50s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.47s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.41s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.61s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.62s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.50s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.30s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.86s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.18s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.76s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.59s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.60s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.50s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.54s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.54s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.53s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.49s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.67s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.63s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.64s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.85s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (1.19s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.94s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.34s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.41s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.80s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.66s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.86s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.83s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (1.53s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.91s)
  ./cmd/mesh-controller --- PASS: TestReplay349 (0.71s)
  ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (1.16s)
  ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.43s)
  ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.74s)
  ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.51s)
  ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.17s)
  ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.59s)
  ./cmd/mesh-controller --- PASS: TestReplay164 (0.84s)
  ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (1.19s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.96s)
  ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.81s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.78s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (1.75s)
  ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.55s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.66s)
  ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.95s)
  ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.87s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.69s)
  ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.56s)
  ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.41s)
  ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (1.68s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.83s)
  ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.75s)
  ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.82s)
  ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.69s)
  ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.79s)
  ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.48s)
  ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.51s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.98s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (2.05s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (3.05s)
  ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (1.81s)
  ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (1.22s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.18s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.14s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.22s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.17s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.14s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.15s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.13s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.16s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.13s)
  ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.22s)
  ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.18s)
  ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.16s)
  ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.64s)
  ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.17s)
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: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.82s)
    genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check
    genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried
FAIL	github.com/novox/mesh-controller/internal/broker	8.260s
**Merge check** at `a18c17d3` Judged: head `a18c17d3cc5f` merged into trunk `0ab61d1be8c5`; read beside it: mesh-catalog `789b0a9474c8`, mesh-controller-main `0ab61d1be8c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.82s) **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 - read by no module's build: cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-host/examples/foundation-first-node.lock Run by the build seat on novox as `build-1792084174690103280` (`builds --log build-1792084174690103280`). ``` --- 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-15T15:07:29Z 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-15T15:07:29Z 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 3 module(s) in 2 tier(s): build-agent, mesh-controller, route-proxy notes: - cmd/mesh-controller/desk_secret_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED and testdata/beside/mesh-host/examples/foundation-first-node.lock 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.623s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.027s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.043s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s ok github.com/novox/mesh-controller/examples/route-proxy 1.150s ok github.com/novox/mesh-controller/internal/artifacts 1.073s ? github.com/novox/mesh-controller/internal/beside [no test files] --- FAIL: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.82s) genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried FAIL FAIL github.com/novox/mesh-controller/internal/broker 8.260s ok github.com/novox/mesh-controller/internal/catalogue 26.561s ok github.com/novox/mesh-controller/internal/conditions 3.959s ok github.com/novox/mesh-controller/internal/envfile 1.073s ok github.com/novox/mesh-controller/internal/facts 1.040s ok github.com/novox/mesh-controller/internal/identity 11.907s ok github.com/novox/mesh-controller/internal/lease 10.300s ok github.com/novox/mesh-controller/internal/licences 8.918s ok github.com/novox/mesh-controller/internal/licences/adapters 1.029s ok github.com/novox/mesh-controller/internal/lint 4.893s ok github.com/novox/mesh-controller/internal/outward 1.064s ok github.com/novox/mesh-controller/internal/overlay 1.062s ok github.com/novox/mesh-controller/internal/secrets 1.952s ok github.com/novox/mesh-controller/internal/store 5.224s ok github.com/novox/mesh-controller/internal/testbus 1.338s ok github.com/novox/mesh-controller/internal/token 1.060s FAIL ok github.com/novox/mesh-controller/cmd/mesh-controller 59s (shard 1 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 69s (shard 2 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 61s (shard 3 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 59s (shard 4 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 79s (shard 5 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 71s (shard 6 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 63s (shard 7 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 72s (shard 8 of 8: 118 tests) ok github.com/novox/mesh-controller/internal/inventory 30s (shard 1 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 28s (shard 2 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 31s (shard 3 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 30s (shard 4 of 4: 68 tests) ok github.com/novox/mesh-controller/internal/builder 94s (shard 1 of 4: 52 tests) ok github.com/novox/mesh-controller/internal/builder 40s (shard 2 of 4: 51 tests) ok github.com/novox/mesh-controller/internal/builder 75s (shard 3 of 4: 51 tests) ok github.com/novox/mesh-controller/internal/builder 45s (shard 4 of 4: 51 tests) ok github.com/novox/mesh-controller/internal/link 20s (shard 1 of 4: 47 tests) ok github.com/novox/mesh-controller/internal/link 23s (shard 2 of 4: 46 tests) ok github.com/novox/mesh-controller/internal/link 24s (shard 3 of 4: 46 tests) ok github.com/novox/mesh-controller/internal/link 21s (shard 4 of 4: 46 tests) store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.50s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.47s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.41s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.61s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.62s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.50s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.30s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.86s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.18s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.76s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.59s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.60s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.50s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.54s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.54s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.53s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.49s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.67s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.63s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.64s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.85s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (1.19s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.94s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.34s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.41s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.80s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.66s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.86s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.83s) ./cmd/mesh-controller --- PASS: TestReplay340 (1.53s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.91s) ./cmd/mesh-controller --- PASS: TestReplay349 (0.71s) ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (1.16s) ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.43s) ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.74s) ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.51s) ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.17s) ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.59s) ./cmd/mesh-controller --- PASS: TestReplay164 (0.84s) ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (1.19s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.96s) ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.81s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.78s) ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (1.75s) ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.55s) ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.66s) ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.95s) ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.87s) ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.69s) ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.56s) ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.41s) ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (1.68s) ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.83s) ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.75s) ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.82s) ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.69s) ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.79s) ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.48s) ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.51s) ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.98s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (2.05s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (3.05s) ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (1.81s) ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (1.22s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.18s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.14s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.22s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.17s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.14s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.15s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.13s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.16s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.13s) ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.22s) ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.18s) ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.16s) ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.64s) ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.17s) 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: TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose (0.82s) genesis_template_test.go:29: judged against /var/lib/build-agent/workspace/check/mesh-host as cloned beside this check genesis_template_test.go:39: the installer's user list does not let the controller publish [mesh.seat.operator-channel.tool.tell] — it would come up and be refused on the first thing it tried FAIL github.com/novox/mesh-controller/internal/broker 8.260s ```
jschoubben added 1 commit 2026-10-15 17:35:11 +00:00
Let the genesis test accept a degradable grant missing from the installer's list (issue 835)
mesh/merge-gate head 5cf8938f55b3 merged into trunk 0ab61d1be8c5 — pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus…
mesh/repo-check head 5cf8938f55b3 merged into trunk 0ab61d1be8c5 — pass: its merge-check.sh passed
mesh/delivery delivered
mesh/delivery-group group feat/mail-seats delivered: every member is delivered
5cf8938f55
Forge check of mesh-controller#345: the merge check clones mesh-host at the commit the
machines run, not its main, so a change that only edits mesh-host's examples (the
operator-channel.tell grant) can never be seen there until mesh-host's own module next
builds. operator-channel.tell is the one grant with a fallback for a refusal (the
secret-given condition, ADR 0380 §9), so mark it degradable and let
TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose pass without it while every
other grant stays required.
Author
Member

Merge check at 5cf8938f
Judged: head 5cf8938f55b3 merged into trunk 0ab61d1be8c5; read beside it: mesh-catalog 789b0a9474c8, mesh-controller-main 0ab61d1be8c5, mesh-host 198fd34ec497, mesh-tools 6b3e15042fee

  • 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
  • read by no module's build: cmd/mesh-controller/desk_secret_test.go, internal/broker/genesis_template_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-host/examples/foundation-first-node.lock

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

--- 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-15T15:07:29Z 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-15T15:07:29Z

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 3 module(s) in 2 tier(s): build-agent, mesh-controller, route-proxy

notes:
  - cmd/mesh-controller/desk_secret_test.go, internal/broker/genesis_template_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED and testdata/beside/mesh-host/examples/foundation-first-node.lock 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.738s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.028s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.135s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.112s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.418s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.137s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	16.726s
ok  	github.com/novox/mesh-controller/internal/catalogue	28.145s
ok  	github.com/novox/mesh-controller/internal/conditions	5.232s
ok  	github.com/novox/mesh-controller/internal/envfile	1.108s
ok  	github.com/novox/mesh-controller/internal/facts	1.113s
ok  	github.com/novox/mesh-controller/internal/identity	17.690s
ok  	github.com/novox/mesh-controller/internal/lease	11.180s
ok  	github.com/novox/mesh-controller/internal/licences	16.627s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.073s
ok  	github.com/novox/mesh-controller/internal/lint	5.663s
ok  	github.com/novox/mesh-controller/internal/outward	1.297s
ok  	github.com/novox/mesh-controller/internal/overlay	1.064s
ok  	github.com/novox/mesh-controller/internal/secrets	2.642s
ok  	github.com/novox/mesh-controller/internal/store	8.541s
ok  	github.com/novox/mesh-controller/internal/testbus	2.017s
ok  	github.com/novox/mesh-controller/internal/token	1.105s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	43s	(shard 1 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	54s	(shard 2 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	46s	(shard 3 of 8: 119 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	44s	(shard 4 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	66s	(shard 5 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	56s	(shard 6 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	47s	(shard 7 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	58s	(shard 8 of 8: 118 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	31s	(shard 1 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	31s	(shard 2 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	31s	(shard 3 of 4: 69 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	32s	(shard 4 of 4: 68 tests)
ok  	github.com/novox/mesh-controller/internal/builder	71s	(shard 1 of 4: 52 tests)
ok  	github.com/novox/mesh-controller/internal/builder	38s	(shard 2 of 4: 51 tests)
ok  	github.com/novox/mesh-controller/internal/builder	64s	(shard 3 of 4: 51 tests)
ok  	github.com/novox/mesh-controller/internal/builder	44s	(shard 4 of 4: 51 tests)
ok  	github.com/novox/mesh-controller/internal/link	22s	(shard 1 of 4: 47 tests)
ok  	github.com/novox/mesh-controller/internal/link	25s	(shard 2 of 4: 46 tests)
ok  	github.com/novox/mesh-controller/internal/link	29s	(shard 3 of 4: 46 tests)
ok  	github.com/novox/mesh-controller/internal/link	21s	(shard 4 of 4: 46 tests)
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (1.40s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (1.07s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (1.20s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (1.09s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (1.01s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.59s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.41s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.60s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.93s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (1.49s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.61s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.37s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.51s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.54s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.50s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.55s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.88s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.53s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.57s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.52s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.53s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.95s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.83s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (1.62s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.88s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.88s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.91s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.90s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (1.01s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (1.54s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.52s)
  ./cmd/mesh-controller --- PASS: TestReplay349 (1.74s)
  ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.75s)
  ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.47s)
  ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.61s)
  ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.50s)
  ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.31s)
  ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.31s)
  ./cmd/mesh-controller --- PASS: TestReplay164 (0.84s)
  ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.75s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.54s)
  ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.62s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.39s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (1.00s)
  ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.32s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.33s)
  ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.75s)
  ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (1.84s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (1.14s)
  ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.60s)
  ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.71s)
  ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.67s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.73s)
  ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.54s)
  ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.63s)
  ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.66s)
  ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.77s)
  ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.56s)
  ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.34s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.87s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (1.79s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (1.44s)
  ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (1.10s)
  ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.58s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.13s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.15s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.14s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.17s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.10s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.30s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.12s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.20s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.13s)
  ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.13s)
  ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.18s)
  ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.13s)
  ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.59s)
  ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.12s)
**Merge check** at `5cf8938f` Judged: head `5cf8938f55b3` merged into trunk `0ab61d1be8c5`; read beside it: mesh-catalog `789b0a9474c8`, mesh-controller-main `0ab61d1be8c5`, mesh-host `198fd34ec497`, mesh-tools `6b3e15042fee` - `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 - read by no module's build: cmd/mesh-controller/desk_secret_test.go, internal/broker/genesis_template_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED, testdata/beside/mesh-host/examples/foundation-first-node.lock Run by the build seat on novox as `build-1792085713240452855` (`builds --log build-1792085713240452855`). ``` --- 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-15T15:07:29Z 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-15T15:07:29Z 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 3 module(s) in 2 tier(s): build-agent, mesh-controller, route-proxy notes: - cmd/mesh-controller/desk_secret_test.go, internal/broker/genesis_template_test.go, internal/broker/testdata/composed.conf, internal/catalogue/contribution_dependencies_test.go, internal/catalogue/data_test.go, internal/catalogue/resolver_file_is_the_uplinks_test.go, internal/catalogue/seat_contributions_test.go, internal/catalogue/seat_data_test.go, internal/catalogue/seat_dependencies_test.go, internal/catalogue/seats_declared_test.go, testdata/beside/CAPTURED and testdata/beside/mesh-host/examples/foundation-first-node.lock 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.738s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.028s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.135s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.112s ok github.com/novox/mesh-controller/examples/route-proxy 1.418s ok github.com/novox/mesh-controller/internal/artifacts 1.137s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 16.726s ok github.com/novox/mesh-controller/internal/catalogue 28.145s ok github.com/novox/mesh-controller/internal/conditions 5.232s ok github.com/novox/mesh-controller/internal/envfile 1.108s ok github.com/novox/mesh-controller/internal/facts 1.113s ok github.com/novox/mesh-controller/internal/identity 17.690s ok github.com/novox/mesh-controller/internal/lease 11.180s ok github.com/novox/mesh-controller/internal/licences 16.627s ok github.com/novox/mesh-controller/internal/licences/adapters 1.073s ok github.com/novox/mesh-controller/internal/lint 5.663s ok github.com/novox/mesh-controller/internal/outward 1.297s ok github.com/novox/mesh-controller/internal/overlay 1.064s ok github.com/novox/mesh-controller/internal/secrets 2.642s ok github.com/novox/mesh-controller/internal/store 8.541s ok github.com/novox/mesh-controller/internal/testbus 2.017s ok github.com/novox/mesh-controller/internal/token 1.105s ok github.com/novox/mesh-controller/cmd/mesh-controller 43s (shard 1 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 54s (shard 2 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 46s (shard 3 of 8: 119 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 44s (shard 4 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 66s (shard 5 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 56s (shard 6 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 47s (shard 7 of 8: 118 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 58s (shard 8 of 8: 118 tests) ok github.com/novox/mesh-controller/internal/inventory 31s (shard 1 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 31s (shard 2 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 31s (shard 3 of 4: 69 tests) ok github.com/novox/mesh-controller/internal/inventory 32s (shard 4 of 4: 68 tests) ok github.com/novox/mesh-controller/internal/builder 71s (shard 1 of 4: 52 tests) ok github.com/novox/mesh-controller/internal/builder 38s (shard 2 of 4: 51 tests) ok github.com/novox/mesh-controller/internal/builder 64s (shard 3 of 4: 51 tests) ok github.com/novox/mesh-controller/internal/builder 44s (shard 4 of 4: 51 tests) ok github.com/novox/mesh-controller/internal/link 22s (shard 1 of 4: 47 tests) ok github.com/novox/mesh-controller/internal/link 25s (shard 2 of 4: 46 tests) ok github.com/novox/mesh-controller/internal/link 29s (shard 3 of 4: 46 tests) ok github.com/novox/mesh-controller/internal/link 21s (shard 4 of 4: 46 tests) store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (1.40s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (1.07s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (1.20s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (1.09s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (1.01s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.59s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.41s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.60s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.93s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (1.49s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.61s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.37s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.51s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.54s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.50s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.55s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.88s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.53s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.57s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.52s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.53s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.95s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.83s) ./cmd/mesh-controller --- PASS: TestReplay201 (1.62s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.88s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.88s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.91s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.90s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (1.01s) ./cmd/mesh-controller --- PASS: TestReplay340 (1.54s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.52s) ./cmd/mesh-controller --- PASS: TestReplay349 (1.74s) ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.75s) ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.47s) ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.61s) ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.50s) ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.31s) ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (1.31s) ./cmd/mesh-controller --- PASS: TestReplay164 (0.84s) ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.75s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.54s) ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.62s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.39s) ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (1.00s) ./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.32s) ./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.33s) ./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.75s) ./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (1.84s) ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (1.14s) ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.60s) ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.71s) ./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.67s) ./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.73s) ./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.54s) ./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.63s) ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.66s) ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.77s) ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.56s) ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.34s) ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.87s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (1.79s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (1.44s) ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (1.10s) ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.58s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.13s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.15s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.14s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.17s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.10s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.30s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.12s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.20s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.13s) ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.13s) ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.18s) ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.13s) ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.59s) ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.12s) ```
mesh-tools merged commit 7543f64911 into main 2026-10-15 17:44:20 +00:00
mesh-tools deleted branch feat/mail-seats 2026-10-15 17:44:21 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#345