Builds, rollouts and assignments live on the bus, each assignment naming its commit, build and rollout (design 47 milestone 5, issues 1089-1095) #379

Merged
mesh-tools merged 12 commits from feat/chain-on-the-bus-controller into main 2026-10-18 10:40:33 +00:00
Member

Design 47 milestone 5, delivery 1 of 2 (issue 981; ADR 0408): builds, rollouts and assignments become keys of the buckets mesh-controller_builds, _rollouts and _assignments on the bus. They are written by the lease holder by compare-and-set, keep 64 revisions, and no key is ever removed.

This is mesh-controller#378 at the same reviewed head, on a branch of its own. #378's group feat/chain-on-the-bus was stopped when its catalogue member's plan was stopped from Telegram. The readers it needs (mesh-catalog#357) were merged and then delivered by rebuilds to novox and ace on 2026-10-18 at 11:31-11:37. shanks and g14 receive no send until their "forge-account" composition fault is fixed. mesh-sdk#32 was closed and moves to milestone 6. This pull request takes over the delivery record #378 left stopped (issue 1114, fixed by mesh-catalog#360).

  • 1089: package internal/chain, the three buckets, and migration 0104 (chain_moved; it also drops seat_holding's foreign key to assignment).
  • 1090, 1091: builds on the bus; a build request is the build in state asked.
  • 1092: rollouts and the merges they hold on the bus; a merged event is acknowledged only after its write (ADR 0407 §3).
  • 1093: assignments on the bus; an unassign writes ended (ADR 0408 §4); the store's mirror stops once the assignments have moved; route-proxy reads through mesh-sdk f185aed.
  • 1095: each assignment names its build, artifact or package, commit and rollout, and each rollout lists the assignments it changed (acceptance 10).
  • The move at start: per kind, counted, re-read and settled under a share lock, refused loudly (condition chain-move-refused) on a count that differs or a value over 1 MiB. It retries every 30 s until the new bus grants arrive.
  • Delivery 2 (issues 1094, 1096, 1108-1111) drops the tables, once the move is read back live.

Reviewed-by: reviewer-chain@shanks at 0149a3d7de

Design 47 milestone 5, delivery 1 of 2 (issue 981; ADR 0408): builds, rollouts and assignments become keys of the buckets mesh-controller_builds, _rollouts and _assignments on the bus. They are written by the lease holder by compare-and-set, keep 64 revisions, and no key is ever removed. This is mesh-controller#378 at the same reviewed head, on a branch of its own. #378's group feat/chain-on-the-bus was stopped when its catalogue member's plan was stopped from Telegram. The readers it needs (mesh-catalog#357) were merged and then delivered by rebuilds to novox and ace on 2026-10-18 at 11:31-11:37. shanks and g14 receive no send until their "forge-account" composition fault is fixed. mesh-sdk#32 was closed and moves to milestone 6. This pull request takes over the delivery record #378 left stopped (issue 1114, fixed by mesh-catalog#360). - 1089: package internal/chain, the three buckets, and migration 0104 (`chain_moved`; it also drops seat_holding's foreign key to assignment). - 1090, 1091: builds on the bus; a build request is the build in state `asked`. - 1092: rollouts and the merges they hold on the bus; a merged event is acknowledged only after its write (ADR 0407 §3). - 1093: assignments on the bus; an unassign writes `ended` (ADR 0408 §4); the store's mirror stops once the assignments have moved; route-proxy reads through mesh-sdk f185aed. - 1095: each assignment names its build, artifact or package, commit and rollout, and each rollout lists the assignments it changed (acceptance 10). - The move at start: per kind, counted, re-read and settled under a share lock, refused loudly (condition chain-move-refused) on a count that differs or a value over 1 MiB. It retries every 30 s until the new bus grants arrive. - Delivery 2 (issues 1094, 1096, 1108-1111) drops the tables, once the move is read back live. Reviewed-by: reviewer-chain@shanks at 0149a3d7de202a983e50630e3eaf3b3f0bb075a7
mesh-tools added 12 commits 2026-10-18 09:43:40 +00:00
internal/chain holds typed Build, Rollout and Assignment and a Backend with no delete or purge, in memory and on the bus. The builds and rollouts buckets are asserted with history 64, no age and values up to just under a mebibyte; the assignments bucket gets the same, keeping its marker age because a stream cannot be made to disallow message ages. Migration 0104 makes the one-row chain_moved switch. The controller keeps no consolidated schema, so 0104 is the whole schema change. Nothing reads the buckets yet.
Once chain_moved records the kind, RecordBuild and every build read go through the chain (reuse key and published added); before that the tables are read as before. The serving controller copies the rows at its start, holding the lease: idempotent per key, rows counted against keys, the largest value measured, a refusal (urgent condition, nothing switched) on a count that differs or a value over the bus's largest, and a re-read when the table took a row meanwhile. ForTest attaches the chain in memory with builds moved; ForTestBefore leaves it unmoved. Build requests, gates and the other kinds are still in their tables.
A request is the build's record under the id its outcome will carry, in state asked; the outcome takes its place and keeps the request beside it, so assign, the pending assignments and the planner read the builds bucket alone. The bucket removes no key, so a request past thirty days is not listed instead of deleted. The move folds build_request into the same records (one kind, builds, counted against both tables) and marks the requests never handed over to be asked again once: claimed before it is asked and settled after, so a crash loses the ask rather than making it twice. Also tests the chain buckets' options on a real bus, the assignments' mirror options included.
Once chain_moved records the kind, a plan is a key of the rollouts bucket under its id and the open batch is the same key in state assembling. A save refuses a copy another save moved since (the plan's own Revision, kept in its value, counts saves) and keeps the merges the record holds, so a copy read before a merge moved cannot lay it back. The merges a batch or walk answers are the record's held field, with the columns the table had; a merge no plan answers stays, flagged, in the record that held it last, or in the record kept for those. A merge moved to a plan is written to the receiving record first and then taken from the giving one; one found in both is read from the one it entered last and repaired at the next cut. Plans and merges are read from a view kept by one watch of the bucket. A bus that does not answer, a lease lost and a key moved are now not-now like the store being away, so a merge whose plan could not be written is held and handed over again, never acknowledged. The start moves release_plan and batched_merge into the bucket, one kind, counted against both tables.
Once chain_moved records the kind, Assign, Unassign and Assigned write and read the keys <node>.<module>, and every join of the store that read assignments is made from the bucket: where a module runs, what is behind, what a machine awaits, a given value due for replacement, taking a module, and whether a module may be forgotten (refused while a standing assignment names it). An unassignment ends the key with a marker and keeps its earlier values, as it removed the row; no ended or pending mark is written yet. The generation rises with each change, and a seat held by an assignment goes with it: the foreign key from seat_holding is dropped by migration 0104 and the controller says both. The provisioner's plan is kept in the values by a pass of the tick that writes that one field by compare-and-set; the assignment-changed event is said from what the bucket holds, whoever wrote it. The start moves the rows with what each machine was last sent, keeping a plan the mirror put in a value.
ADR 0408 section 4 says no key of the chain is removed, a delete marker included. The Backend loses Remove and the Chain RemoveAssignment. An unassignment, and the end of a value only pulled in by another, write the value again with ended set, by compare-and-set; assigning it again writes a fresh standing value over it. A value with ended or a state is no assignment (Assignment.Stands) to the assignment lists, the joins, forgetting a module, seat holdings, the given values, the move and the assignment-changed event.
A send that records what a machine was sent writes, in the assignment of each module it carried a build of, the build, what it published, the commit, the rollout that sent it and since when: filled where the assignment names nothing, replaced when the commit moved, never blanked by a push by hand. A plan's sends are made as the plan, so they name it, and the plan lists the assignments each send changed with the build and commit before and after, the builds it carried and the steps taken. The builds, plans and node verbs say the links. node.sent_builds is written and read as before; SentBuilds from the assignments follows with the delivery that drops the column. Acceptance 10 is a test that enters by a merge heard and cut into a plan and writes no key by hand.
The first try of the move to the bus is made before the controller serves, and a failure of the kind that is tried again no longer holds the start: it is tried every half minute while the controller serves from the tables. Moving the assignments looked up the build of each commit by scanning the bucket of builds for each of them; it reads the builds once.
1090/1092: the move tests pick each report by kind and expect three, all already, on the second run. 1090-1093: under the share lock the switch reads the rows again and writes every key whose value differs from its row (and ends an assignment the store dropped) before recording the kind, so an update the old controller made after the first pass is not lost. 1093: route-proxy is pinned at mesh-sdk f185aedb and vendored; the controller uses only the SDK's asks package. KeepAssignmentPlans decides each key by keepStep, which never makes or revives an assignment. AssignmentsMirrorToWrite refuses once the assignments are moved.
The store's mirror of the assignments may not write while they are switching or moved, asked before every write (issue 1093)
mesh/merge-gate waits for its group's composed check
mesh/repo-check head b56c1d00a3ff merged into trunk 54070f5bc32b beside mesh-catalog#357@68e3326d — fail: its merge-check.sh failed: --- FAIL: TestOneReadO…
mesh/delivery-group group feat/chain-on-the-bus rejected: a member's own check failed
mesh/delivery superseded: a newer head of the same pull request
b56c1d00a3
Review round 2. The writer's leave to write is the lease's and AssignmentsMirrorMayWrite, a flag set before the settle of the assignments' switch, kept after the commit and cleared only if the switch fails, so a pass that read its source before the switch lays and purges nothing after it.
Fix the six tests the merge gate refused: assignments beside pulled-in modules, migration tests on the tables, the event compared as JSON, the restarted move settled to the table (issues 1090, 1092, 1093, 1095)
mesh/delivery-group group feat/chain-on-the-bus stopped: a member was stopped
mesh/merge-gate head 0149a3d7de20 merged into trunk 54070f5bc32b — pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus…
mesh/repo-check head 0149a3d7de20 merged into trunk 54070f5bc32b — pass: its merge-check.sh passed
mesh/delivery delivered
0149a3d7de
Author
Member

Merge check at 0149a3d7
Judged: head 0149a3d7de20 merged into trunk 54070f5bc32b; read beside it: mesh-catalog e40ec47058e6, mesh-controller-main 54070f5bc32b, 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/chain_integration_test.go, cmd/mesh-controller/chain_links_test.go, cmd/mesh-controller/merge_unsaved_integration_test.go, cmd/mesh-controller/merge_unsaved_test.go, cmd/mesh-controller/record_mirrors_switch_test.go, internal/broker/controller_buckets_integration_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/broker/writers_test.go, internal/chain/backend.go, internal/chain/bus.go, internal/chain/chain.go, internal/chain/chain_test.go, internal/chain/records.go, internal/inventory/builds_test.go, internal/inventory/catalogue_test.go, internal/inventory/chain_assignments_key_test.go, internal/inventory/chain_builds_test.go, internal/inventory/chain_move_test.go, internal/inventory/chain_moved_test.go, internal/inventory/chain_requests_test.go, internal/inventory/chain_rollouts_test.go, internal/inventory/given_test.go, internal/inventory/mirrored_test.go, internal/inventory/pin_completed_test.go, internal/inventory/plan_id_test.go, internal/inventory/sends_test.go, internal/link/source_moved_held_test.go, internal/recordmirror/readers_test.go, testdata/store-tests

Run by the build seat on shanks as build-1792316622626365259 (builds --log build-1792316622626365259).

ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.028s
    emptyonerror_test.go:26: 11 error branch(es) answer empty, each saying why
PASS
ok  	github.com/novox/mesh-controller/internal/lint	3.311s
PASS
ok  	github.com/novox/mesh-controller/internal/outward	1.073s
PASS
ok  	github.com/novox/mesh-controller/internal/overlay	1.070s
PASS
ok  	github.com/novox/mesh-controller/internal/recordmirror	18.425s
PASS
ok  	github.com/novox/mesh-controller/internal/secrets	1.560s
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.640s
    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.270s
PASS
ok  	github.com/novox/mesh-controller/internal/token	1.034s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	118s	(shard 1 of 8: 140 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	110s	(shard 2 of 8: 140 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	88s	(shard 3 of 8: 140 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	61s	(shard 4 of 8: 140 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	53s	(shard 5 of 8: 140 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	185s	(shard 6 of 8: 139 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	97s	(shard 7 of 8: 139 tests)
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	128s	(shard 8 of 8: 139 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	24s	(shard 1 of 4: 86 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	24s	(shard 2 of 4: 85 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	23s	(shard 3 of 4: 85 tests)
ok  	github.com/novox/mesh-controller/internal/inventory	23s	(shard 4 of 4: 85 tests)
ok  	github.com/novox/mesh-controller/internal/builder	23s	(shard 1 of 4: 54 tests)
ok  	github.com/novox/mesh-controller/internal/builder	26s	(shard 2 of 4: 53 tests)
ok  	github.com/novox/mesh-controller/internal/builder	36s	(shard 3 of 4: 53 tests)
ok  	github.com/novox/mesh-controller/internal/builder	23s	(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	18s	(shard 2 of 4: 50 tests)
ok  	github.com/novox/mesh-controller/internal/link	19s	(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): 3384 tests (6 skipped outside the shards), 189 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.26s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.31s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.28s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.60s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.25s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.21s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.03s)
  ./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.85s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.35s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.31s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.22s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.23s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.28s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.22s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.25s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.26s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.37s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.52s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.33s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.44s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.45s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.22s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.20s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.20s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.38s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.30s)
  ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s)
  ./cmd/mesh-controller --- PASS: TestReplay340 (0.31s)
  ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
  ./cmd/mesh-controller --- PASS: TestReplay349 (0.26s)
  ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.25s)
  ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.20s)
  ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.18s)
  ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.09s)
  ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.71s)
  ./cmd/mesh-controller --- PASS: TestReplay164 (0.35s)
  ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.20s)
  ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.21s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.20s)
  ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.58s)
  ./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.27s)
  ./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (5.86s)
  ./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.23s)
  ./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.42s)
  ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.24s)
  ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.24s)
  ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.21s)
  ./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.23s)
  ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s)
  ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.31s)
  ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.21s)
  ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.20s)
  ./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.26s)
  ./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.27s)
  ./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.30s)
  ./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.29s)
  ./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.34s)
  ./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.31s)
  ./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.30s)
  ./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.34s)
  ./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.26s)
  ./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (2.56s)
  ./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (4.30s)
  ./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s)
  ./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.19s)
  ./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (40.72s)
  ./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (10.32s)
  ./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (13.52s)
  ./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.42s)
  ./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.40s)
  ./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.30s)
  ./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.31s)
  ./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.34s)
  ./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.28s)
  ./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.27s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.34s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.72s)
  ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.81s)
  ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.54s)
  ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.38s)
  ./cmd/mesh-controller --- PASS: TestReplay867 (4.09s)
  ./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.07s)
  ./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.36s)
  ./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s)
  ./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.33s)
  ./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.23s)
  ./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.22s)
  ./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.36s)
  ./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.35s)
  ./cmd/mesh-controller --- PASS: TestEveryMoveAMergeAndTheCutMakeOfAPlanIsSaid (0.25s)
  ./cmd/mesh-controller --- PASS: TestARolloutAdvancesOnEventsAndAReplacedControllerResumesIt (3.67s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoByTheDeliverVerbIsAskedWithNoOtherEvent (0.86s)
  ./cmd/mesh-controller --- PASS: TestTwoMergesWithinAMinuteLeaveEachOpenPullRequestOneQueuedCheck (0.84s)
  ./cmd/mesh-controller --- PASS: TestADeliveryGroupMovingAModuleMachinesRunPassesTheGate (6.98s)
  ./cmd/mesh-controller --- PASS: TestAModuleMovesOnTheOperatorsApproveOfTheMergeThatMovedIt (1.06s)
  ./cmd/mesh-controller --- PASS: TestAModuleBuiltFromANewRepositoryIsRegisteredOnlyOnTheOperatorsApproveOnTheBus (0.76s)
  ./cmd/mesh-controller --- PASS: TestAMergeWhosePlanCannotBeSavedIsHeldAndRecordedWhenHandedOverAgain (0.21s)
  ./cmd/mesh-controller --- PASS: TestOneReadOfAnAssignmentNamesItsCommitBuildAndRolloutAndOneReadOfTheRolloutListsItsAssignments (0.23s)
  ./cmd/mesh-controller --- PASS: TestASendOfWhatAMachineRunsAlreadyChangesNoLinkOfItsAssignment (0.18s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.11s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.11s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.14s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.16s)
  ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.15s)
  ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
  ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.10s)
  ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
  ./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.14s)
  ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.11s)
  ./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.14s)
  ./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.40s)
  ./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.14s)
  ./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.49s)
  ./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.14s)
  ./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.17s)
  ./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.21s)
  ./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.13s)
  ./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.12s)
  ./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.10s)
  ./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.10s)
  ./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.10s)
  ./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s)
  ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.13s)
  ./internal/inventory --- PASS: TestTheMoveCopiesTheBuildRowsAndAgainWritesNothing (0.12s)
  ./internal/inventory --- PASS: TestAControllerRestartedMidMoveFinishesItAndOverwritesNothing (0.11s)
  ./internal/inventory --- PASS: TestTheMoveRefusesAValueOverTheLargestMessage (0.13s)
  ./internal/inventory --- PASS: TestTheMoveRefusesOnACountThatDiffers (0.08s)
  ./internal/inventory --- PASS: TestTheMoveWithoutTheLeaseWritesNothing (0.09s)
  ./internal/inventory --- PASS: TestBuildsOnTheBusAreReadBackByEveryReader (0.08s)
  ./internal/inventory --- PASS: TestARequestIsTheBuildInStateAskedAndItsOutcomeTakesItsPlace (0.08s)
  ./internal/inventory --- PASS: TestTheMoveCarriesTheBuildRequestsAndMarksTheNeverAskedToAskAgain (0.22s)
  ./internal/inventory --- PASS: TestTheMoveCarriesThePlansAndTheirMergesAndTheyReadTheSame (0.12s)
  ./internal/inventory --- PASS: TestAnAssignmentIsAKeyOfTheBucketAndAnUnassignmentEndsIt (0.13s)
  ./internal/inventory --- PASS: TestThePlansAreKeptInTheAssignmentsValuesAndNothingElseOfThemMoves (0.10s)
  ./internal/inventory --- PASS: TestTheMoveCarriesTheAssignmentsAndWhatEachMachineWasSent (0.11s)
  ./internal/inventory --- PASS: TestARowChangedAfterTheFirstPassIsInTheBucketWhenTheKindIsRecordedMoved (0.11s)
  ./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.37s)
  ./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.51s)
