Design 47 milestone 4 (issue 980, ADR 0404), the controller half. It was #375 in the delivery group feat/backup-before-send; after mesh-catalog #353 merged on the group's Approve (23:48), #375 could not merge: its merge gate waited for a composed verdict the closed group never asks again. On the operator's word (00:09) #375's delivery was stopped and it is opened again here, alone. mesh-catalog #353 (mesh-delivery, restic) was delivered on its own at 00:11; its new hold acts only on a plan's backups record, which this change starts writing. The head 0bb54e2c is an empty commit on the reviewed 91a7c1ea (same tree), because mesh-delivery names a delivery by its commit and 91a7c1ea's is #375's stopped one.
Issue 1065. Once a plan has started and before its first tier is asked, the controller asks node-backup.now on every machine running each moved module that has an item protected by a backup, and reads backed-up's last night. The holders of node-backup are derived as seats derives them, and a failed read is tried again, never read as no holder. Nothing is asked of a builder or sent until every backup is done. A machine with no backup holder is said in the plan. A plan moving no backed-up item is unchanged. The plan record gains backups {state, asked:[{machine, module, state, asked_at, tried_at, words}], no_holder}, kept in the store by migration 0103 (release_plan.backups jsonb).
Issue 1066. A backup that fails, does not answer, or cannot be asked within ten minutes holds the plan (not failed, not retried), names the machine, the module and the backup's words, and raises one condition (backup-held). The new verb delivery-backups-again {plan, why} asks the failed backups again; mesh-delivery's release calls it.
Integration test backups_before_send_integration_test.go proves acceptance test 3 on the controller side; it passed at this tree (23:36, build-1792272687640891318).
Design 47 milestone 4 (issue 980, ADR 0404), the controller half. It was #375 in the delivery group `feat/backup-before-send`; after mesh-catalog #353 merged on the group's Approve (23:48), #375 could not merge: its merge gate waited for a composed verdict the closed group never asks again. On the operator's word (00:09) #375's delivery was stopped and it is opened again here, alone. mesh-catalog #353 (mesh-delivery, restic) was delivered on its own at 00:11; its new hold acts only on a plan's backups record, which this change starts writing. The head 0bb54e2c is an empty commit on the reviewed 91a7c1ea (same tree), because mesh-delivery names a delivery by its commit and 91a7c1ea's is #375's stopped one.
- **Issue 1065.** Once a plan has started and before its first tier is asked, the controller asks `node-backup.now` on every machine running each moved module that has an item protected by a backup, and reads `backed-up`'s last night. The holders of `node-backup` are derived as `seats` derives them, and a failed read is tried again, never read as no holder. Nothing is asked of a builder or sent until every backup is done. A machine with no backup holder is said in the plan. A plan moving no backed-up item is unchanged. The plan record gains `backups` {state, asked:[{machine, module, state, asked_at, tried_at, words}], no_holder}, kept in the store by migration 0103 (`release_plan.backups jsonb`).
- **Issue 1066.** A backup that fails, does not answer, or cannot be asked within ten minutes holds the plan (not failed, not retried), names the machine, the module and the backup's words, and raises one condition (`backup-held`). The new verb `delivery-backups-again` {plan, why} asks the failed backups again; mesh-delivery's `release` calls it.
- Integration test `backups_before_send_integration_test.go` proves acceptance test 3 on the controller side; it passed at this tree (23:36, build-1792272687640891318).
Reviewed-by: review@shanks at 0bb54e2c1fa28c79ac7b1fd68b47e26c88e2cde2
mesh/repo-check head a39d6ce78d19 merged into trunk 7c9c187ca6e2 — fail: its merge-check.sh failed: --- FAIL: TestADeliveryThatMovesABackedUpModuleWaitsFor…
mesh/delivery stopped: Operator's word (2026-10-18 00:09): split the group. After mesh-catalog #353 merged on the group's Approve (23:48:51), #375's merg…
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 22:13 (new) → proposed (announced): novox/mesh-controller#376's head announced
2026-10-17 22:19 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-17 22:19 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-17 22:20 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 22:20 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 22:27 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@0bb54e2c1fa2` — **delivered** since 2026-10-17T22:27:58Z
**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 22:13 (new) → proposed (announced): novox/mesh-controller#376's head announced
- 2026-10-17 22:19 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-17 22:19 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-17 22:20 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 22:20 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 22:27 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`.
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/backups_before_send_integration_test.go, cmd/mesh-controller/plan_backups_hold_test.go, cmd/mesh-controller/plan_backups_test.go, internal/inventory/plan_backups_test.go, internal/inventory/plans_test.go
Run by the build seat on shanks as build-1792275192852414490 (builds --log build-1792275192852414490).
lease_test.go:78: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-17T22:16:21Z and it is lost at 2026-10-17T22:16:22Z unless a renewal is made first
lease_test.go:78: a: renewed the controller lease (epoch 1) after 1 renewal(s) that could not be made since 2026-10-17T22:16:21Z: this controller acts again
lease_test.go:78: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-17T22:16:21Z and it is lost at 2026-10-17T22:16:22Z unless a renewal is made first
lease_test.go:78: a: renewed the controller lease (epoch 1) after 1 renewal(s) that could not be made since 2026-10-17T22:16:21Z: this controller acts again
lease_test.go:78: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-17T22:16:21Z and it is lost at 2026-10-17T22:16:22Z unless a renewal is made first
lease_test.go:78: a: LOST the controller lease (epoch 1): the renewal at revision 1 was refused: another holder wrote the key (b, epoch 1, revision 2): nats: nats: API error: code=400 err_code=10071 description=wrong last sequence: 2: nats: key revision mismatch — this controller stops acting at once
lease_test.go:78: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-17T22:16:19Z, 1 failed since): the renewal could not be made: context deadline exceeded — this controller stops acting at once
lease_test.go:78: b: took the controller lease at epoch 2 (b)
lease_test.go:78: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-17T22:16:19Z, 0 failed since) — this controller stops acting at once
lease_test.go:78: a: gave the controller lease back (epoch 1)
lease_test.go:78: b: took the controller lease at epoch 7 (b)
PASS
ok github.com/novox/mesh-controller/internal/lease 10.253s
PASS
ok github.com/novox/mesh-controller/internal/licences 5.777s
PASS
ok github.com/novox/mesh-controller/internal/licences/adapters 1.037s
emptyonerror_test.go:26: 11 error branch(es) answer empty, each saying why
PASS
ok github.com/novox/mesh-controller/internal/lint 3.350s
PASS
ok github.com/novox/mesh-controller/internal/outward 1.071s
PASS
ok github.com/novox/mesh-controller/internal/overlay 1.058s
PASS
ok github.com/novox/mesh-controller/internal/recordmirror 17.835s
PASS
ok github.com/novox/mesh-controller/internal/secrets 1.583s
MESH_STORE_EXAMPLE_PORT is "${seat:mesh-store:5432}", a placeholder nothing filled in — ignored; the port in MESH_STORE_EXAMPLE stands. The control plane composing this declaration is older than the manifest naming it: rebuild and push it
PASS
ok github.com/novox/mesh-controller/internal/store 3.734s
testbus_test.go:22: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
PASS
ok github.com/novox/mesh-controller/internal/testbus 1.263s
PASS
ok github.com/novox/mesh-controller/internal/token 1.040s
ok github.com/novox/mesh-controller/cmd/mesh-controller 187s (shard 1 of 8: 139 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 112s (shard 2 of 8: 139 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 122s (shard 3 of 8: 139 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 116s (shard 4 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 91s (shard 5 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 76s (shard 6 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 52s (shard 7 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 66s (shard 8 of 8: 138 tests)
ok github.com/novox/mesh-controller/internal/inventory 26s (shard 1 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 25s (shard 2 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 3 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 4 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/builder 24s (shard 1 of 4: 54 tests)
ok github.com/novox/mesh-controller/internal/builder 27s (shard 2 of 4: 53 tests)
ok github.com/novox/mesh-controller/internal/builder 38s (shard 3 of 4: 53 tests)
ok github.com/novox/mesh-controller/internal/builder 25s (shard 4 of 4: 53 tests)
ok github.com/novox/mesh-controller/internal/link 24s (shard 1 of 4: 50 tests)
ok github.com/novox/mesh-controller/internal/link 17s (shard 2 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 3 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 27s (shard 4 of 4: 49 tests)
integration level (the whole suite, tag integration): 3328 tests (6 skipped outside the shards), 192 s
nested module modules/build-agent:
ok build-agent 1.015s
nested module modules/route-proxy:
ok route-proxy/cmd/route-provider 1.015s
nested modules: 3 s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.32s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.37s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.33s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.34s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.30s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.25s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.01s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.95s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.41s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.24s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.28s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.27s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.25s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.28s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.27s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.38s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.34s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.22s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.21s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.26s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.35s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.31s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.33s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.30s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.27s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.21s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.19s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.11s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.62s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.36s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.23s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.22s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.31s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.63s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.27s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.32s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (6.17s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.24s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.38s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.28s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.27s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.26s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.35s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.21s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.21s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.24s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.27s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.25s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.32s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.30s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.26s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (2.38s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (4.14s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.29s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.20s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (38.25s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (9.13s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (14.06s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.47s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.45s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.35s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.34s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.36s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.32s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.32s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.38s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.71s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.73s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.51s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.39s)
./cmd/mesh-controller --- PASS: TestReplay867 (4.57s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.42s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.37s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.37s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.27s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.26s)
./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.42s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.58s)
./cmd/mesh-controller --- PASS: TestEveryMoveAMergeAndTheCutMakeOfAPlanIsSaid (0.23s)
./cmd/mesh-controller --- PASS: TestARolloutAdvancesOnEventsAndAReplacedControllerResumesIt (3.92s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoByTheDeliverVerbIsAskedWithNoOtherEvent (0.91s)
./cmd/mesh-controller --- PASS: TestTwoMergesWithinAMinuteLeaveEachOpenPullRequestOneQueuedCheck (0.74s)
./cmd/mesh-controller --- PASS: TestADeliveryGroupMovingAModuleMachinesRunPassesTheGate (6.98s)
./cmd/mesh-controller --- PASS: TestAModuleMovesOnTheOperatorsApproveOfTheMergeThatMovedIt (1.18s)
./cmd/mesh-controller --- PASS: TestAModuleBuiltFromANewRepositoryIsRegisteredOnlyOnTheOperatorsApproveOnTheBus (0.76s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.11s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.10s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.12s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.11s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.09s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.46s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.12s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.52s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.11s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.09s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.10s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.10s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.09s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.13s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.11s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.11s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.08s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.39s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.51s)
**Merge check** at `0bb54e2c`
Judged: head `0bb54e2c1fa2` merged into trunk `7c9c187ca6e2`; read beside it: mesh-catalog `3395af96bc34`, mesh-controller-main `7c9c187ca6e2`, mesh-host `6469e8238443`, 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/backups_before_send_integration_test.go, cmd/mesh-controller/plan_backups_hold_test.go, cmd/mesh-controller/plan_backups_test.go, internal/inventory/plan_backups_test.go, internal/inventory/plans_test.go
Run by the build seat on shanks as `build-1792275192852414490` (`builds --log build-1792275192852414490`).
```
lease_test.go:78: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-17T22:16:21Z and it is lost at 2026-10-17T22:16:22Z unless a renewal is made first
lease_test.go:78: a: renewed the controller lease (epoch 1) after 1 renewal(s) that could not be made since 2026-10-17T22:16:21Z: this controller acts again
lease_test.go:78: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-17T22:16:21Z and it is lost at 2026-10-17T22:16:22Z unless a renewal is made first
lease_test.go:78: a: renewed the controller lease (epoch 1) after 1 renewal(s) that could not be made since 2026-10-17T22:16:21Z: this controller acts again
lease_test.go:78: a: the controller lease (epoch 1) could not be renewed: the renewal could not be made: context deadline exceeded — it is kept: no new act starts after 2026-10-17T22:16:21Z and it is lost at 2026-10-17T22:16:22Z unless a renewal is made first
lease_test.go:78: a: LOST the controller lease (epoch 1): the renewal at revision 1 was refused: another holder wrote the key (b, epoch 1, revision 2): nats: nats: API error: code=400 err_code=10071 description=wrong last sequence: 2: nats: key revision mismatch — this controller stops acting at once
lease_test.go:78: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-17T22:16:19Z, 1 failed since): the renewal could not be made: context deadline exceeded — this controller stops acting at once
lease_test.go:78: b: took the controller lease at epoch 2 (b)
lease_test.go:78: a: LOST the controller lease (epoch 1): no renewal was made within the key's age of 3s (the last at 2026-10-17T22:16:19Z, 0 failed since) — this controller stops acting at once
lease_test.go:78: a: gave the controller lease back (epoch 1)
lease_test.go:78: b: took the controller lease at epoch 7 (b)
PASS
ok github.com/novox/mesh-controller/internal/lease 10.253s
PASS
ok github.com/novox/mesh-controller/internal/licences 5.777s
PASS
ok github.com/novox/mesh-controller/internal/licences/adapters 1.037s
emptyonerror_test.go:26: 11 error branch(es) answer empty, each saying why
PASS
ok github.com/novox/mesh-controller/internal/lint 3.350s
PASS
ok github.com/novox/mesh-controller/internal/outward 1.071s
PASS
ok github.com/novox/mesh-controller/internal/overlay 1.058s
PASS
ok github.com/novox/mesh-controller/internal/recordmirror 17.835s
PASS
ok github.com/novox/mesh-controller/internal/secrets 1.583s
MESH_STORE_EXAMPLE_PORT is "${seat:mesh-store:5432}", a placeholder nothing filled in — ignored; the port in MESH_STORE_EXAMPLE stands. The control plane composing this declaration is older than the manifest naming it: rebuild and push it
PASS
ok github.com/novox/mesh-controller/internal/store 3.734s
testbus_test.go:22: judged against /var/lib/build-agent/workspace/check/mesh-catalog as cloned beside this check
PASS
ok github.com/novox/mesh-controller/internal/testbus 1.263s
PASS
ok github.com/novox/mesh-controller/internal/token 1.040s
ok github.com/novox/mesh-controller/cmd/mesh-controller 187s (shard 1 of 8: 139 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 112s (shard 2 of 8: 139 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 122s (shard 3 of 8: 139 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 116s (shard 4 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 91s (shard 5 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 76s (shard 6 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 52s (shard 7 of 8: 138 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 66s (shard 8 of 8: 138 tests)
ok github.com/novox/mesh-controller/internal/inventory 26s (shard 1 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 25s (shard 2 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 3 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/inventory 24s (shard 4 of 4: 78 tests)
ok github.com/novox/mesh-controller/internal/builder 24s (shard 1 of 4: 54 tests)
ok github.com/novox/mesh-controller/internal/builder 27s (shard 2 of 4: 53 tests)
ok github.com/novox/mesh-controller/internal/builder 38s (shard 3 of 4: 53 tests)
ok github.com/novox/mesh-controller/internal/builder 25s (shard 4 of 4: 53 tests)
ok github.com/novox/mesh-controller/internal/link 24s (shard 1 of 4: 50 tests)
ok github.com/novox/mesh-controller/internal/link 17s (shard 2 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 20s (shard 3 of 4: 49 tests)
ok github.com/novox/mesh-controller/internal/link 27s (shard 4 of 4: 49 tests)
integration level (the whole suite, tag integration): 3328 tests (6 skipped outside the shards), 192 s
nested module modules/build-agent:
ok build-agent 1.015s
nested module modules/route-proxy:
ok route-proxy/cmd/route-provider 1.015s
nested modules: 3 s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.32s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.37s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.33s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.34s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.30s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.25s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.01s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.95s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.41s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.24s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.28s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.27s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.25s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.28s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.27s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.38s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.34s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.22s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.21s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.26s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.35s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.31s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.33s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.30s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.27s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.21s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.19s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.11s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.62s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.36s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.23s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.22s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.31s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.63s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.27s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.32s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (6.17s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.24s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.38s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.28s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.27s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.26s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.35s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.21s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.21s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.24s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.27s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.31s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.25s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.32s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.30s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.35s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.26s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (2.38s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (4.14s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.29s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.20s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (38.25s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (9.13s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (14.06s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.47s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.45s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.35s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.34s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.36s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.32s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.32s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.38s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.71s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.73s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.51s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.39s)
./cmd/mesh-controller --- PASS: TestReplay867 (4.57s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.42s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.37s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.37s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.27s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.26s)
./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.42s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.58s)
./cmd/mesh-controller --- PASS: TestEveryMoveAMergeAndTheCutMakeOfAPlanIsSaid (0.23s)
./cmd/mesh-controller --- PASS: TestARolloutAdvancesOnEventsAndAReplacedControllerResumesIt (3.92s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoByTheDeliverVerbIsAskedWithNoOtherEvent (0.91s)
./cmd/mesh-controller --- PASS: TestTwoMergesWithinAMinuteLeaveEachOpenPullRequestOneQueuedCheck (0.74s)
./cmd/mesh-controller --- PASS: TestADeliveryGroupMovingAModuleMachinesRunPassesTheGate (6.98s)
./cmd/mesh-controller --- PASS: TestAModuleMovesOnTheOperatorsApproveOfTheMergeThatMovedIt (1.18s)
./cmd/mesh-controller --- PASS: TestAModuleBuiltFromANewRepositoryIsRegisteredOnlyOnTheOperatorsApproveOnTheBus (0.76s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.11s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.10s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.11s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.12s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.11s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.09s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.46s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.12s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.52s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.11s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.09s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.10s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.10s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.09s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.13s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.11s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.11s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.08s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.39s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.51s)
```
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.
Design 47 milestone 4 (issue 980, ADR 0404), the controller half. It was #375 in the delivery group
feat/backup-before-send; after mesh-catalog #353 merged on the group's Approve (23:48), #375 could not merge: its merge gate waited for a composed verdict the closed group never asks again. On the operator's word (00:09) #375's delivery was stopped and it is opened again here, alone. mesh-catalog #353 (mesh-delivery, restic) was delivered on its own at 00:11; its new hold acts only on a plan's backups record, which this change starts writing. The head0bb54e2cis an empty commit on the reviewed91a7c1ea(same tree), because mesh-delivery names a delivery by its commit and 91a7c1ea's is #375's stopped one.node-backup.nowon every machine running each moved module that has an item protected by a backup, and readsbacked-up's last night. The holders ofnode-backupare derived asseatsderives them, and a failed read is tried again, never read as no holder. Nothing is asked of a builder or sent until every backup is done. A machine with no backup holder is said in the plan. A plan moving no backed-up item is unchanged. The plan record gainsbackups{state, asked:[{machine, module, state, asked_at, tried_at, words}], no_holder}, kept in the store by migration 0103 (release_plan.backups jsonb).backup-held). The new verbdelivery-backups-again{plan, why} asks the failed backups again; mesh-delivery'sreleasecalls it.backups_before_send_integration_test.goproves acceptance test 3 on the controller side; it passed at this tree (23:36, build-1792272687640891318).Reviewed-by: review@shanks at
0bb54e2c1fDelivery
novox/mesh-controller@0bb54e2c1fa2— delivered since 2026-10-17T22:27:58ZDelivery 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.Merge check at
0bb54e2cJudged: head
0bb54e2c1fa2merged into trunk7c9c187ca6e2; read beside it: mesh-catalog3395af96bc34, mesh-controller-main7c9c187ca6e2, mesh-host6469e8238443, 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-1792275192852414490(builds --log build-1792275192852414490).