Fixes novox/hq issue 558: a merged change's delivery build waited 3–23 minutes in the build queue behind pull-request checks, because the queue was first come, first served.
The policy (a small design limit, decided under the operator's standing word and noted on issue 558):
a build a walk waits for (a delivery) is handed out before any pull-request check;
a check that has waited 10 minutes or more goes before every delivery asked after it, so no check starves;
within a kind, first come, first served, by ask time;
an ask whose kind cannot be told (unreadable), a dry run, and a recheck the merge tool asks (ADR 0323) count as checks;
nothing a holder already took is touched: a running build is never pre-empted or cancelled.
How. The order is kept in the build seat's work queue itself, so it survives a controller restart. link.PutInOrder reads the waiting asks (stream seq > what the worker handed out), computes QueueOrder, and moves only the asks that must go behind (delete by seq, publish the same body again under the same id) while the worker is paused (PauseConsumer, bounded to 20 s, resumed at the end). It runs after every ask (Ask/Submit) and every 30 s on the acting controller, for checks that come of age with nothing asked. A queue already in order is read and left alone, no pause.
The queue verb's answer says each ask's kind as delivery or check (was build/check), and its text line says it too.
Tests (written first; on main TestNatsADeliveryIsTakenBeforeTheChecksQueuedAheadOfIt failed with taken as [/a /b /d], want [/d /a /b], and TestTheQueueVerbAnswersEachAskAsData failed on the kind):
internal/link/queue_order_test.go: delivery before earlier checks; a 10-minute check before a later delivery; unknown kind is a check; against a real bus, the holder takes D first.
cmd/mesh-controller/queue_answer_test.go: kind in the data and in the table.
gofmt, go vet, go test -race on internal/link, internal/broker, cmd/mesh-controller, cmd/mesh-builder; go test ./... green.
Rollout: mesh-controller only (the serving controller on novox). No grant, stream, consumer, build-agent or catalogue change: the controller already holds $JS.API.>, and the bus (2.11) supports consumer pause.
Fixes novox/hq issue 558: a merged change's delivery build waited 3–23 minutes in the build queue behind pull-request checks, because the queue was first come, first served.
**The policy** (a small design limit, decided under the operator's standing word and noted on issue 558):
- a build a walk waits for (a *delivery*) is handed out before any pull-request check;
- a check that has waited 10 minutes or more goes before every delivery asked after it, so no check starves;
- within a kind, first come, first served, by ask time;
- an ask whose kind cannot be told (unreadable), a dry run, and a recheck the merge tool asks (ADR 0323) count as checks;
- nothing a holder already took is touched: a running build is never pre-empted or cancelled.
**How.** The order is kept in the build seat's work queue itself, so it survives a controller restart. `link.PutInOrder` reads the waiting asks (stream seq > what the worker handed out), computes `QueueOrder`, and moves only the asks that must go behind (delete by seq, publish the same body again under the same id) while the worker is paused (`PauseConsumer`, bounded to 20 s, resumed at the end). It runs after every ask (`Ask`/`Submit`) and every 30 s on the acting controller, for checks that come of age with nothing asked. A queue already in order is read and left alone, no pause.
The `queue` verb's answer says each ask's kind as `delivery` or `check` (was `build`/`check`), and its text line says it too.
**Tests** (written first; on main `TestNatsADeliveryIsTakenBeforeTheChecksQueuedAheadOfIt` failed with `taken as [/a /b /d], want [/d /a /b]`, and `TestTheQueueVerbAnswersEachAskAsData` failed on the kind):
- `internal/link/queue_order_test.go`: delivery before earlier checks; a 10-minute check before a later delivery; unknown kind is a check; against a real bus, the holder takes D first.
- `cmd/mesh-controller/queue_answer_test.go`: kind in the data and in the table.
gofmt, go vet, `go test -race` on internal/link, internal/broker, cmd/mesh-controller, cmd/mesh-builder; `go test ./...` green.
**Rollout:** mesh-controller only (the serving controller on novox). No grant, stream, consumer, build-agent or catalogue change: the controller already holds `$JS.API.>`, and the bus (2.11) supports consumer pause.
A merged change's walk waited minutes on its build behind checks in a
first-come queue. The queue now hands deliveries out first, a check that
has waited ten minutes before deliveries asked after it, and says each
ask's kind; the order is kept in the work queue itself.
Deliverynovox/mesh-controller@fc573f951a47 — proposed since 2026-10-12T20:22:49Z
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
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 build-agent is judged on its first machine
Transitions
2026-10-12 19:47 (new) → proposed (announced): novox/mesh-controller#276's head announced
2026-10-12 20:06 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-12 20:06 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-12 20:22 ready → proposed (trunk moved): out of date: judged against trunk 13711fb5b9, the trunk is now 13be75eb65c0; judged again on a recheck or when it is merged
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@fc573f951a47` — **proposed** since 2026-10-12T20:22:49Z
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- 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 build-agent is judged on its first machine
**Transitions**
- 2026-10-12 19:47 (new) → proposed (announced): novox/mesh-controller#276's head announced
- 2026-10-12 20:06 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-12 20:06 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-12 20:22 ready → proposed (trunk moved): out of date: judged against trunk 13711fb5b91b, the trunk is now 13be75eb65c0; judged again on a recheck or when it is merged
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Review of #276: a move deleted before it published, so a failed publish
lost an ask; a verb's own process ran a pass beside the serving one, so
one could resume the queue while the other moved asks and a build ran
twice. The copy is now published first and second copies removed by id,
asks only signal the acting controller's loop, moves stop with 5 s of
the pause left, a cancel finds a moved ask by id, and an unreadable ask
keeps its age.
Merge check at c6e23445
Judged: head c6e234455f5e merged into trunk 4dbd4066ca54; read beside it: mesh-catalog eb5f33f2b475, mesh-controller-main 4dbd4066ca54, mesh-host 303d4037e84e, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
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 build-agent is judged on its first machine
Run by the build seat on novox as build-1791833180487333808 (builds --log build-1791833180487333808).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:24:51Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T19:24:51Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.059s
ok github.com/novox/mesh-controller/cmd/mesh-controller 330.454s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.032s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/route-proxy 1.136s
ok github.com/novox/mesh-controller/internal/artifacts 1.058s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.950s
ok github.com/novox/mesh-controller/internal/builder 48.362s
ok github.com/novox/mesh-controller/internal/catalogue 9.369s
ok github.com/novox/mesh-controller/internal/conditions 2.726s
ok github.com/novox/mesh-controller/internal/envfile 1.029s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 10.600s
ok github.com/novox/mesh-controller/internal/inventory 122.751s
ok github.com/novox/mesh-controller/internal/lease 17.730s
ok github.com/novox/mesh-controller/internal/licences 9.352s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 70.199s
ok github.com/novox/mesh-controller/internal/lint 2.600s
ok github.com/novox/mesh-controller/internal/outward 1.036s
ok github.com/novox/mesh-controller/internal/overlay 1.034s
ok github.com/novox/mesh-controller/internal/secrets 1.591s
ok github.com/novox/mesh-controller/internal/store 7.341s
ok github.com/novox/mesh-controller/internal/testbus 1.231s
ok github.com/novox/mesh-controller/internal/token 1.014s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.51s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.59s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.72s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.46s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.43s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.47s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.45s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.53s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.38s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.55s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.55s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (1.11s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.66s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.64s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.55s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.52s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.51s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.50s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.50s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.45s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.51s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.57s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.56s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.42s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.40s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.41s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.62s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.41s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.32s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.33s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.32s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.29s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.35s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.31s)
Out of date when it landed: out of date: judged against trunk 4dbd4066ca, the trunk is now c0c379af2b3c; judged again on a recheck or when it is merged
**Merge check** at `c6e23445`
Judged: head `c6e234455f5e` merged into trunk `4dbd4066ca54`; read beside it: mesh-catalog `eb5f33f2b475`, mesh-controller-main `4dbd4066ca54`, mesh-host `303d4037e84e`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- 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 build-agent is judged on its first machine
Run by the build seat on novox as `build-1791833180487333808` (`builds --log build-1791833180487333808`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:24:51Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T19:24:51Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.059s
ok github.com/novox/mesh-controller/cmd/mesh-controller 330.454s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.032s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/route-proxy 1.136s
ok github.com/novox/mesh-controller/internal/artifacts 1.058s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.950s
ok github.com/novox/mesh-controller/internal/builder 48.362s
ok github.com/novox/mesh-controller/internal/catalogue 9.369s
ok github.com/novox/mesh-controller/internal/conditions 2.726s
ok github.com/novox/mesh-controller/internal/envfile 1.029s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 10.600s
ok github.com/novox/mesh-controller/internal/inventory 122.751s
ok github.com/novox/mesh-controller/internal/lease 17.730s
ok github.com/novox/mesh-controller/internal/licences 9.352s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 70.199s
ok github.com/novox/mesh-controller/internal/lint 2.600s
ok github.com/novox/mesh-controller/internal/outward 1.036s
ok github.com/novox/mesh-controller/internal/overlay 1.034s
ok github.com/novox/mesh-controller/internal/secrets 1.591s
ok github.com/novox/mesh-controller/internal/store 7.341s
ok github.com/novox/mesh-controller/internal/testbus 1.231s
ok github.com/novox/mesh-controller/internal/token 1.014s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.51s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.59s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.72s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.46s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.43s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.47s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.45s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.53s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.38s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.55s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.55s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (1.11s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.66s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.64s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.55s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.52s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.51s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.50s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.50s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.45s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.51s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.57s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.56s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.42s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.40s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.41s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.62s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.41s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.32s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.33s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.32s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.29s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.35s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.31s)
```
**Out of date when it landed**: out of date: judged against trunk 4dbd4066ca54, the trunk is now c0c379af2b3c; judged again on a recheck or when it is merged
Merge check at 1ded7dff
Judged: head 1ded7dff34ce merged into trunk 4dbd4066ca54; read beside it: mesh-catalog eb5f33f2b475, mesh-controller-main 4dbd4066ca54, mesh-host 303d4037e84e, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
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 build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/queue_answer_test.go, internal/link/queue_order_test.go
Run by the build seat on ace as build-1791833913421699582 (builds --log build-1791833913421699582).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:33:51Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T19:33:51Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/queue_answer_test.go and internal/link/queue_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 249.852s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.036s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.054s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.036s
ok github.com/novox/mesh-controller/examples/route-proxy 1.218s
ok github.com/novox/mesh-controller/internal/artifacts 1.109s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.240s
ok github.com/novox/mesh-controller/internal/builder 33.096s
ok github.com/novox/mesh-controller/internal/catalogue 8.905s
ok github.com/novox/mesh-controller/internal/conditions 2.716s
ok github.com/novox/mesh-controller/internal/envfile 1.047s
ok github.com/novox/mesh-controller/internal/facts 1.045s
ok github.com/novox/mesh-controller/internal/identity 5.725s
ok github.com/novox/mesh-controller/internal/inventory 86.611s
ok github.com/novox/mesh-controller/internal/lease 17.659s
ok github.com/novox/mesh-controller/internal/licences 5.403s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.067s
ok github.com/novox/mesh-controller/internal/link 68.615s
ok github.com/novox/mesh-controller/internal/lint 2.498s
ok github.com/novox/mesh-controller/internal/outward 1.096s
ok github.com/novox/mesh-controller/internal/overlay 1.105s
ok github.com/novox/mesh-controller/internal/secrets 1.506s
ok github.com/novox/mesh-controller/internal/store 3.525s
ok github.com/novox/mesh-controller/internal/testbus 1.296s
ok github.com/novox/mesh-controller/internal/token 1.020s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.36s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.38s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.38s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.39s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.38s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.34s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.32s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.42s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.38s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.42s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.38s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.41s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.37s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.37s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.37s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.37s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.39s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.45s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.43s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.31s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.33s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.32s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.45s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.22s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.22s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.24s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.26s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.22s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.24s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.23s)
Out of date when it landed: out of date: judged against trunk 4dbd4066ca, the trunk is now c0c379af2b3c; judged again on a recheck or when it is merged
**Merge check** at `1ded7dff`
Judged: head `1ded7dff34ce` merged into trunk `4dbd4066ca54`; read beside it: mesh-catalog `eb5f33f2b475`, mesh-controller-main `4dbd4066ca54`, mesh-host `303d4037e84e`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- 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 build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/queue_answer_test.go, internal/link/queue_order_test.go
Run by the build seat on ace as `build-1791833913421699582` (`builds --log build-1791833913421699582`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:33:51Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T19:33:51Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/queue_answer_test.go and internal/link/queue_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 249.852s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.036s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.054s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.036s
ok github.com/novox/mesh-controller/examples/route-proxy 1.218s
ok github.com/novox/mesh-controller/internal/artifacts 1.109s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.240s
ok github.com/novox/mesh-controller/internal/builder 33.096s
ok github.com/novox/mesh-controller/internal/catalogue 8.905s
ok github.com/novox/mesh-controller/internal/conditions 2.716s
ok github.com/novox/mesh-controller/internal/envfile 1.047s
ok github.com/novox/mesh-controller/internal/facts 1.045s
ok github.com/novox/mesh-controller/internal/identity 5.725s
ok github.com/novox/mesh-controller/internal/inventory 86.611s
ok github.com/novox/mesh-controller/internal/lease 17.659s
ok github.com/novox/mesh-controller/internal/licences 5.403s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.067s
ok github.com/novox/mesh-controller/internal/link 68.615s
ok github.com/novox/mesh-controller/internal/lint 2.498s
ok github.com/novox/mesh-controller/internal/outward 1.096s
ok github.com/novox/mesh-controller/internal/overlay 1.105s
ok github.com/novox/mesh-controller/internal/secrets 1.506s
ok github.com/novox/mesh-controller/internal/store 3.525s
ok github.com/novox/mesh-controller/internal/testbus 1.296s
ok github.com/novox/mesh-controller/internal/token 1.020s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.36s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.38s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.38s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.39s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.38s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.34s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.32s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.42s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.38s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.42s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.38s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.41s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.37s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.37s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.37s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.37s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.39s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.45s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.43s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.31s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.33s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.32s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.45s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.22s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.22s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.24s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.26s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.22s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.24s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.23s)
```
**Out of date when it landed**: out of date: judged against trunk 4dbd4066ca54, the trunk is now c0c379af2b3c; judged again on a recheck or when it is merged
Second review of #276: a dead letter delivered again beside its original
shares its request id and was removed as a copy, losing the ask; and a
publish that outlived the pause could delete an original a holder had
taken. A copy now names the message it copies, removals are said, the
publish waits inside the pause's margin, and an original handed out
meanwhile keeps its place while the copy goes.
Merge check at fc573f95
Judged: head fc573f951a47 merged into trunk 13711fb5b91b; read beside it: mesh-catalog ac2d4dc46f4c, mesh-controller-main 13711fb5b91b, mesh-host 303d4037e84e, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
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 build-agent is judged on its first machine
Run by the build seat on shanks as build-1791834440441450137 (builds --log build-1791834440441450137).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:54:38Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T19:54:38Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/queue_answer_test.go and internal/link/queue_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 295.045s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.060s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.081s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.052s
ok github.com/novox/mesh-controller/examples/route-proxy 1.227s
ok github.com/novox/mesh-controller/internal/artifacts 1.126s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.584s
ok github.com/novox/mesh-controller/internal/builder 44.954s
ok github.com/novox/mesh-controller/internal/catalogue 8.821s
ok github.com/novox/mesh-controller/internal/conditions 2.767s
ok github.com/novox/mesh-controller/internal/envfile 1.052s
ok github.com/novox/mesh-controller/internal/facts 1.059s
ok github.com/novox/mesh-controller/internal/identity 5.204s
ok github.com/novox/mesh-controller/internal/inventory 107.574s
ok github.com/novox/mesh-controller/internal/lease 17.754s
ok github.com/novox/mesh-controller/internal/licences 4.708s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.061s
ok github.com/novox/mesh-controller/internal/link 78.018s
ok github.com/novox/mesh-controller/internal/lint 2.569s
ok github.com/novox/mesh-controller/internal/outward 1.091s
ok github.com/novox/mesh-controller/internal/overlay 1.072s
ok github.com/novox/mesh-controller/internal/secrets 1.581s
ok github.com/novox/mesh-controller/internal/store 3.551s
ok github.com/novox/mesh-controller/internal/testbus 1.250s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.42s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.45s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.47s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.42s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.41s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.40s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.40s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.45s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.46s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.45s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.45s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.43s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.49s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.43s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.48s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.44s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.41s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.41s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.43s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.46s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.51s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.37s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.37s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.38s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.52s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.29s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.27s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.29s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.28s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.28s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.27s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.27s)
**Merge check** at `fc573f95`
Judged: head `fc573f951a47` merged into trunk `13711fb5b91b`; read beside it: mesh-catalog `ac2d4dc46f4c`, mesh-controller-main `13711fb5b91b`, mesh-host `303d4037e84e`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- 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 build-agent is judged on its first machine
Run by the build seat on shanks as `build-1791834440441450137` (`builds --log build-1791834440441450137`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T19:54:38Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T19:54:38Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/queue_answer_test.go and internal/link/queue_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 295.045s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.060s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.081s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.052s
ok github.com/novox/mesh-controller/examples/route-proxy 1.227s
ok github.com/novox/mesh-controller/internal/artifacts 1.126s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.584s
ok github.com/novox/mesh-controller/internal/builder 44.954s
ok github.com/novox/mesh-controller/internal/catalogue 8.821s
ok github.com/novox/mesh-controller/internal/conditions 2.767s
ok github.com/novox/mesh-controller/internal/envfile 1.052s
ok github.com/novox/mesh-controller/internal/facts 1.059s
ok github.com/novox/mesh-controller/internal/identity 5.204s
ok github.com/novox/mesh-controller/internal/inventory 107.574s
ok github.com/novox/mesh-controller/internal/lease 17.754s
ok github.com/novox/mesh-controller/internal/licences 4.708s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.061s
ok github.com/novox/mesh-controller/internal/link 78.018s
ok github.com/novox/mesh-controller/internal/lint 2.569s
ok github.com/novox/mesh-controller/internal/outward 1.091s
ok github.com/novox/mesh-controller/internal/overlay 1.072s
ok github.com/novox/mesh-controller/internal/secrets 1.581s
ok github.com/novox/mesh-controller/internal/store 3.551s
ok github.com/novox/mesh-controller/internal/testbus 1.250s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.42s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.45s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.47s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.42s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.41s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.40s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.40s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.45s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.31s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.46s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.45s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.45s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.43s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.49s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.43s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.48s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.44s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.41s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.41s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.43s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.46s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.51s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.50s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.37s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.37s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.38s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.52s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.29s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.27s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.29s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.28s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.28s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.27s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.27s)
```
Merge check at fc573f95
Judged: head fc573f951a47 merged into trunk 13711fb5b91b; read beside it: mesh-catalog 9c9a76d220f8, mesh-controller-main 13711fb5b91b, mesh-host 303d4037e84e, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
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 build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/queue_answer_test.go, internal/link/queue_order_test.go
Run by the build seat on g14 as build-1791835344496111770 (builds --log build-1791835344496111770).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T20:04:38Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T20:04:38Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/queue_answer_test.go and internal/link/queue_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 279.662s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.019s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.026s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/route-proxy 1.185s
ok github.com/novox/mesh-controller/internal/artifacts 1.049s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 7.630s
ok github.com/novox/mesh-controller/internal/builder 35.813s
ok github.com/novox/mesh-controller/internal/catalogue 8.253s
ok github.com/novox/mesh-controller/internal/conditions 3.998s
ok github.com/novox/mesh-controller/internal/envfile 1.027s
ok github.com/novox/mesh-controller/internal/facts 1.028s
ok github.com/novox/mesh-controller/internal/identity 8.743s
ok github.com/novox/mesh-controller/internal/inventory 92.092s
ok github.com/novox/mesh-controller/internal/lease 21.032s
ok github.com/novox/mesh-controller/internal/licences 8.373s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 73.887s
ok github.com/novox/mesh-controller/internal/lint 1.999s
ok github.com/novox/mesh-controller/internal/outward 1.028s
ok github.com/novox/mesh-controller/internal/overlay 1.021s
ok github.com/novox/mesh-controller/internal/secrets 1.317s
ok github.com/novox/mesh-controller/internal/store 6.326s
ok github.com/novox/mesh-controller/internal/testbus 1.216s
ok github.com/novox/mesh-controller/internal/token 1.018s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.35s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.37s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.37s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.35s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.52s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.32s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.31s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.37s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.39s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.39s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.38s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (2.21s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.36s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.40s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.35s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.35s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.35s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.35s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.37s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.43s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.43s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.30s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.30s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.30s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.42s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.22s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.21s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.23s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.22s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.21s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.20s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.21s)
**Merge check** at `fc573f95`
Judged: head `fc573f951a47` merged into trunk `13711fb5b91b`; read beside it: mesh-catalog `9c9a76d220f8`, mesh-controller-main `13711fb5b91b`, mesh-host `303d4037e84e`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- 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 build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/queue_answer_test.go, internal/link/queue_order_test.go
Run by the build seat on g14 as `build-1791835344496111770` (`builds --log build-1791835344496111770`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-12T20:04:38Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-12T20:04:38Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/queue_answer_test.go and internal/link/queue_order_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 279.662s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.019s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.026s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/route-proxy 1.185s
ok github.com/novox/mesh-controller/internal/artifacts 1.049s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 7.630s
ok github.com/novox/mesh-controller/internal/builder 35.813s
ok github.com/novox/mesh-controller/internal/catalogue 8.253s
ok github.com/novox/mesh-controller/internal/conditions 3.998s
ok github.com/novox/mesh-controller/internal/envfile 1.027s
ok github.com/novox/mesh-controller/internal/facts 1.028s
ok github.com/novox/mesh-controller/internal/identity 8.743s
ok github.com/novox/mesh-controller/internal/inventory 92.092s
ok github.com/novox/mesh-controller/internal/lease 21.032s
ok github.com/novox/mesh-controller/internal/licences 8.373s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 73.887s
ok github.com/novox/mesh-controller/internal/lint 1.999s
ok github.com/novox/mesh-controller/internal/outward 1.028s
ok github.com/novox/mesh-controller/internal/overlay 1.021s
ok github.com/novox/mesh-controller/internal/secrets 1.317s
ok github.com/novox/mesh-controller/internal/store 6.326s
ok github.com/novox/mesh-controller/internal/testbus 1.216s
ok github.com/novox/mesh-controller/internal/token 1.018s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.35s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.37s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.37s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.35s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.52s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.32s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (4.31s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.37s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.39s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.39s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.38s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (2.21s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.36s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.40s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.35s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.35s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.35s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.35s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.37s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.43s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.43s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.30s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.30s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.30s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.42s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.22s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.21s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.23s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.22s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.21s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.20s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.21s)
```
Some checks are pending
mesh/merge-gate out of date: judged against trunk 13711fb5b91b, the trunk is now 13be75eb65c0; 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.
Fixes novox/hq issue 558: a merged change's delivery build waited 3–23 minutes in the build queue behind pull-request checks, because the queue was first come, first served.
The policy (a small design limit, decided under the operator's standing word and noted on issue 558):
How. The order is kept in the build seat's work queue itself, so it survives a controller restart.
link.PutInOrderreads the waiting asks (stream seq > what the worker handed out), computesQueueOrder, and moves only the asks that must go behind (delete by seq, publish the same body again under the same id) while the worker is paused (PauseConsumer, bounded to 20 s, resumed at the end). It runs after every ask (Ask/Submit) and every 30 s on the acting controller, for checks that come of age with nothing asked. A queue already in order is read and left alone, no pause.The
queueverb's answer says each ask's kind asdeliveryorcheck(wasbuild/check), and its text line says it too.Tests (written first; on main
TestNatsADeliveryIsTakenBeforeTheChecksQueuedAheadOfItfailed withtaken as [/a /b /d], want [/d /a /b], andTestTheQueueVerbAnswersEachAskAsDatafailed on the kind):internal/link/queue_order_test.go: delivery before earlier checks; a 10-minute check before a later delivery; unknown kind is a check; against a real bus, the holder takes D first.cmd/mesh-controller/queue_answer_test.go: kind in the data and in the table.gofmt, go vet,
go test -raceon internal/link, internal/broker, cmd/mesh-controller, cmd/mesh-builder;go test ./...green.Rollout: mesh-controller only (the serving controller on novox). No grant, stream, consumer, build-agent or catalogue change: the controller already holds
$JS.API.>, and the bus (2.11) supports consumer pause.Delivery
novox/mesh-controller@fc573f951a47— proposed since 2026-10-12T20:22:49ZDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Transitions
13711fb5b9, the trunk is now 13be75eb65c0; judged again on a recheck or when it is mergedThe commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
c6e23445Judged: head
c6e234455f5emerged into trunk4dbd4066ca54; read beside it: mesh-catalogeb5f33f2b475, mesh-controller-main4dbd4066ca54, mesh-host303d4037e84e, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on novox as
build-1791833180487333808(builds --log build-1791833180487333808).Out of date when it landed: out of date: judged against trunk
4dbd4066ca, the trunk is now c0c379af2b3c; judged again on a recheck or when it is mergedMerge check at
1ded7dffJudged: head
1ded7dff34cemerged into trunk4dbd4066ca54; read beside it: mesh-catalogeb5f33f2b475, mesh-controller-main4dbd4066ca54, mesh-host303d4037e84e, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791833913421699582(builds --log build-1791833913421699582).Out of date when it landed: out of date: judged against trunk
4dbd4066ca, the trunk is now c0c379af2b3c; judged again on a recheck or when it is mergedMerge check at
fc573f95Judged: head
fc573f951a47merged into trunk13711fb5b91b; read beside it: mesh-catalogac2d4dc46f4c, mesh-controller-main13711fb5b91b, mesh-host303d4037e84e, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1791834440441450137(builds --log build-1791834440441450137).Merge check at
fc573f95Judged: head
fc573f951a47merged into trunk13711fb5b91b; read beside it: mesh-catalog9c9a76d220f8, mesh-controller-main13711fb5b91b, mesh-host303d4037e84e, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on g14 as
build-1791835344496111770(builds --log build-1791835344496111770).View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.