**Merge check** at `0149a3d7` Judged: head `0149a3d7de20` merged into trunk `54070f5bc32b`; read beside it: mesh-catalog `e40ec47058e6`, mesh-controller-main `54070f5bc32b`, 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/chain_integration_test.go, cmd/mesh-controller/chain_links_test.go, cmd/mesh-controller/merge_unsaved_integration_test.go, cmd/mesh-controller/merge_unsaved_test.go, cmd/mesh-controller/record_mirrors_switch_test.go, internal/broker/controller_buckets_integration_test.go, internal/broker/controller_buckets_test.go, internal/broker/testdata/composed.conf, internal/broker/writers_test.go, internal/chain/backend.go, internal/chain/bus.go, internal/chain/chain.go, internal/chain/chain_test.go, internal/chain/records.go, internal/inventory/builds_test.go, internal/inventory/catalogue_test.go, internal/inventory/chain_assignments_key_test.go, internal/inventory/chain_builds_test.go, internal/inventory/chain_move_test.go, internal/inventory/chain_moved_test.go, internal/inventory/chain_requests_test.go, internal/inventory/chain_rollouts_test.go, internal/inventory/given_test.go, internal/inventory/mirrored_test.go, internal/inventory/pin_completed_test.go, internal/inventory/plan_id_test.go, internal/inventory/sends_test.go, internal/link/source_moved_held_test.go, internal/recordmirror/readers_test.go, testdata/store-tests Run by the build seat on shanks as `build-1792316622626365259` (`builds --log build-1792316622626365259`). ``` ok github.com/novox/mesh-controller/internal/licences/adapters 1.028s emptyonerror_test.go:26: 11 error branch(es) answer empty, each saying why PASS ok github.com/novox/mesh-controller/internal/lint 3.311s PASS ok github.com/novox/mesh-controller/internal/outward 1.073s PASS ok github.com/novox/mesh-controller/internal/overlay 1.070s PASS ok github.com/novox/mesh-controller/internal/recordmirror 18.425s PASS ok github.com/novox/mesh-controller/internal/secrets 1.560s 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.640s 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.270s PASS ok github.com/novox/mesh-controller/internal/token 1.034s ok github.com/novox/mesh-controller/cmd/mesh-controller 118s (shard 1 of 8: 140 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 110s (shard 2 of 8: 140 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 88s (shard 3 of 8: 140 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 61s (shard 4 of 8: 140 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 53s (shard 5 of 8: 140 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 185s (shard 6 of 8: 139 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 97s (shard 7 of 8: 139 tests) ok github.com/novox/mesh-controller/cmd/mesh-controller 128s (shard 8 of 8: 139 tests) ok github.com/novox/mesh-controller/internal/inventory 24s (shard 1 of 4: 86 tests) ok github.com/novox/mesh-controller/internal/inventory 24s (shard 2 of 4: 85 tests) ok github.com/novox/mesh-controller/internal/inventory 23s (shard 3 of 4: 85 tests) ok github.com/novox/mesh-controller/internal/inventory 23s (shard 4 of 4: 85 tests) ok github.com/novox/mesh-controller/internal/builder 23s (shard 1 of 4: 54 tests) ok github.com/novox/mesh-controller/internal/builder 26s (shard 2 of 4: 53 tests) ok github.com/novox/mesh-controller/internal/builder 36s (shard 3 of 4: 53 tests) ok github.com/novox/mesh-controller/internal/builder 23s (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 18s (shard 2 of 4: 50 tests) ok github.com/novox/mesh-controller/internal/link 19s (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): 3384 tests (6 skipped outside the shards), 189 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.26s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.31s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.28s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.60s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.25s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.21s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.03s) ./cmd/mesh-controller --- PASS: TestIssue969TheGateRaisesEachMachineAsItsEngineStatedItself (0.85s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.35s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.31s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.22s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.23s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.28s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.22s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.25s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.26s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.37s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.52s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.33s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.44s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.45s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.22s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.20s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.20s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.38s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.30s) ./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s) ./cmd/mesh-controller --- PASS: TestReplay340 (0.31s) ./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s) ./cmd/mesh-controller --- PASS: TestReplay349 (0.26s) ./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.25s) ./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.20s) ./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkWhoseEveryBuildCameOutTheSameIsDone (0.18s) ./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.09s) ./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.71s) ./cmd/mesh-controller --- PASS: TestReplay164 (0.35s) ./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.20s) ./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.21s) ./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.20s) ./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.58s) ./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.27s) ./cmd/mesh-controller --- PASS: TestTheMergeGateJudgesEachManifestAgainstTheListOfTheTree (5.86s) ./cmd/mesh-controller --- PASS: TestRegistrationPublishesTheNewestTrunkListAndJudgesEveryModuleAgainstIt (0.23s) ./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterPlacementMoves (0.42s) ./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.24s) ./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.24s) ./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.21s) ./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.23s) ./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s) ./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.31s) ./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.21s) ./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.20s) ./cmd/mesh-controller --- PASS: TestTheProvisionerClientsAccountIsIssuedForItsServiceAndNeverInvented (0.26s) ./cmd/mesh-controller --- PASS: TestAcceptOfAnOwnSecretTakesThePathOfItsModulesForm (0.27s) ./cmd/mesh-controller --- PASS: TestAcceptForAProviderTakesThePathOfTheProvidersModule (0.30s) ./cmd/mesh-controller --- PASS: TestAcceptForAMovedTrustedModuleAnnouncesBeforeTheVaultIsAsked (0.29s) ./cmd/mesh-controller --- PASS: TestAcceptForAMovedModuleRecordsAHandActAndNeverTheValue (0.34s) ./cmd/mesh-controller --- PASS: TestAcceptOfAnOutsideOfferTakesThePathOfTheProvidersModule (0.31s) ./cmd/mesh-controller --- PASS: TestAnAskAtTheDeskTakesThePathOfItsModulesForm (0.30s) ./cmd/mesh-controller --- PASS: TestAnIssuedValueTakesThePathOfItsProvidersModule (0.34s) ./cmd/mesh-controller --- PASS: TestARotationTakesThePathOfItsModulesForm (0.26s) ./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameWhileTheWordsAreStillInTheLayers (2.56s) ./cmd/mesh-controller --- PASS: TestADeclarationIsTheSameAfterTheMoveOfPlacement (4.30s) ./cmd/mesh-controller --- PASS: TestTheSendSealsNoSecretOfAModuleHandedThere (0.30s) ./cmd/mesh-controller --- PASS: TestAModulesSecretsAreTheVaultsOnceItIsMarkedMoved (0.19s) ./cmd/mesh-controller --- PASS: TestEveryMachineIsToldTheSameAfterTheMoveOfConfig (40.72s) ./cmd/mesh-controller --- PASS: TestTheMoveOfConfigRefusesWhatWouldChangeAMachine (10.32s) ./cmd/mesh-controller --- PASS: TestTheSettingsVerbForwardsToConfigOnceTheValuesMoved (13.52s) ./cmd/mesh-controller --- PASS: TestTheSendCarriesTheVaultsBoxForACoreCredentialAndKeepsIt (0.42s) ./cmd/mesh-controller --- PASS: TestASilentVaultHoldsTheKeptBoxAndSaysSo (0.40s) ./cmd/mesh-controller --- PASS: TestACoreModuleFirstPlacedWhileTheVaultIsSilentIsSealedByTheController (0.30s) ./cmd/mesh-controller --- PASS: TestAnEngineBelowTheContractIsSentTheControllersSealAsBefore (0.31s) ./cmd/mesh-controller --- PASS: TestModuleIssueHandsACoveredAccountToTheVaultAndOnlyThat (0.34s) ./cmd/mesh-controller --- PASS: TestModuleIssueFailsWhenTheVaultDoesNotTakeACoveredAccount (0.28s) ./cmd/mesh-controller --- PASS: TestModuleIssueBeforeTheVaultIsInstalledKeepsTheValueAndHandsNothing (0.27s) ./cmd/mesh-controller --- PASS: TestARecordedModulesBundleOnlyMoveRollsOutInItsWalk (0.34s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatRecreatesAContainerWaits (0.72s) ./cmd/mesh-controller --- PASS: TestARecordedModulesMoveThatTouchesDataOrAProviderWaits (0.81s) ./cmd/mesh-controller --- PASS: TestAPersonsRecordAndTheBusHoldEveryMove (0.54s) ./cmd/mesh-controller --- PASS: TestARecordedMoveThatCannotBeJudgedWaits (0.38s) ./cmd/mesh-controller --- PASS: TestReplay867 (4.09s) ./cmd/mesh-controller --- PASS: TestReplay867Recheck (4.07s) ./cmd/mesh-controller --- PASS: TestTheRecheckVerbAsksMeshDeliveryOnABusOfItsOwn (0.36s) ./cmd/mesh-controller --- PASS: TestAssigningTheClientIssuesItsAccount (0.24s) ./cmd/mesh-controller --- PASS: TestAnUnrelatedBatchWalksBesideAnOpenWalk (0.33s) ./cmd/mesh-controller --- PASS: TestARelatedBatchWaitsBehindTheOpenWalk (0.23s) ./cmd/mesh-controller --- PASS: TestAnOwnPathBatchNeverWalksBeside (0.22s) ./cmd/mesh-controller --- PASS: TestMergesHeardWhileAnotherHolderHasThePlansAreRecordedAndCarried (7.36s) ./cmd/mesh-controller --- PASS: TestABatchWindowClosesByTheExpiryOfItsKey (1.35s) ./cmd/mesh-controller --- PASS: TestEveryMoveAMergeAndTheCutMakeOfAPlanIsSaid (0.25s) ./cmd/mesh-controller --- PASS: TestARolloutAdvancesOnEventsAndAReplacedControllerResumesIt (3.67s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoByTheDeliverVerbIsAskedWithNoOtherEvent (0.86s) ./cmd/mesh-controller --- PASS: TestTwoMergesWithinAMinuteLeaveEachOpenPullRequestOneQueuedCheck (0.84s) ./cmd/mesh-controller --- PASS: TestADeliveryGroupMovingAModuleMachinesRunPassesTheGate (6.98s) ./cmd/mesh-controller --- PASS: TestAModuleMovesOnTheOperatorsApproveOfTheMergeThatMovedIt (1.06s) ./cmd/mesh-controller --- PASS: TestAModuleBuiltFromANewRepositoryIsRegisteredOnlyOnTheOperatorsApproveOnTheBus (0.76s) ./cmd/mesh-controller --- PASS: TestAMergeWhosePlanCannotBeSavedIsHeldAndRecordedWhenHandedOverAgain (0.21s) ./cmd/mesh-controller --- PASS: TestOneReadOfAnAssignmentNamesItsCommitBuildAndRolloutAndOneReadOfTheRolloutListsItsAssignments (0.23s) ./cmd/mesh-controller --- PASS: TestASendOfWhatAMachineRunsAlreadyChangesNoLinkOfItsAssignment (0.18s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.11s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.11s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.14s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.11s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.16s) ./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.15s) ./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s) ./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.10s) ./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s) ./internal/inventory --- PASS: TestAModuleInTheConfigFormIsMirroredWithItsWholeDeclaration (0.14s) ./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.11s) ./internal/inventory --- PASS: TestANewerBuildsListReplacesTheKeptOneAndAnOlderOneHeardLaterDoesNot (0.14s) ./internal/inventory --- PASS: TestPlacementMovesOutOfTheSettingsLayers (0.40s) ./internal/inventory --- PASS: TestASettingRoutesPlacementBesideTheLayer (0.14s) ./internal/inventory --- PASS: TestTheProvisionerClientsMachineHasAnAccountOfItsOwn (0.49s) ./internal/inventory --- PASS: TestTheFourWordsAreKeptBesideTheLayer (0.14s) ./internal/inventory --- PASS: TestALayerStillHoldingTheWordsReadsThemAsPlacement (0.17s) ./internal/inventory --- PASS: TestTheMoveOfPlacementMovesWhatTheLayersStillHold (0.21s) ./internal/inventory --- PASS: TestTheMoveReadsEveryRowSealedToAMachineAsItIs (0.13s) ./internal/inventory --- PASS: TestASendKeepsThePlansItHandedAndTheMirrorCarriesThem (0.12s) ./internal/inventory --- PASS: TestTheLayersAreReadUntilTheMoveOfConfigHasRun (0.10s) ./internal/inventory --- PASS: TestAModuleReadsMeshConfigOnlyWhereItsValuesAre (0.10s) ./internal/inventory --- PASS: TestTheEndOfTheMoveRefusesALayerChangedSinceItWasRead (0.10s) ./internal/inventory --- PASS: TestACoreCredentialsVaultBoxIsKeptPerMachineAndReplaced (0.10s) ./internal/inventory --- PASS: TestWhatRunsIsTheRegisteredBuildNotANewerOnePutBack (0.13s) ./internal/inventory --- PASS: TestTheMoveCopiesTheBuildRowsAndAgainWritesNothing (0.12s) ./internal/inventory --- PASS: TestAControllerRestartedMidMoveFinishesItAndOverwritesNothing (0.11s) ./internal/inventory --- PASS: TestTheMoveRefusesAValueOverTheLargestMessage (0.13s) ./internal/inventory --- PASS: TestTheMoveRefusesOnACountThatDiffers (0.08s) ./internal/inventory --- PASS: TestTheMoveWithoutTheLeaseWritesNothing (0.09s) ./internal/inventory --- PASS: TestBuildsOnTheBusAreReadBackByEveryReader (0.08s) ./internal/inventory --- PASS: TestARequestIsTheBuildInStateAskedAndItsOutcomeTakesItsPlace (0.08s) ./internal/inventory --- PASS: TestTheMoveCarriesTheBuildRequestsAndMarksTheNeverAskedToAskAgain (0.22s) ./internal/inventory --- PASS: TestTheMoveCarriesThePlansAndTheirMergesAndTheyReadTheSame (0.12s) ./internal/inventory --- PASS: TestAnAssignmentIsAKeyOfTheBucketAndAnUnassignmentEndsIt (0.13s) ./internal/inventory --- PASS: TestThePlansAreKeptInTheAssignmentsValuesAndNothingElseOfThemMoves (0.10s) ./internal/inventory --- PASS: TestTheMoveCarriesTheAssignmentsAndWhatEachMachineWasSent (0.11s) ./internal/inventory --- PASS: TestARowChangedAfterTheFirstPassIsInTheBucketWhenTheKindIsRecordedMoved (0.11s) ./internal/recordmirror --- PASS: TestNatsAnAssignmentAndARegistrationEachChangeOneKeyAndRaiseOneEvent (3.37s) ./internal/recordmirror --- PASS: TestNatsTheListOfPredefinedKeysKeptChangesTheMirrorsOneKey (1.51s) ```
Author
Member

Delivery novox/mesh-controller@0149a3d7de20 — delivered since 2026-10-18T11:32:20Z

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-18 10:01 (new) → proposed (announced): novox/mesh-controller#379's head announced; #378 with the same head closed unmerged
  • 2026-10-18 10:39 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-18 10:39 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-18 10:40 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-18 10:40 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-18 11:32 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@0149a3d7de20` — **delivered** since 2026-10-18T11:32:20Z **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-18 10:01 (new) → proposed (announced): novox/mesh-controller#379's head announced; #378 with the same head closed unmerged - 2026-10-18 10:39 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-18 10:39 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-18 10:40 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-18 10:40 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-18 11:32 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-tools merged commit aa02e7bf4e into main 2026-10-18 10:40:33 +00:00
mesh-tools deleted branch feat/chain-on-the-bus-controller 2026-10-18 10:40:33 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#379