Milestone 1 of hq design 47, step 2 (issues 973 and 921). Decisions: ADR 0407 §1 and §3.
A merge is never dropped (issue 921). A merge the controller cannot record now (another controller holds the plans, the store away) is held on the bus and handed over again; on shutdown it is left unsettled. Merged events have a durable consumer of their own, controller-merges: no max-deliver, not reset by healer H4, a delay growing from 5 s to 5 min; it is asserted before the events consumer and, when it takes over, starts at that consumer's ack floor + 1, so the delivery of this change loses no merge.
The window on the bus. Bucket mesh-controller_merge-window: per open batch a key <batch>.quiet (time to live = the window, made again on each merge) and <batch>.most (the at-most, once), rounded up to whole seconds; a watcher runs a cut look on the first expiry. The 5 s cutter goes; looks on a merge, an expiry, taking the lease and each rollout pass.
The 5 min merge catch-up goes, with signal S5 and its watchdog.
The batch records stay in the store until milestone 5 moves them (ADR 0408 §8).
Tests: pure tests (TTL rounding, hold/unsettled, delay), testbus tests (held more than five times still recorded; an H4 reset leaves merges alone; the old consumer's unacked merge is taken over), and two integration tests listed in testdata/store-tests (a held merge is recorded and carried by the next rollout; a window closes by its key's expiry).
Reviewed in three rounds, approved at 20e14872. For later: issues 1006, 983, 984.
Milestone 1 of hq design 47, step 2 (issues 973 and 921). Decisions: ADR 0407 §1 and §3.
- **A merge is never dropped (issue 921).** A merge the controller cannot record now (another controller holds the plans, the store away) is held on the bus and handed over again; on shutdown it is left unsettled. Merged events have a durable consumer of their own, `controller-merges`: no max-deliver, not reset by healer H4, a delay growing from 5 s to 5 min; it is asserted before the events consumer and, when it takes over, starts at that consumer's ack floor + 1, so the delivery of this change loses no merge.
- **The window on the bus.** Bucket `mesh-controller_merge-window`: per open batch a key `<batch>.quiet` (time to live = the window, made again on each merge) and `<batch>.most` (the at-most, once), rounded up to whole seconds; a watcher runs a cut look on the first expiry. The 5 s cutter goes; looks on a merge, an expiry, taking the lease and each rollout pass.
- **The 5 min merge catch-up goes**, with signal S5 and its watchdog.
- The batch records stay in the store until milestone 5 moves them (ADR 0408 §8).
Tests: pure tests (TTL rounding, hold/unsettled, delay), testbus tests (held more than five times still recorded; an H4 reset leaves merges alone; the old consumer's unacked merge is taken over), and two integration tests listed in testdata/store-tests (a held merge is recorded and carried by the next rollout; a window closes by its key's expiry).
Reviewed in three rounds, approved at 20e14872. For later: issues 1006, 983, 984.
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
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-17 10:44 (new) → proposed (announced): novox/mesh-controller#367's head announced
2026-10-17 10:51 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-17 10:51 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-17 10:54 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-17 10:54 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-17 10:58 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@bafc31bf8568` — **delivered** since 2026-10-17T10:58:38Z
**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
**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-17 10:44 (new) → proposed (announced): novox/mesh-controller#367's head announced
- 2026-10-17 10:51 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-17 10:51 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-17 10:54 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-17 10:54 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-17 10:58 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`.
Reviewed by review-973@shanks: round 3 approved at 20e14872: no merge dropped (held, unsettled on shutdown, own consumer taking over at the ack floor), window keys rounded up with a watcher, cutter and catch-up gone. Marked through mesh-delivery.mark-ready (novox/hq issue 913).
ready at 20e14872ef1eea2790c709014d5c4e3460fa12f7
Reviewed by review-973@shanks: round 3 approved at 20e14872: no merge dropped (held, unsettled on shutdown, own consumer taking over at the ack floor), window keys rounded up with a watcher, cutter and catch-up gone. Marked through mesh-delivery.mark-ready (novox/hq issue 913).
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/batches_test.go, cmd/mesh-controller/merge_on_the_bus_test.go, cmd/mesh-controller/merge_window_bus_test.go, cmd/mesh-controller/missed_merges_test.go, cmd/mesh-controller/related_test.go, cmd/mesh-controller/signals_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/link/receive_fake_test.go, internal/link/receive_nats_test.go, internal/link/store_window_test.go, testdata/store-tests
Run by the build seat on shanks as build-1792233298577422842 (builds --log build-1792233298577422842).
b-4: the build seat did not say whether 44444444 is on its repository's trunk (it predates ADR 0238); registered as before
b-4: the list of predefined keys at 44444444 (generation 12) is published: font-size
b-5: the build seat did not say whether 55555555 is on its repository's trunk (it predates ADR 0238); registered as before
b-5: the list of predefined keys at 55555555 (generation 11) is not newer than the one kept, which stands
b-6: chimes is new to the catalogue, and novox/notifier on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-6: the build seat did not say whether 66666666 is on its repository's trunk (it predates ADR 0238); registered as before
plan-rollout: tier 0 done; asking tier 1: b
tier 1: plan-mailu: mailu on anchor waits: it could not be judged — its build c0, which the machine was last sent, is not in the build records (novox/hq ADR 0377 §4)
plan-mailu: mailu on laptop went out: it recreates none of its containers and moves none of its data (novox/hq ADR 0377)
plan-mailu: tier 0 built; sent mailu to laptop, one send each
plan-mailu: done — novox/mesh-catalog at c2, 1 tier(s)
plan-engine: sending engine to anchor first after tier 0: a new bus build waits for its planned step: sending anchor would replace the bus (nats 88135ad0 → 32307bd1), which is a planned step: `bus upgrade --why …` snapshots its streams first and checks them after (novox/hq ADR 0236)
change plan of novox/mesh-host at 4fe1d0d6 into main: builds mesh-host, sent nowhere; no bus step
tier 0: mesh-host
novox/mesh-host#114 (4fe1d0d6): nothing ended — the forge could not say the pull request's current head, so checks of its other heads keep running: cannot ask gitea.gitea_api: nothing serves gitea.gitea_api
novox/mesh-host#114 (4fe1d0d6): asked node-build-agent to check it before it merges — the gate over mesh-host (a merge would build 1 module(s) in 1 tier(s)) — as build-1792233618027450695
{
"rechecked": "novox/mesh-host@4fe1d0d693ff"
}
novox/mesh-catalog merged into main (3ad22356); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792233618428216115 — cut at once, sharing nothing with a batch assembling; grouped: novox/mesh-catalog@3ad22356; plan not yet calculated
app: read whole: no build source recorded, so its directory is its build source; e.g. modules/app/index.ts
plan-1792233618428216115 cut: novox/mesh-catalog 3ad22356, answering novox/mesh-catalog@3ad22356; 1 module(s) in 1 tier(s)
0: app
tier 0: release-1792233618787773147: 2 build(s) wait for a gate on anchor, laptop; one machine first, then the rest at once, each judged
release-1792233618787773147: anchor was already sent the 1 build(s) kept for it, at 10:40:18: judged from that send, nothing sent again
settings-1792233619439072805: the settings of app on the whole mesh — approved (ask s3): sent to anchor, laptop, one machine at a time, each judged
settings-1792233619439072805: sent anchor the settings of app on the whole mesh (ask s3), every build there kept; judging app there
settings-1792233619439072805: sent laptop the settings of app on the whole mesh (ask s3), every build there kept; judging app there
settings-1792233619439072805: the settings of app on the whole mesh (ask s3) delivered on anchor, laptop
keycloak on anchor:
+ issuer
+ x
run `plan anchor --diff` to see what it changes, `push anchor` to send it
power on anchor:
+ lid
+ x
run `plan anchor --diff` to see what it changes, `push anchor` to send it
keycloak on anchor:
~ x
the layer it replaced is kept: settings show keycloak --node anchor --history
run `plan anchor --diff` to see what it changes, `push anchor` to send it
the vault now holds accept/token (generation 1), accepted: sealed at this terminal to the vault's key for this call, opened in the vault alone and never remade by it; its machine takes it from the vault
this act could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
the vault now holds accept/token (generation 1), accepted: sealed at this terminal to the vault's key for this call, opened in the vault alone and never remade by it; its machine takes it from the vault
this change could NOT be announced on the operator's channels: no channel took it
this act could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
plan-308-stop stopped at tier 0 of 1; what was asked still builds and registers, nothing further is asked
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
plan-308-close closed at tier 0 of 1; what was asked still builds and registers, nothing further is asked
tier 0: tier 0: plan-754: done — novox/a at c0ffee, 1 tier(s)
FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 108s (shard 8 of 8: 130 tests)
ok github.com/novox/mesh-controller/internal/inventory 17s (shard 1 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 17s (shard 2 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 3 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 4 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/builder 19s (shard 1 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 21s (shard 2 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 47s (shard 3 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 49s (shard 4 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 1 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 48 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 4 of 4: 48 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.35s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.33s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.33s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.30s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.30s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.26s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.08s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.89s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.38s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.30s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.25s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.29s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.28s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.35s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.37s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.33s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.49s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.44s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.21s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.25s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.23s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.38s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.31s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.35s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.32s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.25s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.21s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.11s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.82s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.40s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.25s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.66s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.19s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.37s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.81s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (6.40s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.25s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.46s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.30s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.34s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.23s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.26s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.24s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.31s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.25s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.22s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.26s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.29s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.27s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.34s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.33s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.30s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (3.44s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (5.64s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.18s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (24.67s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (8.69s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (11.71s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.40s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.38s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.34s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.33s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.35s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.31s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.29s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.42s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.74s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.86s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.58s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.41s)
./cmd/mesh-controller --- PASS: TestReplay867 (4.76s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.82s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.40s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionIntoAReleaseBranchIsJudgedByItsOwnController (4.72s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionJudgedWithTheValidatorIntoAReleaseBranchIsJudgedByItsOwnController (4.23s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.65s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.62s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.52s)
./cmd/mesh-controller --- FAIL: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (6.39s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.64s)
./cmd/mesh-controller FAIL: go test exited 1
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.14s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.16s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.17s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.12s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.11s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.12s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.13s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.12s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.15s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.12s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.09s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.11s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.09s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.56s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.13s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.17s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.13s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.13s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.13s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.18s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.16s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.14s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.12s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.12s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.13s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.66s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.51s)
2 store test(s) listed in testdata/store-tests did not run and pass against the store
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestSSHClientOwnsTheOperatorsSSHConfig (0.07s)
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:35: ssh-client asks its forge-account binding for "ssh_alias", and what answers it says "address", "as", "at", "from", "https_base", "known_host", "ssh_base", "ssh_host" or "ssh_port"
FAIL github.com/novox/mesh-controller/internal/catalogue 21.826s
--- FAIL: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (6.58s)
merge_on_the_bus_test.go:125: the next rollout does not carry both merges: 1 walk(s), batches [{ID:plan-1792233611894099593 Repository:novox/one Branch:main Commit:c3 Merged:2026-10-17 10:40:05.885002 +0000 UTC Created:2026-10-17 10:40:11.894099 +0000 UTC Updated:2026-10-17 10:40:11.915622 +0000 UTC State:assembling Tier:0 Tiers:[] Modules:map[] Note:assembling: 90 s left (at the latest 10:50:11); grouped: novox/one@c3 (answers c2); plan not yet calculated TierEntered:2026-10-17 10:40:11.91576 +0000 UTC Revision:4 Epoch:0 Release:<nil> Delivery:0xc000798f00 Commits:[{Repository:novox/one Branch:main Commit:c3 Merged:2026-10-17 10:40:05.885002 +0000 UTC}] Times:<nil> Phases:<nil> WalkSaid:}], merges [{Repository:novox/one Commit:c1 Carried: Number:0 Title: Moves:[one] Head: Merged:2026-10-17 10:40:05.778188 +0000 UTC Heard:2026-10-17 10:40:05.779166 +0000 UTC}]
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 108s (shard 8 of 8: 130 tests)
**Merge check** at `20e14872`
Judged: head `20e14872ef1e` merged into trunk `b0d489a86c23`; read beside it: mesh-catalog `a7d526838ab0`, mesh-controller-main `b0d489a86c23`, mesh-host `cd13f7726ef0`, mesh-tools `7412c5b6c9c5`
- `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: TestSSHClientOwnsTheOperatorsSSHConfig (0.07s); and TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried
**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/batches_test.go, cmd/mesh-controller/merge_on_the_bus_test.go, cmd/mesh-controller/merge_window_bus_test.go, cmd/mesh-controller/missed_merges_test.go, cmd/mesh-controller/related_test.go, cmd/mesh-controller/signals_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/link/receive_fake_test.go, internal/link/receive_nats_test.go, internal/link/store_window_test.go, testdata/store-tests
Run by the build seat on shanks as `build-1792233298577422842` (`builds --log build-1792233298577422842`).
```
b-4: the build seat did not say whether 44444444 is on its repository's trunk (it predates ADR 0238); registered as before
b-4: the list of predefined keys at 44444444 (generation 12) is published: font-size
b-5: the build seat did not say whether 55555555 is on its repository's trunk (it predates ADR 0238); registered as before
b-5: the list of predefined keys at 55555555 (generation 11) is not newer than the one kept, which stands
b-6: chimes is new to the catalogue, and novox/notifier on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
b-6: the build seat did not say whether 66666666 is on its repository's trunk (it predates ADR 0238); registered as before
plan-rollout: tier 0 done; asking tier 1: b
tier 1: plan-mailu: mailu on anchor waits: it could not be judged — its build c0, which the machine was last sent, is not in the build records (novox/hq ADR 0377 §4)
plan-mailu: mailu on laptop went out: it recreates none of its containers and moves none of its data (novox/hq ADR 0377)
plan-mailu: tier 0 built; sent mailu to laptop, one send each
plan-mailu: done — novox/mesh-catalog at c2, 1 tier(s)
plan-engine: sending engine to anchor first after tier 0: a new bus build waits for its planned step: sending anchor would replace the bus (nats 88135ad0 → 32307bd1), which is a planned step: `bus upgrade --why …` snapshots its streams first and checks them after (novox/hq ADR 0236)
change plan of novox/mesh-host at 4fe1d0d6 into main: builds mesh-host, sent nowhere; no bus step
tier 0: mesh-host
novox/mesh-host#114 (4fe1d0d6): nothing ended — the forge could not say the pull request's current head, so checks of its other heads keep running: cannot ask gitea.gitea_api: nothing serves gitea.gitea_api
novox/mesh-host#114 (4fe1d0d6): asked node-build-agent to check it before it merges — the gate over mesh-host (a merge would build 1 module(s) in 1 tier(s)) — as build-1792233618027450695
{
"rechecked": "novox/mesh-host@4fe1d0d693ff"
}
novox/mesh-catalog merged into main (3ad22356); it shares nothing with a batch assembling and no member of a group is still to merge: it is cut at once, it joins plan-1792233618428216115 — cut at once, sharing nothing with a batch assembling; grouped: novox/mesh-catalog@3ad22356; plan not yet calculated
app: read whole: no build source recorded, so its directory is its build source; e.g. modules/app/index.ts
plan-1792233618428216115 cut: novox/mesh-catalog 3ad22356, answering novox/mesh-catalog@3ad22356; 1 module(s) in 1 tier(s)
0: app
tier 0: release-1792233618787773147: 2 build(s) wait for a gate on anchor, laptop; one machine first, then the rest at once, each judged
release-1792233618787773147: anchor was already sent the 1 build(s) kept for it, at 10:40:18: judged from that send, nothing sent again
settings-1792233619439072805: the settings of app on the whole mesh — approved (ask s3): sent to anchor, laptop, one machine at a time, each judged
settings-1792233619439072805: sent anchor the settings of app on the whole mesh (ask s3), every build there kept; judging app there
settings-1792233619439072805: sent laptop the settings of app on the whole mesh (ask s3), every build there kept; judging app there
settings-1792233619439072805: the settings of app on the whole mesh (ask s3) delivered on anchor, laptop
keycloak on anchor:
+ issuer
+ x
run `plan anchor --diff` to see what it changes, `push anchor` to send it
power on anchor:
+ lid
+ x
run `plan anchor --diff` to see what it changes, `push anchor` to send it
keycloak on anchor:
~ x
the layer it replaced is kept: settings show keycloak --node anchor --history
run `plan anchor --diff` to see what it changes, `push anchor` to send it
the vault now holds accept/token (generation 1), accepted: sealed at this terminal to the vault's key for this call, opened in the vault alone and never remade by it; its machine takes it from the vault
this act could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
the vault now holds accept/token (generation 1), accepted: sealed at this terminal to the vault's key for this call, opened in the vault alone and never remade by it; its machine takes it from the vault
this change could NOT be announced on the operator's channels: no channel took it
this act could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
plan-308-stop stopped at tier 0 of 1; what was asked still builds and registers, nothing further is asked
this act by hand could NOT be recorded in the hand-act log, and is done anyway: the hand-act log mesh-controller_hand-acts is not on the bus — the controller asserts it at its start, so one older than this has not: nats: bucket not found
plan-308-close closed at tier 0 of 1; what was asked still builds and registers, nothing further is asked
tier 0: tier 0: plan-754: done — novox/a at c0ffee, 1 tier(s)
FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 108s (shard 8 of 8: 130 tests)
ok github.com/novox/mesh-controller/internal/inventory 17s (shard 1 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 17s (shard 2 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 3 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/inventory 15s (shard 4 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/builder 19s (shard 1 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 21s (shard 2 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 47s (shard 3 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 49s (shard 4 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/link 15s (shard 1 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 19s (shard 2 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 48 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 4 of 4: 48 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.35s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.33s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.33s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.30s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.30s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.26s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.08s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.89s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.38s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.30s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.25s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.29s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.28s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.35s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.37s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.33s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.49s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.44s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.21s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.25s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.23s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.38s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.31s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.35s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.32s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.25s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.21s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.11s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.82s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.40s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.25s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.66s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.19s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.37s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.81s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (6.40s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.25s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.46s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.30s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.34s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.23s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.26s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.24s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.31s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.25s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.22s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.26s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.29s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.27s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.34s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.33s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.30s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (3.44s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (5.64s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.18s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (24.67s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (8.69s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (11.71s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.40s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.38s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.34s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.33s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.35s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.31s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.29s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.42s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.74s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.86s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.58s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.41s)
./cmd/mesh-controller --- PASS: TestReplay867 (4.76s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.82s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.40s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionIntoAReleaseBranchIsJudgedByItsOwnController (4.72s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionJudgedWithTheValidatorIntoAReleaseBranchIsJudgedByItsOwnController (4.23s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.65s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.62s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.52s)
./cmd/mesh-controller --- FAIL: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (6.39s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.64s)
./cmd/mesh-controller FAIL: go test exited 1
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.14s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.16s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.17s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.12s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.11s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.12s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.13s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.12s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.15s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.12s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.09s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.11s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.09s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.56s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.13s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.17s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.13s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.13s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.13s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.18s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.16s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.14s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.12s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.12s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.13s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.66s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.51s)
2 store test(s) listed in testdata/store-tests did not run and pass against the store
--- what failed, picked from the whole of its output (the whole is in the build's log)
--- FAIL: TestSSHClientOwnsTheOperatorsSSHConfig (0.07s)
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:14: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
ssh_client_test.go:35: ssh-client asks its forge-account binding for "ssh_alias", and what answers it says "address", "as", "at", "from", "https_base", "known_host", "ssh_base", "ssh_host" or "ssh_port"
FAIL github.com/novox/mesh-controller/internal/catalogue 21.826s
--- FAIL: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (6.58s)
merge_on_the_bus_test.go:125: the next rollout does not carry both merges: 1 walk(s), batches [{ID:plan-1792233611894099593 Repository:novox/one Branch:main Commit:c3 Merged:2026-10-17 10:40:05.885002 +0000 UTC Created:2026-10-17 10:40:11.894099 +0000 UTC Updated:2026-10-17 10:40:11.915622 +0000 UTC State:assembling Tier:0 Tiers:[] Modules:map[] Note:assembling: 90 s left (at the latest 10:50:11); grouped: novox/one@c3 (answers c2); plan not yet calculated TierEntered:2026-10-17 10:40:11.91576 +0000 UTC Revision:4 Epoch:0 Release:<nil> Delivery:0xc000798f00 Commits:[{Repository:novox/one Branch:main Commit:c3 Merged:2026-10-17 10:40:05.885002 +0000 UTC}] Times:<nil> Phases:<nil> WalkSaid:}], merges [{Repository:novox/one Commit:c1 Carried: Number:0 Title: Moves:[one] Head: Merged:2026-10-17 10:40:05.778188 +0000 UTC Heard:2026-10-17 10:40:05.779166 +0000 UTC}]
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 108s (shard 8 of 8: 130 tests)
```
mesh-delivery: not merged. This pull request is marked ready at 20e14872ef, and its check failed: every machine composes with the change as it did without (4 of 4 compose) (head 20e14872ef merged into trunk b0d489a86c). A new head, marked ready once reviewed, or a recheck that passes, merges it.
mesh-delivery: **not merged.** This pull request is marked ready at 20e14872ef1eea2790c709014d5c4e3460fa12f7, and its check failed: every machine composes with the change as it did without (4 of 4 compose) (head 20e14872ef1e merged into trunk b0d489a86c23). A new head, marked ready once reviewed, or a recheck that passes, merges it.
Reviewed by review-973@shanks: phase 3 cycle approved at bafc31bf: the integration test closes its window (the code was right), the ssh-client test offers every value ssh-client asks. Marked through mesh-delivery.mark-ready (novox/hq issue 913).
ready at bafc31bf8568d376e73bb909687220715adabb7b
Reviewed by review-973@shanks: phase 3 cycle approved at bafc31bf: the integration test closes its window (the code was right), the ssh-client test offers every value ssh-client asks. Marked through mesh-delivery.mark-ready (novox/hq issue 913).
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/batches_test.go, cmd/mesh-controller/merge_on_the_bus_test.go, cmd/mesh-controller/merge_window_bus_test.go, cmd/mesh-controller/missed_merges_test.go, cmd/mesh-controller/related_test.go, cmd/mesh-controller/signals_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/catalogue/ssh_client_test.go, internal/link/receive_fake_test.go, internal/link/receive_nats_test.go, internal/link/store_window_test.go, testdata/store-tests
Run by the build seat on shanks as build-1792233889141252792 (builds --log build-1792233889141252792).
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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-17T01:02:16Z
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-config, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-provisioner, 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/batches_test.go, cmd/mesh-controller/merge_on_the_bus_test.go, cmd/mesh-controller/merge_window_bus_test.go, cmd/mesh-controller/missed_merges_test.go, cmd/mesh-controller/related_test.go, cmd/mesh-controller/signals_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/catalogue/ssh_client_test.go, internal/link/receive_fake_test.go, internal/link/receive_nats_test.go, internal/link/store_window_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.144s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.030s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/route-proxy 1.186s
ok github.com/novox/mesh-controller/internal/artifacts 1.060s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 55.332s
ok github.com/novox/mesh-controller/internal/catalogue 20.160s
ok github.com/novox/mesh-controller/internal/conditions 3.120s
ok github.com/novox/mesh-controller/internal/envfile 1.037s
ok github.com/novox/mesh-controller/internal/facts 1.062s
ok github.com/novox/mesh-controller/internal/identity 6.396s
ok github.com/novox/mesh-controller/internal/lease 10.274s
ok github.com/novox/mesh-controller/internal/licences 5.197s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.064s
ok github.com/novox/mesh-controller/internal/lint 3.390s
ok github.com/novox/mesh-controller/internal/outward 1.087s
ok github.com/novox/mesh-controller/internal/overlay 1.089s
ok github.com/novox/mesh-controller/internal/recordmirror 16.136s
ok github.com/novox/mesh-controller/internal/secrets 1.627s
ok github.com/novox/mesh-controller/internal/store 4.048s
ok github.com/novox/mesh-controller/internal/testbus 1.257s
ok github.com/novox/mesh-controller/internal/token 1.072s
ok github.com/novox/mesh-controller/cmd/mesh-controller 99s (shard 1 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 113s (shard 2 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 72s (shard 3 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 62s (shard 4 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 183s (shard 5 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 85s (shard 6 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 64s (shard 7 of 8: 130 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 121s (shard 8 of 8: 130 tests)
ok github.com/novox/mesh-controller/internal/inventory 18s (shard 1 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 18s (shard 2 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 3 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/inventory 17s (shard 4 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/builder 17s (shard 1 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 19s (shard 2 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 53s (shard 3 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 51s (shard 4 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 1 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 2 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 48 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 4 of 4: 48 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.29s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.29s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.29s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.28s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.27s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.22s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.04s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.86s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.31s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.31s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.28s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.29s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.31s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.27s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.56s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.23s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.20s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.26s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.46s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.34s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.47s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.42s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.34s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.24s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.21s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.12s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.77s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.41s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.25s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.24s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.67s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.31s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.49s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (6.41s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.23s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.55s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.32s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.25s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.31s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.30s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.26s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.27s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.22s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.21s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.26s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.34s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.29s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.25s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.33s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.31s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.25s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (3.07s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (4.92s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.21s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (26.25s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (8.65s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (13.50s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.48s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.43s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.33s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.31s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.32s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.25s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.27s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.43s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.82s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.84s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.65s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.44s)
./cmd/mesh-controller --- PASS: TestReplay867 (4.70s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.61s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.37s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionIntoAReleaseBranchIsJudgedByItsOwnController (4.36s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionJudgedWithTheValidatorIntoAReleaseBranchIsJudgedByItsOwnController (4.01s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.69s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.45s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.38s)
./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.43s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.65s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.16s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.19s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.11s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.20s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.14s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.14s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.14s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.15s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.12s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.14s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.47s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.14s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.73s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.17s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.22s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.20s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.19s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.17s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.14s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.13s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.14s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.17s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.29s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.60s)
**Merge check** at `bafc31bf`
Judged: head `bafc31bf8568` merged into trunk `b0d489a86c23`; read beside it: mesh-catalog `a7d526838ab0`, mesh-controller-main `b0d489a86c23`, mesh-host `cd13f7726ef0`, mesh-tools `7412c5b6c9c5`
- `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/batches_test.go, cmd/mesh-controller/merge_on_the_bus_test.go, cmd/mesh-controller/merge_window_bus_test.go, cmd/mesh-controller/missed_merges_test.go, cmd/mesh-controller/related_test.go, cmd/mesh-controller/signals_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/catalogue/ssh_client_test.go, internal/link/receive_fake_test.go, internal/link/receive_nats_test.go, internal/link/store_window_test.go, testdata/store-tests
Run by the build seat on shanks as `build-1792233889141252792` (`builds --log build-1792233889141252792`).
```
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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-17T01:02:16Z
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-config, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-provisioner, 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/batches_test.go, cmd/mesh-controller/merge_on_the_bus_test.go, cmd/mesh-controller/merge_window_bus_test.go, cmd/mesh-controller/missed_merges_test.go, cmd/mesh-controller/related_test.go, cmd/mesh-controller/signals_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/catalogue/ssh_client_test.go, internal/link/receive_fake_test.go, internal/link/receive_nats_test.go, internal/link/store_window_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.144s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.030s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/route-proxy 1.186s
ok github.com/novox/mesh-controller/internal/artifacts 1.060s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 55.332s
ok github.com/novox/mesh-controller/internal/catalogue 20.160s
ok github.com/novox/mesh-controller/internal/conditions 3.120s
ok github.com/novox/mesh-controller/internal/envfile 1.037s
ok github.com/novox/mesh-controller/internal/facts 1.062s
ok github.com/novox/mesh-controller/internal/identity 6.396s
ok github.com/novox/mesh-controller/internal/lease 10.274s
ok github.com/novox/mesh-controller/internal/licences 5.197s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.064s
ok github.com/novox/mesh-controller/internal/lint 3.390s
ok github.com/novox/mesh-controller/internal/outward 1.087s
ok github.com/novox/mesh-controller/internal/overlay 1.089s
ok github.com/novox/mesh-controller/internal/recordmirror 16.136s
ok github.com/novox/mesh-controller/internal/secrets 1.627s
ok github.com/novox/mesh-controller/internal/store 4.048s
ok github.com/novox/mesh-controller/internal/testbus 1.257s
ok github.com/novox/mesh-controller/internal/token 1.072s
ok github.com/novox/mesh-controller/cmd/mesh-controller 99s (shard 1 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 113s (shard 2 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 72s (shard 3 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 62s (shard 4 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 183s (shard 5 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 85s (shard 6 of 8: 131 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 64s (shard 7 of 8: 130 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 121s (shard 8 of 8: 130 tests)
ok github.com/novox/mesh-controller/internal/inventory 18s (shard 1 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 18s (shard 2 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 16s (shard 3 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/inventory 17s (shard 4 of 4: 77 tests)
ok github.com/novox/mesh-controller/internal/builder 17s (shard 1 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 19s (shard 2 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 53s (shard 3 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/builder 51s (shard 4 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 1 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 2 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 16s (shard 3 of 4: 48 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 4 of 4: 48 tests)
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.29s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.29s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.29s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.28s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.27s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.22s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.04s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.86s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.31s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.31s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.28s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.29s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.31s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.27s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.56s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.23s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.20s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.26s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.46s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.34s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.47s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.42s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.34s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.24s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.21s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.12s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.77s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.41s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.25s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.24s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.67s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.31s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.49s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (6.41s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.23s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.55s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.32s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.25s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.31s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.30s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.26s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.27s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.22s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.21s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.26s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.34s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.29s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.25s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.33s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.31s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.25s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (3.07s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (4.92s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.21s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (26.25s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (8.65s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (13.50s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.48s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.43s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.33s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.31s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.32s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.25s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.27s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.43s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.82s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.84s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.65s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.44s)
./cmd/mesh-controller --- PASS: TestReplay867 (4.70s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.61s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.37s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionIntoAReleaseBranchIsJudgedByItsOwnController (4.36s)
./cmd/mesh-controller --- PASS: TestAGroupsCompositionJudgedWithTheValidatorIntoAReleaseBranchIsJudgedByItsOwnController (4.01s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.69s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.45s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.38s)
./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.43s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.65s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.16s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.19s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.11s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.20s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.14s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.14s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.14s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.15s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.12s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.14s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.47s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.14s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.73s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.17s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.22s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.20s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.19s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.17s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.14s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.13s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.14s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.17s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.29s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.60s)
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Milestone 1 of hq design 47, step 2 (issues 973 and 921). Decisions: ADR 0407 §1 and §3.
controller-merges: no max-deliver, not reset by healer H4, a delay growing from 5 s to 5 min; it is asserted before the events consumer and, when it takes over, starts at that consumer's ack floor + 1, so the delivery of this change loses no merge.mesh-controller_merge-window: per open batch a key<batch>.quiet(time to live = the window, made again on each merge) and<batch>.most(the at-most, once), rounded up to whole seconds; a watcher runs a cut look on the first expiry. The 5 s cutter goes; looks on a merge, an expiry, taking the lease and each rollout pass.Tests: pure tests (TTL rounding, hold/unsettled, delay), testbus tests (held more than five times still recorded; an H4 reset leaves merges alone; the old consumer's unacked merge is taken over), and two integration tests listed in testdata/store-tests (a held merge is recorded and carried by the next rollout; a window closes by its key's expiry).
Reviewed in three rounds, approved at
20e14872. For later: issues 1006, 983, 984.Delivery
novox/mesh-controller@bafc31bf8568— delivered since 2026-10-17T10:58:38ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.ready at
20e14872efReviewed by review-973@shanks: round 3 approved at
20e14872: no merge dropped (held, unsettled on shutdown, own consumer taking over at the ack floor), window keys rounded up with a watcher, cutter and catch-up gone. Marked through mesh-delivery.mark-ready (novox/hq issue 913).Merge check at
20e14872Judged: head
20e14872ef1emerged into trunkb0d489a86c23; read beside it: mesh-cataloga7d526838ab0, mesh-controller-mainb0d489a86c23, mesh-hostcd13f7726ef0, mesh-tools7412c5b6c9c5mesh/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: TestSSHClientOwnsTheOperatorsSSHConfig (0.07s); and TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarriedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1792233298577422842(builds --log build-1792233298577422842).mesh-delivery: not merged. This pull request is marked ready at
20e14872ef, and its check failed: every machine composes with the change as it did without (4 of 4 compose) (head20e14872efmerged into trunkb0d489a86c). A new head, marked ready once reviewed, or a recheck that passes, merges it.ready at
bafc31bf85Reviewed by review-973@shanks: phase 3 cycle approved at
bafc31bf: the integration test closes its window (the code was right), the ssh-client test offers every value ssh-client asks. Marked through mesh-delivery.mark-ready (novox/hq issue 913).Merge check at
bafc31bfJudged: head
bafc31bf8568merged into trunkb0d489a86c23; read beside it: mesh-cataloga7d526838ab0, mesh-controller-mainb0d489a86c23, mesh-hostcd13f7726ef0, mesh-tools7412c5b6c9c5mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1792233889141252792(builds --log build-1792233889141252792).