artifactStoreAddress answers 127.0.0.1:<port> instead of <node>.internal:<port> in exactly one case: the store's own node asks, it is the only node on the private network, and no node holds the mesh's resolver seat mesh-dns-resolver (meshNamesAnswered, which reads the same holders a machine's resolver file lists). Every other case is unchanged:
the store's node before the network: loopback, as before;
other nodes: the internal name, as before;
a mesh of several nodes: the internal name, as before;
any mesh with a resolver: the internal name, as before.
Why
In run-2026-10-14T05-52-08-387Z, genesis placed anchor on the private network at step 21. From then on every reference the mesh composed named the store anchor.internal:5000. Nothing answers that name until a module holds mesh-dns-resolver (ADR 0194), and genesis installs none. So the filter's build at step 22 ran docker run anchor.internal:5000/mesh-tools/build@… and the runtime answered lookup anchor.internal: no such host. The registry trust for anchor.internal:5000 was in place; the name simply had no answer.
Design limit
I chose this on my own; the triage marked the issue as needing a decision. Loopback applies only to a mesh of one: there loopback is the truth for every caller, and it is what genesis already used before the network. I did not pick the other two ways:
having genesis write a hosts line for its own name: the hosts file belongs to the hostname module (ADR 0199);
naming the store by address everywhere: that would change the references on every node of the live mesh.
The live mesh has mesh-dns-resolver held by dnsmasq on ace and novox, and four nodes on the network, so nothing it composes changes.
Tested
TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (store test, listed in testdata/store-tests):
a lone anchor on the network with no resolver gets 127.0.0.1:5101, and so does a base handed to the builder;
once a resolver holds the seat, it gets anchor.internal:5101.
Without the change it fails with anchor.internal:5101.
The existing two-node test (TestTheRegistryTrustAndEveryImageFollowThePortTheNodeGaveTheStore) still gets the internal name everywhere.
The whole ./cmd/mesh-controller package passes against a throwaway postgres 17 (172 s), and go vet is clean.
A lab run of genesis-keeps-its-bus on shanks with this branch: result in a comment.
Fixes issue 701.
## What
`artifactStoreAddress` answers `127.0.0.1:<port>` instead of `<node>.internal:<port>` in exactly one case: the store's own node asks, it is the only node on the private network, and no node holds the mesh's resolver seat `mesh-dns-resolver` (`meshNamesAnswered`, which reads the same holders a machine's resolver file lists). Every other case is unchanged:
- the store's node before the network: loopback, as before;
- other nodes: the internal name, as before;
- a mesh of several nodes: the internal name, as before;
- any mesh with a resolver: the internal name, as before.
## Why
In run-2026-10-14T05-52-08-387Z, genesis placed anchor on the private network at step 21. From then on every reference the mesh composed named the store `anchor.internal:5000`. Nothing answers that name until a module holds `mesh-dns-resolver` (ADR 0194), and genesis installs none. So the filter's build at step 22 ran `docker run anchor.internal:5000/mesh-tools/build@…` and the runtime answered `lookup anchor.internal: no such host`. The registry trust for `anchor.internal:5000` was in place; the name simply had no answer.
## Design limit
I chose this on my own; the triage marked the issue as needing a decision. Loopback applies only to a mesh of one: there loopback is the truth for every caller, and it is what genesis already used before the network. I did not pick the other two ways:
- having genesis write a hosts line for its own name: the hosts file belongs to the hostname module (ADR 0199);
- naming the store by address everywhere: that would change the references on every node of the live mesh.
The live mesh has `mesh-dns-resolver` held by dnsmasq on ace and novox, and four nodes on the network, so nothing it composes changes.
## Tested
- `TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt` (store test, listed in testdata/store-tests):
- a lone anchor on the network with no resolver gets `127.0.0.1:5101`, and so does a base handed to the builder;
- once a resolver holds the seat, it gets `anchor.internal:5101`.
- Without the change it fails with `anchor.internal:5101`.
- The existing two-node test (`TestTheRegistryTrustAndEveryImageFollowThePortTheNodeGaveTheStore`) still gets the internal name everywhere.
- The whole `./cmd/mesh-controller` package passes against a throwaway postgres 17 (172 s), and `go vet` is clean.
- A lab run of genesis-keeps-its-bus on shanks with this branch: result in a comment.
Fixes issue 701.
mesh/merge-gate head eb99284890cc merged into trunk 3479a35462b2 — pass: builds mesh-controller → novox; no bus step; every machine composes with the chang…
Genesis places the private network at step 21, before anything holds the
mesh's resolver seat, and from then the store was named anchor.internal.
Nothing answered that name, so the filter's build at step 22 could not
pull its base. While the store's node is the only one on the network and
no resolver holds the seat, keep answering it loopback, as before the
network; a mesh of several, or one with a resolver, is answered as before.
Deliverynovox/mesh-controller@0350b4e22276 — proposed since 2026-10-14T13:22:26Z
Delivery plan — builds mesh-controller → novox; no bus step
tier 0: mesh-controller
novox: receives mesh-controller
Transitions
2026-10-14 09:07 (new) → proposed (announced): novox/mesh-controller#325's head announced
2026-10-14 09:15 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-14 09:15 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-14 13:22 ready → proposed (trunk moved): out of date: judged against trunk 535c7641ac, the trunk is now c975dbf7b053; 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@0350b4e22276` — **proposed** since 2026-10-14T13:22:26Z
**Delivery plan** — builds mesh-controller → novox; no bus step
- tier 0: mesh-controller
- novox: receives mesh-controller
**Transitions**
- 2026-10-14 09:07 (new) → proposed (announced): novox/mesh-controller#325's head announced
- 2026-10-14 09:15 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-14 09:15 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-14 13:22 ready → proposed (trunk moved): out of date: judged against trunk 535c7641ac41, the trunk is now c975dbf7b053; 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`.
Merge check at eb992848
Judged: head eb99284890cc merged into trunk 3479a35462b2; read beside it: mesh-catalog a44d490d974c, mesh-controller-main 3479a35462b2, mesh-host 1a2677882380, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds mesh-controller → novox; no bus step
tier 0: mesh-controller
novox: receives mesh-controller
read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on ace as build-1791959576609542553 (builds --log build-1791959576609542553).
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T05:31:20Z 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-14T05:31:20Z
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 1 module(s) in 1 tier(s): mesh-controller
notes:
- cmd/mesh-controller/addresses_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.082s
ok github.com/novox/mesh-controller/cmd/mesh-controller 154.655s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.019s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/route-proxy 1.118s
ok github.com/novox/mesh-controller/internal/artifacts 1.038s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.697s
ok github.com/novox/mesh-controller/internal/builder 35.662s
ok github.com/novox/mesh-controller/internal/catalogue 7.363s
ok github.com/novox/mesh-controller/internal/conditions 2.719s
ok github.com/novox/mesh-controller/internal/envfile 1.115s
ok github.com/novox/mesh-controller/internal/facts 1.071s
ok github.com/novox/mesh-controller/internal/identity 5.978s
ok github.com/novox/mesh-controller/internal/inventory 31.738s
ok github.com/novox/mesh-controller/internal/lease 17.726s
ok github.com/novox/mesh-controller/internal/licences 5.129s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.064s
ok github.com/novox/mesh-controller/internal/link 57.745s
ok github.com/novox/mesh-controller/internal/lint 2.231s
ok github.com/novox/mesh-controller/internal/outward 1.145s
ok github.com/novox/mesh-controller/internal/overlay 1.081s
ok github.com/novox/mesh-controller/internal/secrets 1.490s
ok github.com/novox/mesh-controller/internal/store 4.933s
ok github.com/novox/mesh-controller/internal/testbus 1.246s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.20s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.18s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.18s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.15s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.96s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.21s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.11s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.23s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.19s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.23s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.18s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.18s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.18s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.18s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.20s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.25s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.25s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.14s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.13s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.14s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.26s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.21s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.26s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.22s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.18s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.16s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.14s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.17s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.43s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.25s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.18s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.18s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.16s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.47s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.15s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.21s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.25s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.21s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.17s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.22s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.16s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.17s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.19s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.20s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.20s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.14s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.14s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.07s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.07s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.08s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.07s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.06s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.06s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.06s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.06s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.07s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.07s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.06s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.07s)
**Merge check** at `eb992848`
Judged: head `eb99284890cc` merged into trunk `3479a35462b2`; read beside it: mesh-catalog `a44d490d974c`, mesh-controller-main `3479a35462b2`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds mesh-controller → novox; no bus step
- tier 0: mesh-controller
- novox: receives mesh-controller
- read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on ace as `build-1791959576609542553` (`builds --log build-1791959576609542553`).
```
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T05:31:20Z 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-14T05:31:20Z
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 1 module(s) in 1 tier(s): mesh-controller
notes:
- cmd/mesh-controller/addresses_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.082s
ok github.com/novox/mesh-controller/cmd/mesh-controller 154.655s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.019s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/route-proxy 1.118s
ok github.com/novox/mesh-controller/internal/artifacts 1.038s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.697s
ok github.com/novox/mesh-controller/internal/builder 35.662s
ok github.com/novox/mesh-controller/internal/catalogue 7.363s
ok github.com/novox/mesh-controller/internal/conditions 2.719s
ok github.com/novox/mesh-controller/internal/envfile 1.115s
ok github.com/novox/mesh-controller/internal/facts 1.071s
ok github.com/novox/mesh-controller/internal/identity 5.978s
ok github.com/novox/mesh-controller/internal/inventory 31.738s
ok github.com/novox/mesh-controller/internal/lease 17.726s
ok github.com/novox/mesh-controller/internal/licences 5.129s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.064s
ok github.com/novox/mesh-controller/internal/link 57.745s
ok github.com/novox/mesh-controller/internal/lint 2.231s
ok github.com/novox/mesh-controller/internal/outward 1.145s
ok github.com/novox/mesh-controller/internal/overlay 1.081s
ok github.com/novox/mesh-controller/internal/secrets 1.490s
ok github.com/novox/mesh-controller/internal/store 4.933s
ok github.com/novox/mesh-controller/internal/testbus 1.246s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.20s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.18s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.18s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.15s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.96s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.21s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.11s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.23s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.19s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.23s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.18s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.18s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.18s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.18s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.20s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.25s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.25s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.14s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.13s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.14s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.26s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.21s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.26s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.22s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.18s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.16s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.14s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.17s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.43s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.25s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.18s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.18s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.16s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.47s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.15s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.21s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.25s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.21s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.20s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.17s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.22s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.16s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.17s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.19s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.20s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.20s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.14s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.14s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.07s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.07s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.08s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.07s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.06s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.06s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.06s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.06s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.07s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.07s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.06s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.07s)
```
The first change kept the base references on loopback, and the build agent
then failed to publish: its registry is its same-node binding, composed at
the node's own internal name. While a mesh of one has no resolver, compose
that node without its name, so what it binds to on itself is loopback, as
before the network.
Merge check at d53fea31
Judged: head d53fea31f0af merged into trunk 3479a35462b2; read beside it: mesh-catalog a44d490d974c, mesh-controller-main 3479a35462b2, mesh-host 1a2677882380, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds mesh-controller → novox; no bus step
tier 0: mesh-controller
novox: receives mesh-controller
read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on novox as build-1791961086127996425 (builds --log build-1791961086127996425).
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T05:31:20Z 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-14T05:31:20Z
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 1 module(s) in 1 tier(s): mesh-controller
notes:
- cmd/mesh-controller/addresses_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.176s
ok github.com/novox/mesh-controller/cmd/mesh-controller 237.221s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.028s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.031s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.025s
ok github.com/novox/mesh-controller/examples/route-proxy 1.159s
ok github.com/novox/mesh-controller/internal/artifacts 1.069s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.469s
ok github.com/novox/mesh-controller/internal/builder 66.213s
ok github.com/novox/mesh-controller/internal/catalogue 10.685s
ok github.com/novox/mesh-controller/internal/conditions 2.867s
ok github.com/novox/mesh-controller/internal/envfile 1.039s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 9.962s
ok github.com/novox/mesh-controller/internal/inventory 58.509s
ok github.com/novox/mesh-controller/internal/lease 19.838s
ok github.com/novox/mesh-controller/internal/licences 7.134s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.014s
ok github.com/novox/mesh-controller/internal/link 70.134s
ok github.com/novox/mesh-controller/internal/lint 3.011s
ok github.com/novox/mesh-controller/internal/outward 1.079s
ok github.com/novox/mesh-controller/internal/overlay 1.031s
ok github.com/novox/mesh-controller/internal/secrets 1.551s
ok github.com/novox/mesh-controller/internal/store 5.989s
ok github.com/novox/mesh-controller/internal/testbus 1.230s
ok github.com/novox/mesh-controller/internal/token 1.014s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.39s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.25s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.28s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.56s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.33s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.02s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.27s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.28s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.30s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.22s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.32s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.47s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.31s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.24s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.19s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.20s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.40s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.27s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.34s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.28s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.33s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.22s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.54s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.09s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.72s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.34s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.78s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.21s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.26s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.31s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.30s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.29s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.28s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.20s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.31s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.25s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.25s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.18s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.17s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.22s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.12s)
**Merge check** at `d53fea31`
Judged: head `d53fea31f0af` merged into trunk `3479a35462b2`; read beside it: mesh-catalog `a44d490d974c`, mesh-controller-main `3479a35462b2`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds mesh-controller → novox; no bus step
- tier 0: mesh-controller
- novox: receives mesh-controller
- read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on novox as `build-1791961086127996425` (`builds --log build-1791961086127996425`).
```
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T05:31:20Z 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-14T05:31:20Z
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 1 module(s) in 1 tier(s): mesh-controller
notes:
- cmd/mesh-controller/addresses_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.176s
ok github.com/novox/mesh-controller/cmd/mesh-controller 237.221s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.028s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.031s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.025s
ok github.com/novox/mesh-controller/examples/route-proxy 1.159s
ok github.com/novox/mesh-controller/internal/artifacts 1.069s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.469s
ok github.com/novox/mesh-controller/internal/builder 66.213s
ok github.com/novox/mesh-controller/internal/catalogue 10.685s
ok github.com/novox/mesh-controller/internal/conditions 2.867s
ok github.com/novox/mesh-controller/internal/envfile 1.039s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 9.962s
ok github.com/novox/mesh-controller/internal/inventory 58.509s
ok github.com/novox/mesh-controller/internal/lease 19.838s
ok github.com/novox/mesh-controller/internal/licences 7.134s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.014s
ok github.com/novox/mesh-controller/internal/link 70.134s
ok github.com/novox/mesh-controller/internal/lint 3.011s
ok github.com/novox/mesh-controller/internal/outward 1.079s
ok github.com/novox/mesh-controller/internal/overlay 1.031s
ok github.com/novox/mesh-controller/internal/secrets 1.551s
ok github.com/novox/mesh-controller/internal/store 5.989s
ok github.com/novox/mesh-controller/internal/testbus 1.230s
ok github.com/novox/mesh-controller/internal/token 1.014s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.39s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.25s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.28s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.56s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.33s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.02s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.27s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.28s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.41s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.30s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.22s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.32s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.47s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.31s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.24s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.19s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.20s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.40s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.27s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.34s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.28s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.33s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.22s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.54s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.09s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.72s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.34s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.26s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.78s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.24s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.21s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.26s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.31s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.30s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.29s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.28s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.20s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.31s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.25s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.25s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.18s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.17s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.22s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.11s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.12s)
```
Second commit d53fea31. With only the first commit (eb992848), run-2026-10-14T06-32-20-126Z got past the base pull at step 22. It then failed publishing: cannot reach the registry at anchor.internal:5000 ... lookup anchor.internal on 1.1.1.1:53: no such host. The build agent's MESH_REGISTRY is its same-node binding ${bound:artifact-store:at}, and that binding was composed from the node's own internal name.
The second commit composes a lone node without its own name while no resolver holds mesh-dns-resolver. Same-node bindings then fall back to loopback, exactly as before the network. A node's own name feeds only same-node bindings, ${machine:at}/${machine:address} (used by dnsmasq, which is itself the resolver, and step-ca) and route names. The test now also checks the builder's composed MESH_REGISTRY: 127.0.0.1:5101 without a resolver, anchor.internal:5101 with one. Without plan.go's change it fails.
Lab run-2026-10-14T06-58-04-985Z on shanks, genesis-keeps-its-bus with mesh-controller d53fea31 and everything else on main: the second genesis ran all 24 steps ("The installer finished"; "this machine is a mesh of one node: it builds its own software, holds its graph, sits on its private network, and filters what modules declared"). Bed verdict: 1 passed, "one bus, mesh-broker-nats, on the module's image; 8 stream(s) kept; anchor connected".
Second commit d53fea31. With only the first commit (eb992848), run-2026-10-14T06-32-20-126Z got past the base pull at step 22. It then failed publishing: `cannot reach the registry at anchor.internal:5000 ... lookup anchor.internal on 1.1.1.1:53: no such host`. The build agent's `MESH_REGISTRY` is its same-node binding `${bound:artifact-store:at}`, and that binding was composed from the node's own internal name.
The second commit composes a lone node without its own name while no resolver holds `mesh-dns-resolver`. Same-node bindings then fall back to loopback, exactly as before the network. A node's own name feeds only same-node bindings, `${machine:at}`/`${machine:address}` (used by dnsmasq, which is itself the resolver, and step-ca) and route names. The test now also checks the builder's composed `MESH_REGISTRY`: `127.0.0.1:5101` without a resolver, `anchor.internal:5101` with one. Without plan.go's change it fails.
Lab run-2026-10-14T06-58-04-985Z on shanks, genesis-keeps-its-bus with mesh-controller d53fea31 and everything else on main: **the second genesis ran all 24 steps** ("The installer finished"; "this machine is a mesh of one node: it builds its own software, holds its graph, sits on its private network, and filters what modules declared"). Bed verdict: 1 passed, "one bus, mesh-broker-nats, on the module's image; 8 stream(s) kept; anchor connected".
Merge check at d53fea31
Judged: head d53fea31f0af merged into trunk 04730b54a8f2; read beside it: mesh-catalog a44d490d974c, mesh-controller-main 04730b54a8f2, mesh-host 1a2677882380, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds mesh-controller → novox; no bus step
tier 0: mesh-controller
novox: receives mesh-controller
read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on shanks as build-1791962605814281759 (builds --log build-1791962605814281759).
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T07:16:52Z 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-14T07:16:52Z
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.088s
ok github.com/novox/mesh-controller/cmd/mesh-controller 183.635s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.059s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/route-proxy 1.240s
ok github.com/novox/mesh-controller/internal/artifacts 1.087s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.549s
ok github.com/novox/mesh-controller/internal/builder 43.158s
ok github.com/novox/mesh-controller/internal/catalogue 8.723s
ok github.com/novox/mesh-controller/internal/conditions 2.714s
ok github.com/novox/mesh-controller/internal/envfile 1.069s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 5.161s
ok github.com/novox/mesh-controller/internal/inventory 36.263s
ok github.com/novox/mesh-controller/internal/lease 17.730s
ok github.com/novox/mesh-controller/internal/licences 4.240s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.046s
ok github.com/novox/mesh-controller/internal/link 59.537s
ok github.com/novox/mesh-controller/internal/lint 2.650s
ok github.com/novox/mesh-controller/internal/outward 1.093s
ok github.com/novox/mesh-controller/internal/overlay 1.079s
ok github.com/novox/mesh-controller/internal/secrets 1.555s
ok github.com/novox/mesh-controller/internal/store 3.510s
ok github.com/novox/mesh-controller/internal/testbus 1.261s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.22s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.23s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.20s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.24s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.26s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.21s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.26s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.20s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.20s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.20s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.24s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.29s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.29s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.25s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.20s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.21s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.19s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.46s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.28s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.21s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.55s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.18s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.18s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.24s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.30s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.19s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.25s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.19s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.19s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.23s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.23s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.17s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.16s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.08s)
**Merge check** at `d53fea31`
Judged: head `d53fea31f0af` merged into trunk `04730b54a8f2`; read beside it: mesh-catalog `a44d490d974c`, mesh-controller-main `04730b54a8f2`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds mesh-controller → novox; no bus step
- tier 0: mesh-controller
- novox: receives mesh-controller
- read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on shanks as `build-1791962605814281759` (`builds --log build-1791962605814281759`).
```
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T07:16:52Z 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-14T07:16:52Z
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.088s
ok github.com/novox/mesh-controller/cmd/mesh-controller 183.635s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.059s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/route-proxy 1.240s
ok github.com/novox/mesh-controller/internal/artifacts 1.087s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.549s
ok github.com/novox/mesh-controller/internal/builder 43.158s
ok github.com/novox/mesh-controller/internal/catalogue 8.723s
ok github.com/novox/mesh-controller/internal/conditions 2.714s
ok github.com/novox/mesh-controller/internal/envfile 1.069s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 5.161s
ok github.com/novox/mesh-controller/internal/inventory 36.263s
ok github.com/novox/mesh-controller/internal/lease 17.730s
ok github.com/novox/mesh-controller/internal/licences 4.240s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.046s
ok github.com/novox/mesh-controller/internal/link 59.537s
ok github.com/novox/mesh-controller/internal/lint 2.650s
ok github.com/novox/mesh-controller/internal/outward 1.093s
ok github.com/novox/mesh-controller/internal/overlay 1.079s
ok github.com/novox/mesh-controller/internal/secrets 1.555s
ok github.com/novox/mesh-controller/internal/store 3.510s
ok github.com/novox/mesh-controller/internal/testbus 1.261s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.22s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.23s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.20s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.24s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.26s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.35s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.21s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.26s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.20s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.20s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.20s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.24s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.29s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.29s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.25s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.20s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.21s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.19s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.46s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.28s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.21s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.55s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.18s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.18s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.24s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.30s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.25s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.19s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.25s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.19s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.19s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.23s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.22s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.23s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.17s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.16s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.07s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.08s)
```
Verdict: changes needed at d53fea31f0 (one small one): the fix is right for genesis, but aLoneNameNothingAnswers is not exact. A degraded read of the live mesh can make it true for g14 or shanks.
Independent review for issue 701 (a lone node is handed a name nothing answers).
Checks at this head, fresh, judged against trunk 04730b54a8 at 07:29: mesh/merge-gate success ("PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)"), mesh/repo-check success ("PASS — its merge-check.sh passed"; the store tests include "--- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.35s)"), mesh/delivery success ("ready: waits for its merge"). No mesh/delivery-group status. The gate composing all four machines unchanged shows the live mesh, read as it is now, does not take the path.
A resolver briefly down cannot trigger it. The holders come from inv.Holdings, a record, not from health, so ace and novox stay holders while their resolver restarts.
But both halves of the test come from one reading, onTheNetwork. The test is len(onNetwork) == 1, and replicatedHolders keeps a holder only when its address is in that same onTheNetwork list. onTheNetwork silently drops a machine whose inv.Assigned read errs (if err != nil || len(assigned) == 0 { continue }), and drops, saying it on stderr only, a machine whose modules do not resolve against the catalogue (issue 188's case). If ace, novox and one other drop out of one reading, the one left sees itself alone, and no holder survives the address filter. ace and novox can never be that one, since each holds a resolver itself. But g14 or shanks would then be planned with At = "": composed as off the network for that send, its same-node bindings by loopback. It is a degraded state already, but this adds a wrong composition pushed during it, not just a missing name. Today's code would still hand that node its own name.
Change asked: make the test about the mesh, not about one reading of the network. For example, the inventory knows exactly one node (inv.Nodes) and no holding of mesh-dns-resolver is recorded at all (before the address filter). Genesis still meets both; a mesh of four never does. A test with two nodes, one of them failing to resolve, would pin it.
The test fails on main, by reading, not by a run here. It compiles against main's network.go and plan.go (go vet clean). Main returns overlay.InternalName(node) whenever the store is on the network, so its first assertion ("127.0.0.1:5101") fails. I could not run it on g14: it needs the store (MESH_TEST_POSTGRES), and here it skips. The repo-check run above passed it at this head.
The lab run named (run-2026-10-14T06-58-04-985Z on shanks, all 24 genesis steps) I did not re-read; I take it as reported.
Reviewed by an independent reviewer on g14.
Verdict: changes needed at d53fea31f0af (one small one): the fix is right for genesis, but aLoneNameNothingAnswers is not exact. A degraded read of the live mesh can make it true for g14 or shanks.
Independent review for issue 701 (a lone node is handed a name nothing answers).
Checks at this head, fresh, judged against trunk 04730b54a8f2 at 07:29: mesh/merge-gate success ("PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)"), mesh/repo-check success ("PASS — its merge-check.sh passed"; the store tests include "--- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.35s)"), mesh/delivery success ("ready: waits for its merge"). No mesh/delivery-group status. The gate composing all four machines unchanged shows the live mesh, read as it is now, does not take the path.
1. A resolver briefly down cannot trigger it. The holders come from inv.Holdings, a record, not from health, so ace and novox stay holders while their resolver restarts.
2. But both halves of the test come from one reading, onTheNetwork. The test is len(onNetwork) == 1, and replicatedHolders keeps a holder only when its address is in that same onTheNetwork list. onTheNetwork silently drops a machine whose inv.Assigned read errs (`if err != nil || len(assigned) == 0 { continue }`), and drops, saying it on stderr only, a machine whose modules do not resolve against the catalogue (issue 188's case). If ace, novox and one other drop out of one reading, the one left sees itself alone, and no holder survives the address filter. ace and novox can never be that one, since each holds a resolver itself. But g14 or shanks would then be planned with At = "": composed as off the network for that send, its same-node bindings by loopback. It is a degraded state already, but this adds a wrong composition pushed during it, not just a missing name. Today's code would still hand that node its own name.
3. Change asked: make the test about the mesh, not about one reading of the network. For example, the inventory knows exactly one node (inv.Nodes) and no holding of mesh-dns-resolver is recorded at all (before the address filter). Genesis still meets both; a mesh of four never does. A test with two nodes, one of them failing to resolve, would pin it.
4. The test fails on main, by reading, not by a run here. It compiles against main's network.go and plan.go (go vet clean). Main returns overlay.InternalName(node) whenever the store is on the network, so its first assertion ("127.0.0.1:5101") fails. I could not run it on g14: it needs the store (MESH_TEST_POSTGRES), and here it skips. The repo-check run above passed it at this head.
The lab run named (run-2026-10-14T06-58-04-985Z on shanks, all 24 genesis steps) I did not re-read; I take it as reported.
Reviewed by an independent reviewer on g14.
The network reading leaves out a machine whose assignments cannot be read
or whose modules do not resolve, so a bad reading could make a mesh of
several look like one and send its machines to loopback. Count the nodes
the inventory knows, and every recorded holding and assigned claimant of
the resolver seat, before any address filter.
Merge check at 0350b4e2
Judged: head 0350b4e22276 merged into trunk 535c7641ac41; read beside it: mesh-catalog a44d490d974c, mesh-controller-main 535c7641ac41, mesh-host 1a2677882380, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds mesh-controller → novox; no bus step
tier 0: mesh-controller
novox: receives mesh-controller
read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on novox as build-1791968846335814482 (builds --log build-1791968846335814482).
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T09:07:05Z 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-14T09:07:05Z
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 1 module(s) in 1 tier(s): mesh-controller
notes:
- cmd/mesh-controller/addresses_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.220s
ok github.com/novox/mesh-controller/cmd/mesh-controller 225.739s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.011s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/route-proxy 1.126s
ok github.com/novox/mesh-controller/internal/artifacts 1.055s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 11.335s
ok github.com/novox/mesh-controller/internal/builder 61.202s
ok github.com/novox/mesh-controller/internal/catalogue 8.446s
ok github.com/novox/mesh-controller/internal/conditions 2.704s
ok github.com/novox/mesh-controller/internal/envfile 1.032s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 15.468s
ok github.com/novox/mesh-controller/internal/inventory 50.209s
ok github.com/novox/mesh-controller/internal/lease 18.195s
ok github.com/novox/mesh-controller/internal/licences 14.142s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.014s
ok github.com/novox/mesh-controller/internal/link 67.350s
ok github.com/novox/mesh-controller/internal/lint 2.353s
ok github.com/novox/mesh-controller/internal/outward 1.043s
ok github.com/novox/mesh-controller/internal/overlay 1.029s
ok github.com/novox/mesh-controller/internal/secrets 1.430s
ok github.com/novox/mesh-controller/internal/store 7.612s
ok github.com/novox/mesh-controller/internal/testbus 1.394s
ok github.com/novox/mesh-controller/internal/token 1.025s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.23s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.21s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.20s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.98s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.27s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.47s)
./cmd/mesh-controller --- PASS: TestAMeshOfTwoWithAnUnresolvableMachineKeepsItsNames (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.44s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.29s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.29s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.38s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.17s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.17s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.59s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.27s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.41s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.29s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.25s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.21s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.20s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.09s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.72s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.34s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.69s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.27s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.32s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.29s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.29s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.36s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.24s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.25s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.25s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.22s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.09s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.10s)
**Merge check** at `0350b4e2`
Judged: head `0350b4e22276` merged into trunk `535c7641ac41`; read beside it: mesh-catalog `a44d490d974c`, mesh-controller-main `535c7641ac41`, mesh-host `1a2677882380`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds mesh-controller → novox; no bus step
- tier 0: mesh-controller
- novox: receives mesh-controller
- read by no module's build: cmd/mesh-controller/addresses_test.go, testdata/store-tests
Run by the build seat on novox as `build-1791968846335814482` (`builds --log build-1791968846335814482`).
```
--- the gate: mesh-controller
mesh-controller: ok, 60 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-14T09:07:05Z 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-14T09:07:05Z
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 1 module(s) in 1 tier(s): mesh-controller
notes:
- cmd/mesh-controller/addresses_test.go and testdata/store-tests read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.220s
ok github.com/novox/mesh-controller/cmd/mesh-controller 225.739s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.011s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.024s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/route-proxy 1.126s
ok github.com/novox/mesh-controller/internal/artifacts 1.055s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 11.335s
ok github.com/novox/mesh-controller/internal/builder 61.202s
ok github.com/novox/mesh-controller/internal/catalogue 8.446s
ok github.com/novox/mesh-controller/internal/conditions 2.704s
ok github.com/novox/mesh-controller/internal/envfile 1.032s
ok github.com/novox/mesh-controller/internal/facts 1.033s
ok github.com/novox/mesh-controller/internal/identity 15.468s
ok github.com/novox/mesh-controller/internal/inventory 50.209s
ok github.com/novox/mesh-controller/internal/lease 18.195s
ok github.com/novox/mesh-controller/internal/licences 14.142s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.014s
ok github.com/novox/mesh-controller/internal/link 67.350s
ok github.com/novox/mesh-controller/internal/lint 2.353s
ok github.com/novox/mesh-controller/internal/outward 1.043s
ok github.com/novox/mesh-controller/internal/overlay 1.029s
ok github.com/novox/mesh-controller/internal/secrets 1.430s
ok github.com/novox/mesh-controller/internal/store 7.612s
ok github.com/novox/mesh-controller/internal/testbus 1.394s
ok github.com/novox/mesh-controller/internal/token 1.025s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.23s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.25s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.21s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.20s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.98s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.27s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.47s)
./cmd/mesh-controller --- PASS: TestAMeshOfTwoWithAnUnresolvableMachineKeepsItsNames (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.28s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.23s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.29s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.24s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.27s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.44s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.29s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.29s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.27s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.38s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.17s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.17s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.59s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.27s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.41s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.29s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.25s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.21s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.20s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.09s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.72s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.34s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.23s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.21s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.69s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.20s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.27s)
./cmd/mesh-controller --- PASS: TestAReusedCheckBuildIsRegisteredByItsDigestAndGatedAsABuiltOne (0.32s)
./cmd/mesh-controller --- PASS: TestAReleaseSendsTheRestAtOnceAfterTheFirstPasses (0.29s)
./cmd/mesh-controller --- PASS: TestARestMachineThatFailsIsPutBackAloneAndTheOthersAreJudgedOn (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkTakesOverTheReadingsOfAGateJudgingTheSameBuildThere (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstSendMadeAndNotKeptIsNotSentAgain (0.29s)
./cmd/mesh-controller --- PASS: TestAReleaseSendKeptAndMadeIsNotMadeAgain (0.22s)
./cmd/mesh-controller --- PASS: TestAFirstMachineThatFailsStillStopsTheWalk (0.21s)
./cmd/mesh-controller --- PASS: TestTheControlNodeIsSentLastInAStep (0.36s)
./cmd/mesh-controller --- PASS: TestARestMachineSilentPastItsBoundIsLeftAndSaid (0.24s)
./cmd/mesh-controller --- PASS: TestANoMoveTierWaitsForNoNewReport (0.25s)
./cmd/mesh-controller --- PASS: TestOneProviderDownAndThreeConsumersFailingAreOneCondition (0.25s)
./cmd/mesh-controller --- PASS: TestAConsumerFailingBesideAHealthyProviderIsItsOwn (0.22s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.09s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.08s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.09s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.09s)
./internal/inventory --- PASS: TestAReportOfABusyContainerIsKeptAndReadBack (0.10s)
```
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.
What
artifactStoreAddressanswers127.0.0.1:<port>instead of<node>.internal:<port>in exactly one case: the store's own node asks, it is the only node on the private network, and no node holds the mesh's resolver seatmesh-dns-resolver(meshNamesAnswered, which reads the same holders a machine's resolver file lists). Every other case is unchanged:Why
In run-2026-10-14T05-52-08-387Z, genesis placed anchor on the private network at step 21. From then on every reference the mesh composed named the store
anchor.internal:5000. Nothing answers that name until a module holdsmesh-dns-resolver(ADR 0194), and genesis installs none. So the filter's build at step 22 randocker run anchor.internal:5000/mesh-tools/build@…and the runtime answeredlookup anchor.internal: no such host. The registry trust foranchor.internal:5000was in place; the name simply had no answer.Design limit
I chose this on my own; the triage marked the issue as needing a decision. Loopback applies only to a mesh of one: there loopback is the truth for every caller, and it is what genesis already used before the network. I did not pick the other two ways:
The live mesh has
mesh-dns-resolverheld by dnsmasq on ace and novox, and four nodes on the network, so nothing it composes changes.Tested
TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt(store test, listed in testdata/store-tests):127.0.0.1:5101, and so does a base handed to the builder;anchor.internal:5101.anchor.internal:5101.TestTheRegistryTrustAndEveryImageFollowThePortTheNodeGaveTheStore) still gets the internal name everywhere../cmd/mesh-controllerpackage passes against a throwaway postgres 17 (172 s), andgo vetis clean.Fixes issue 701.
Delivery
novox/mesh-controller@0350b4e22276— proposed since 2026-10-14T13:22:26ZDelivery plan — builds mesh-controller → novox; no bus step
Transitions
535c7641ac, the trunk is now c975dbf7b053; 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
eb992848Judged: head
eb99284890ccmerged into trunk3479a35462b2; read beside it: mesh-cataloga44d490d974c, mesh-controller-main3479a35462b2, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on ace as
build-1791959576609542553(builds --log build-1791959576609542553).Merge check at
d53fea31Judged: head
d53fea31f0afmerged into trunk3479a35462b2; read beside it: mesh-cataloga44d490d974c, mesh-controller-main3479a35462b2, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on novox as
build-1791961086127996425(builds --log build-1791961086127996425).Second commit
d53fea31. With only the first commit (eb992848), run-2026-10-14T06-32-20-126Z got past the base pull at step 22. It then failed publishing:cannot reach the registry at anchor.internal:5000 ... lookup anchor.internal on 1.1.1.1:53: no such host. The build agent'sMESH_REGISTRYis its same-node binding${bound:artifact-store:at}, and that binding was composed from the node's own internal name.The second commit composes a lone node without its own name while no resolver holds
mesh-dns-resolver. Same-node bindings then fall back to loopback, exactly as before the network. A node's own name feeds only same-node bindings,${machine:at}/${machine:address}(used by dnsmasq, which is itself the resolver, and step-ca) and route names. The test now also checks the builder's composedMESH_REGISTRY:127.0.0.1:5101without a resolver,anchor.internal:5101with one. Without plan.go's change it fails.Lab run-2026-10-14T06-58-04-985Z on shanks, genesis-keeps-its-bus with mesh-controller
d53fea31and everything else on main: the second genesis ran all 24 steps ("The installer finished"; "this machine is a mesh of one node: it builds its own software, holds its graph, sits on its private network, and filters what modules declared"). Bed verdict: 1 passed, "one bus, mesh-broker-nats, on the module's image; 8 stream(s) kept; anchor connected".Merge check at
d53fea31Judged: head
d53fea31f0afmerged into trunk04730b54a8f2; read beside it: mesh-cataloga44d490d974c, mesh-controller-main04730b54a8f2, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on shanks as
build-1791962605814281759(builds --log build-1791962605814281759).Verdict: changes needed at
d53fea31f0(one small one): the fix is right for genesis, but aLoneNameNothingAnswers is not exact. A degraded read of the live mesh can make it true for g14 or shanks.Independent review for issue 701 (a lone node is handed a name nothing answers).
Checks at this head, fresh, judged against trunk
04730b54a8at 07:29: mesh/merge-gate success ("PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)"), mesh/repo-check success ("PASS — its merge-check.sh passed"; the store tests include "--- PASS: TestAMeshOfOneIsHandedNoNameUntilAResolverAnswersIt (0.35s)"), mesh/delivery success ("ready: waits for its merge"). No mesh/delivery-group status. The gate composing all four machines unchanged shows the live mesh, read as it is now, does not take the path.if err != nil || len(assigned) == 0 { continue }), and drops, saying it on stderr only, a machine whose modules do not resolve against the catalogue (issue 188's case). If ace, novox and one other drop out of one reading, the one left sees itself alone, and no holder survives the address filter. ace and novox can never be that one, since each holds a resolver itself. But g14 or shanks would then be planned with At = "": composed as off the network for that send, its same-node bindings by loopback. It is a degraded state already, but this adds a wrong composition pushed during it, not just a missing name. Today's code would still hand that node its own name.The lab run named (run-2026-10-14T06-58-04-985Z on shanks, all 24 genesis steps) I did not re-read; I take it as reported.
Reviewed by an independent reviewer on g14.
Merge check at
0350b4e2Judged: head
0350b4e22276merged into trunk535c7641ac41; read beside it: mesh-cataloga44d490d974c, mesh-controller-main535c7641ac41, mesh-host1a2677882380, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds mesh-controller → novox; no bus step
Run by the build seat on novox as
build-1791968846335814482(builds --log build-1791968846335814482).View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.