Milestone "held and failed moves reach the operator; no image the store lacks is sent", one delivery group with mesh-host on fix/1732-held-moves-asked.
Issue 1732 (met three times today) and 1320: a machine holding a recorded module's recreating move for a person (ADR 0377) raises machine.<node>.moves-held, asked of the operator with one answer, Release, which calls the controller's own push for that node with move = exactly the held modules (ADR 0217, ADR 0259 §6). A machine that also holds a person's own hold (a module set to record with a why, or the bus) is raised without Release: the condition names that hold and leaves the push to the controller's terminal. A hold a person chose alone is never asked. plans adds "— N held for a person: …" to a plan that carried a move a machine still holds. The existing release-held condition gains Release (upgrade release-backlog), and a plan waiting behind a failed release reads "held … until a person releases it", not "building … LATE". The controller's broker grants allow it to act on a warrant for push and upgrade.
Issue 1742, controller half: at send time a module whose image is at the store's address and not held by the store is left out with a reason (LeftOut, ADR 0163 rule 6), and module.<m>.<node>.image-missing is raised until the store holds it; a store that does not answer holds nothing back. The builder's PublishImage records the digest of the exact name it pushed, not the daemon's first RepoDigest (the likely cause of the recorded c62150b8 the store never held).
Tests: 1732/AC1-AC7, AC10 (unit, held_moves_test.go), AC8-AC9 (integration, held_moves_integration_test.go); 1742/AC1-AC3 (unit, image_missing_test.go), AC4 (integration), AC5 (internal/builder/registry_test.go). Try build-1792606639917361007 passed (unit 1524 tests 2.92 s of 5 s; integration passed). Follow-ups opened by the review: 1764, 1765. Context: fix-1732@shanks.
Milestone "held and failed moves reach the operator; no image the store lacks is sent", one delivery group with mesh-host on `fix/1732-held-moves-asked`.
Issue 1732 (met three times today) and 1320: a machine holding a recorded module's recreating move for a person (ADR 0377) raises `machine.<node>.moves-held`, asked of the operator with one answer, Release, which calls the controller's own `push` for that node with `move` = exactly the held modules (ADR 0217, ADR 0259 §6). A machine that also holds a person's own hold (a module set to record with a why, or the bus) is raised without Release: the condition names that hold and leaves the push to the controller's terminal. A hold a person chose alone is never asked. `plans` adds "— N held for a person: …" to a plan that carried a move a machine still holds. The existing `release-held` condition gains Release (`upgrade release-backlog`), and a plan waiting behind a failed release reads "held … until a person releases it", not "building … LATE". The controller's broker grants allow it to act on a warrant for push and upgrade.
Issue 1742, controller half: at send time a module whose image is at the store's address and not held by the store is left out with a reason (LeftOut, ADR 0163 rule 6), and `module.<m>.<node>.image-missing` is raised until the store holds it; a store that does not answer holds nothing back. The builder's `PublishImage` records the digest of the exact name it pushed, not the daemon's first RepoDigest (the likely cause of the recorded c62150b8 the store never held).
Tests: 1732/AC1-AC7, AC10 (unit, held_moves_test.go), AC8-AC9 (integration, held_moves_integration_test.go); 1742/AC1-AC3 (unit, image_missing_test.go), AC4 (integration), AC5 (internal/builder/registry_test.go). Try build-1792606639917361007 passed (unit 1524 tests 2.92 s of 5 s; integration passed). Follow-ups opened by the review: 1764, 1765. Context: fix-1732@shanks.
Reviewed-by: reviewer-1732@shanks at d6db334840a543ef675759040ef5b3cea636ecad
mesh/merge-gate head d6db334840a5 merged into trunk 98155e327b6d — pass: group fix/1732-held-moves-asked composed: every machine composes with the change a…
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before route-proxy, build-agent is judged on its first machine
composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
Machines
mesh-host on every machine running it: sent
route-proxy on every machine running it: sent
mesh-controller on every machine running it: sent
build-agent on every machine running it: sent
Transitions
2026-10-21 18:26 (new) → proposed (announced): novox/mesh-controller#428's head announced
2026-10-21 18:45 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-21 18:45 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-21 19:19 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-21 19:19 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-21 19:28 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@d6db334840a5` — **delivered** since 2026-10-21T19:28:46Z
**Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller, route-proxy
- tier 1: build-agent
- ace: receives route-proxy, build-agent
- g14: receives build-agent
- novox: receives mesh-controller, route-proxy, build-agent
- shanks: receives build-agent
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before route-proxy, build-agent is judged on its first machine
**Group** `fix/1732-held-moves-asked`: novox/mesh-controller@d6db334840a5, novox/mesh-host@09c77d57b823
- composed together: pass — every machine composes with the change as it did without (4 of 4 compose)
**Machines**
- mesh-host on every machine running it: sent
- route-proxy on every machine running it: sent
- mesh-controller on every machine running it: sent
- build-agent on every machine running it: sent
**Transitions**
- 2026-10-21 18:26 (new) → proposed (announced): novox/mesh-controller#428's head announced
- 2026-10-21 18:45 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-21 18:45 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-21 19:19 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-21 19:19 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-21 19:28 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/held_moves_integration_test.go, cmd/mesh-controller/held_moves_test.go, cmd/mesh-controller/image_missing_test.go, cmd/mesh-controller/plain_words_test.go, cmd/mesh-controller/signals_test.go, internal/broker/testdata/composed.conf, internal/builder/registry_test.go
Run by the build seat on ace as build-1792607213440552208 (builds --log build-1792607213440552208).
Out of date when it landed: out of date: judged against trunk 44033f4b6d, the trunk is now 98155e327b6d; judged again on a recheck or when it is merged
**Merge check** at `d6db3348`
Judged: head `d6db334840a5` merged into trunk `44033f4b6d72`; read beside it: mesh-catalog `db5e6c5b48f4`, mesh-controller-main `44033f4b6d72`, mesh-host `c231d1031fc7`, mesh-tools `e0fadc43d9dd`
- `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/held_moves_integration_test.go, cmd/mesh-controller/held_moves_test.go, cmd/mesh-controller/image_missing_test.go, cmd/mesh-controller/plain_words_test.go, cmd/mesh-controller/signals_test.go, internal/broker/testdata/composed.conf, internal/builder/registry_test.go
Run by the build seat on ace as `build-1792607213440552208` (`builds --log build-1792607213440552208`).
```
PASS
ok github.com/novox/mesh-controller/internal/store 3.853s
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.313s
PASS
ok github.com/novox/mesh-controller/internal/token 1.056s
ok github.com/novox/mesh-controller/cmd/mesh-controller 138s (shard 1 of 8: 167 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 147s (shard 2 of 8: 167 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 102s (shard 3 of 8: 167 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 57s (shard 4 of 8: 166 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 96s (shard 5 of 8: 166 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 352s (shard 6 of 8: 166 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 173s (shard 7 of 8: 166 tests)
ok github.com/novox/mesh-controller/cmd/mesh-controller 240s (shard 8 of 8: 166 tests)
ok github.com/novox/mesh-controller/internal/inventory 30s (shard 1 of 4: 92 tests)
ok github.com/novox/mesh-controller/internal/inventory 29s (shard 2 of 4: 92 tests)
ok github.com/novox/mesh-controller/internal/inventory 32s (shard 3 of 4: 92 tests)
ok github.com/novox/mesh-controller/internal/inventory 28s (shard 4 of 4: 92 tests)
ok github.com/novox/mesh-controller/internal/builder 32s (shard 1 of 4: 58 tests)
ok github.com/novox/mesh-controller/internal/builder 24s (shard 2 of 4: 58 tests)
ok github.com/novox/mesh-controller/internal/builder 33s (shard 3 of 4: 58 tests)
ok github.com/novox/mesh-controller/internal/builder 28s (shard 4 of 4: 57 tests)
ok github.com/novox/mesh-controller/internal/link 28s (shard 1 of 4: 55 tests)
ok github.com/novox/mesh-controller/internal/link 14s (shard 2 of 4: 54 tests)
ok github.com/novox/mesh-controller/internal/link 32s (shard 3 of 4: 54 tests)
ok github.com/novox/mesh-controller/internal/link 29s (shard 4 of 4: 54 tests)
integration level (the whole suite, tag integration): 2712 tests (3 skipped outside the shards), 357 s
nested module modules/build-agent:
ok build-agent 1.014s
nested module modules/route-proxy:
ok route-proxy/cmd/route-provider 1.012s
nested modules: 2 s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.26s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.27s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.24s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.23s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s)
./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.69s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.20s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.20s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.22s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.23s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.25s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.25s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.26s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.29s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.26s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.18s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.18s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.21s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.22s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.26s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.24s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.17s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.18s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.16s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.49s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.30s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.17s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.48s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.16s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.15s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.29s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.65s)
./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (4.64s)
./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.23s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.40s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.22s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.17s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.16s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.18s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.19s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.19s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.27s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.18s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.15s)
./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.25s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.26s)
./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.29s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.29s)
./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.23s)
./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.30s)
./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.28s)
./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.32s)
./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.25s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (2.15s)
./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (3.06s)
./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s)
./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.16s)
./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (75.62s)
./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (21.03s)
./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (34.51s)
./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.32s)
./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.30s)
./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.25s)
./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.27s)
./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.30s)
./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.22s)
./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.24s)
./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.34s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.64s)
./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.73s)
./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.47s)
./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.36s)
./cmd/mesh-controller --- PASS: TestReplay867 (3.48s)
./cmd/mesh-controller --- PASS: TestReplay867Recheck (3.37s)
./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.36s)
./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.21s)
./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.27s)
./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.23s)
./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.36s)
./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.28s)
./cmd/mesh-controller --- PASS: TestEveryMoveAMergeAndTheCutMakeOfAPlanIsSaid (0.20s)
./cmd/mesh-controller --- PASS: TestARolloutAdvancesOnEventsAndAReplacedControllerResumesIt (3.65s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoByTheDeliverVerbIsAskedWithNoOtherEvent (0.84s)
./cmd/mesh-controller --- PASS: TestTwoMergesWithinAMinuteLeaveEachOpenPullRequestOneQueuedCheck (1.46s)
./cmd/mesh-controller --- PASS: TestADeliveryGroupMovingAModuleMachinesRunPassesTheGate (4.94s)
./cmd/mesh-controller --- PASS: TestAModuleMovesOnTheOperatorsApproveOfTheMergeThatMovedIt (1.21s)
./cmd/mesh-controller --- PASS: TestAModuleBuiltFromANewRepositoryIsRegisteredOnlyOnTheOperatorsApproveOnTheBus (0.67s)
./cmd/mesh-controller --- PASS: TestAMergeWhosePlanCannotBeSavedIsHeldAndRecordedWhenHandedOverAgain (0.16s)
./cmd/mesh-controller --- PASS: TestOneReadOfAnAssignmentNamesItsCommitBuildAndRolloutAndOneReadOfTheRolloutListsItsAssignments (0.30s)
./cmd/mesh-controller --- PASS: TestASendOfWhatAMachineRunsAlreadyChangesNoLinkOfItsAssignment (0.32s)
./cmd/mesh-controller --- PASS: TestAnAssignmentWaitingForItsBuildIsOneKeyOfTheAssignmentsBucket (0.54s)
./cmd/mesh-controller --- PASS: TestNoTableOfTheControllersStoreHoldsBuildsRolloutsOrAssignments (0.47s)
./cmd/mesh-controller --- PASS: TestAComposedDeclarationCarriesModulesAndBuildsOnlyForANodeThatReadsThem (0.23s)
./cmd/mesh-controller --- PASS: TestAPlanPassesATierWhoseMachineNeverReportsAfterTheBoundAndSendsTheNextToTheOthers (3.62s)
./cmd/mesh-controller --- PASS: TestAMergeOnTheApproveIntoANewRepositoryAsksTheFirstBuildAndItsOutcomeRegistersTheModule (2.90s)
./cmd/mesh-controller --- PASS: TestTheApprovedFirstBuildPassesTheGuardOfAVerbAndIsQueued (0.51s)
./cmd/mesh-controller --- PASS: TestAPlanGoesOnWithoutAMachineAwayWhenItsTierIsSent (0.72s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.12s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.19s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.14s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.15s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.18s)
./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.10s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.10s)
./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.13s)
./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.44s)
./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.14s)
./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.47s)
./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.19s)
./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.19s)
./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.22s)
./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.12s)
./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.18s)
./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.09s)
./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.09s)
./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.09s)
./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.08s)
./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.13s)
./internal/inventory --- PASS: TestBuildsOnTheBusAreReadBackByEveryReader (0.07s)
./internal/inventory --- PASS: TestARequestIsTheBuildInStateAskedAndItsOutcomeTakesItsPlace (0.07s)
./internal/inventory --- PASS: TestAnAssignmentIsAKeyOfTheBucketAndAnUnassignmentEndsIt (0.10s)
./internal/inventory --- PASS: TestThePlansAreKeptInTheAssignmentsValuesAndNothingElseOfThemMoves (0.09s)
./internal/inventory --- PASS: TestAPendingAssignmentIsAKeyOfTheAssignmentsBucket (0.07s)
./internal/inventory --- PASS: TestARecordedPendingIsSkippedByAssignedAndTheJoins (0.07s)
./internal/inventory --- PASS: TestTwoClaimsOfOnePendingMakeOneAndTheOtherSeesFalse (0.08s)
./internal/inventory --- PASS: TestAssignOverAPendingKeepsItsRecordAsApplied (0.07s)
./internal/inventory --- PASS: TestAPendingIsMarkedOnceAndGoesWithItsMachine (0.09s)
./internal/inventory --- PASS: TestAReplacedWaitNeverLeavesTheOperatorWithoutItsCondition (0.08s)
./internal/inventory --- PASS: TestSentBuildsAnswersFromTheAssignmentsKeysOfTheNode (0.08s)
./internal/inventory --- PASS: TestASendReplacesTheWholeMapOfTheNodeAndAHandSendMakesItUnknown (0.08s)
./internal/inventory --- PASS: TestAFailedWriteOfTheLinksFailsTheRecordOfTheSend (0.07s)
./internal/inventory --- PASS: TestMigration0105RefusesAStoreWhoseRowsWereNotMovedAndDropsTheTablesOfAMovedOne (0.42s)
./internal/inventory --- PASS: TestMigration0105PassesAStoreThatNeverHeldARow (0.10s)
./internal/inventory --- PASS: TestTheColumnOfASentMachineIsCopiedOntoItsKeysAndEmptied (0.06s)
./internal/inventory --- PASS: TestASendEmptiesTheColumnSoALaterCopyLeavesAClearedKeyBare (0.06s)
./internal/inventory --- PASS: TestWhetherAMachineReadsModulesIsItsLatestWord (0.18s)
./internal/inventory --- PASS: TestARefusedRegistrationIsKeptByItsBuild (0.10s)
./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (1.91s)
./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.44s)
```
**Out of date when it landed**: out of date: judged against trunk 44033f4b6d72, the trunk is now 98155e327b6d; judged again on a recheck or when it is merged
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 "held and failed moves reach the operator; no image the store lacks is sent", one delivery group with mesh-host on
fix/1732-held-moves-asked.Issue 1732 (met three times today) and 1320: a machine holding a recorded module's recreating move for a person (ADR 0377) raises
machine.<node>.moves-held, asked of the operator with one answer, Release, which calls the controller's ownpushfor that node withmove= exactly the held modules (ADR 0217, ADR 0259 §6). A machine that also holds a person's own hold (a module set to record with a why, or the bus) is raised without Release: the condition names that hold and leaves the push to the controller's terminal. A hold a person chose alone is never asked.plansadds "— N held for a person: …" to a plan that carried a move a machine still holds. The existingrelease-heldcondition gains Release (upgrade release-backlog), and a plan waiting behind a failed release reads "held … until a person releases it", not "building … LATE". The controller's broker grants allow it to act on a warrant for push and upgrade.Issue 1742, controller half: at send time a module whose image is at the store's address and not held by the store is left out with a reason (LeftOut, ADR 0163 rule 6), and
module.<m>.<node>.image-missingis raised until the store holds it; a store that does not answer holds nothing back. The builder'sPublishImagerecords the digest of the exact name it pushed, not the daemon's first RepoDigest (the likely cause of the recorded c62150b8 the store never held).Tests: 1732/AC1-AC7, AC10 (unit, held_moves_test.go), AC8-AC9 (integration, held_moves_integration_test.go); 1742/AC1-AC3 (unit, image_missing_test.go), AC4 (integration), AC5 (internal/builder/registry_test.go). Try build-1792606639917361007 passed (unit 1524 tests 2.92 s of 5 s; integration passed). Follow-ups opened by the review: 1764, 1765. Context: fix-1732@shanks.
Reviewed-by: reviewer-1732@shanks at
d6db334840Delivery
novox/mesh-controller@d6db334840a5— delivered since 2026-10-21T19:28:46ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Group
fix/1732-held-moves-asked: novox/mesh-controller@d6db334840, novox/mesh-host@09c77d57b8Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
d6db3348Judged: head
d6db334840a5merged into trunk44033f4b6d72; read beside it: mesh-catalogdb5e6c5b48f4, mesh-controller-main44033f4b6d72, mesh-hostc231d1031fc7, mesh-toolse0fadc43d9ddmesh/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 ace as
build-1792607213440552208(builds --log build-1792607213440552208).Out of date when it landed: out of date: judged against trunk
44033f4b6d, the trunk is now 98155e327b6d; judged again on a recheck or when it is merged