For issue 624 (the lab's runs stop at setup), decision ADR 0346 (a provider's served values may name the provider's own composed route names; proposed in the knowledge base), design 27 (hq #345).
What
internal/catalogue/served_own_names.go: a string in a provider's serves block may say ${bound:<requirement>:<name>} for a requirement the provider contributes to: name, internal-name, name-<local>, internal-name-<local>, the names its own files read (withOwnNames). Resolution.ServedOwnNames fills them from ownNames, the one composition the provider's proxy also receives. A name the machine does not compose (no public domain, or the endpoint not reached publicly) leaves the key out, and says so.
Both paths:
Provider elsewhere:theRestOfTheMesh now carries each machine's public domain on its node (it had none, so a provider composed no public name there) and fills the served values per provider, putting what was left out on Provider.LeftOut. Resolution copies it to Needed.LeftOut (also through boundNeed).
Provider on the consumer's machine:servedOnThisMachine fills them after settling.
plan prints each left-out key under the consumer's needs line, and on the provider's machine (Resolution.ServedLeftOut), where the remedy is.
CheckServes refuses a served ${bound:…} that names a requirement the module does not contribute to, a fact other than its names, a local name it does not contribute under, or a |default:.
Behaviour for what exists
No manifest in the catalogue serves a ${bound:…} today, so nothing changes until the forge declares one (mesh-catalog PR for issue 624, to merge after this is delivered). The one new store read is PublicDomainOf per node in theRestOfTheMesh.
Tests
internal/catalogue/served_own_names_test.go: filled from the composition; left out and said without a public domain, with the manifest's own map untouched; a consumer beside the provider gets the name in its binding file with no placeholder left; a need carries the provider's left-out lines; the module check refuses the four wrong shapes. They do not build on main (ServedOwnNames does not exist).
cmd/mesh-controller/served_own_names_test.go (store-backed): a consumer on another machine is served https://git.example.test/api/packages/novox/npm/; with the provider's public domain cleared, the key is left out and the need says why. With plan.go reverted to main it fails: the consumer is handed the literal https://${bound:route:name-web}/….
go test ./internal/catalogue and ./cmd/mesh-controller (against postgres 17) pass; gofmt and vet clean.
For issue 624 (the lab's runs stop at setup), decision ADR 0346 (a provider's served values may name the provider's own composed route names; proposed in the knowledge base), design 27 (hq #345).
## What
- `internal/catalogue/served_own_names.go`: a string in a provider's `serves` block may say `${bound:<requirement>:<name>}` for a requirement the provider contributes to: `name`, `internal-name`, `name-<local>`, `internal-name-<local>`, the names its own files read (`withOwnNames`). `Resolution.ServedOwnNames` fills them from `ownNames`, the one composition the provider's proxy also receives. A name the machine does not compose (no public domain, or the endpoint not reached publicly) leaves the key out, and says so.
- Both paths:
- **Provider elsewhere:** `theRestOfTheMesh` now carries each machine's public domain on its node (it had none, so a provider composed no public name there) and fills the served values per provider, putting what was left out on `Provider.LeftOut`. Resolution copies it to `Needed.LeftOut` (also through `boundNeed`).
- **Provider on the consumer's machine:** `servedOnThisMachine` fills them after settling.
- `plan` prints each left-out key under the consumer's `needs` line, and on the provider's machine (`Resolution.ServedLeftOut`), where the remedy is.
- `CheckServes` refuses a served `${bound:…}` that names a requirement the module does not contribute to, a fact other than its names, a local name it does not contribute under, or a `|default:`.
## Behaviour for what exists
No manifest in the catalogue serves a `${bound:…}` today, so nothing changes until the forge declares one (mesh-catalog PR for issue 624, to merge after this is delivered). The one new store read is `PublicDomainOf` per node in `theRestOfTheMesh`.
## Tests
- `internal/catalogue/served_own_names_test.go`: filled from the composition; left out and said without a public domain, with the manifest's own map untouched; a consumer beside the provider gets the name in its binding file with no placeholder left; a need carries the provider's left-out lines; the module check refuses the four wrong shapes. They do not build on main (`ServedOwnNames` does not exist).
- `cmd/mesh-controller/served_own_names_test.go` (store-backed): a consumer on another machine is served `https://git.example.test/api/packages/novox/npm/`; with the provider's public domain cleared, the key is left out and the need says why. With plan.go reverted to main it fails: the consumer is handed the literal `https://${bound:route:name-web}/…`.
- `go test ./internal/catalogue` and `./cmd/mesh-controller` (against postgres 17) pass; gofmt and vet clean.
Deliverynovox/mesh-controller@7a0c219f961e — delivered since 2026-10-13T19:24:55Z
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
Machines
mesh-controller on novox: passed — healthy 3 times over 3m37s
mesh-controller on the rest running it: sent
build-agent on ace: passed — healthy 1 times over 32s
build-agent on the rest running it: sent
Transitions
2026-10-13 18:32 (new) → proposed (announced): novox/mesh-controller#306's head announced
2026-10-13 19:10 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-13 19:10 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-13 19:17 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-13 19:17 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-13 19:24 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@7a0c219f961e` — **delivered** since 2026-10-13T19:24:55Z
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
**Machines**
- mesh-controller on novox: passed — healthy 3 times over 3m37s
- mesh-controller on the rest running it: sent
- build-agent on ace: passed — healthy 1 times over 32s
- build-agent on the rest running it: sent
**Transitions**
- 2026-10-13 18:32 (new) → proposed (announced): novox/mesh-controller#306's head announced
- 2026-10-13 19:10 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-13 19:10 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-13 19:17 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-13 19:17 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-13 19:24 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Merge check at 205f1541
Judged: head 205f1541efa5 merged into trunk 6f1a05366c1d; read beside it: mesh-catalog 4d15a155e634, mesh-controller-main 6f1a05366c1d, mesh-host 0e92ef3d1b21, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go
Run by the build seat on novox as build-1791903029690960899 (builds --log build-1791903029690960899).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T14:42:41Z 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-13T14:42:41Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go and internal/catalogue/served_own_names_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.156s
ok github.com/novox/mesh-controller/cmd/mesh-controller 243.670s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.029s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.020s
ok github.com/novox/mesh-controller/examples/route-proxy 1.138s
ok github.com/novox/mesh-controller/internal/artifacts 1.067s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.089s
ok github.com/novox/mesh-controller/internal/builder 79.024s
ok github.com/novox/mesh-controller/internal/catalogue 10.381s
ok github.com/novox/mesh-controller/internal/conditions 2.731s
ok github.com/novox/mesh-controller/internal/envfile 1.034s
ok github.com/novox/mesh-controller/internal/facts 1.037s
ok github.com/novox/mesh-controller/internal/identity 6.534s
ok github.com/novox/mesh-controller/internal/inventory 60.619s
ok github.com/novox/mesh-controller/internal/lease 17.738s
ok github.com/novox/mesh-controller/internal/licences 5.226s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.010s
ok github.com/novox/mesh-controller/internal/link 75.580s
ok github.com/novox/mesh-controller/internal/lint 2.823s
ok github.com/novox/mesh-controller/internal/outward 1.036s
ok github.com/novox/mesh-controller/internal/overlay 1.026s
ok github.com/novox/mesh-controller/internal/secrets 1.551s
ok github.com/novox/mesh-controller/internal/store 3.729s
ok github.com/novox/mesh-controller/internal/testbus 1.231s
ok github.com/novox/mesh-controller/internal/token 1.018s
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.34s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.29s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.23s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.98s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.27s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.18s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.38s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.67s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.35s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.22s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.25s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.34s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.18s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.39s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.28s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.27s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.32s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.23s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.20s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.10s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.58s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.34s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.13s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.12s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.09s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.12s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.13s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.13s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
**Merge check** at `205f1541`
Judged: head `205f1541efa5` merged into trunk `6f1a05366c1d`; read beside it: mesh-catalog `4d15a155e634`, mesh-controller-main `6f1a05366c1d`, mesh-host `0e92ef3d1b21`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go
Run by the build seat on novox as `build-1791903029690960899` (`builds --log build-1791903029690960899`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T14:42:41Z 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-13T14:42:41Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go and internal/catalogue/served_own_names_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.156s
ok github.com/novox/mesh-controller/cmd/mesh-controller 243.670s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.029s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.020s
ok github.com/novox/mesh-controller/examples/route-proxy 1.138s
ok github.com/novox/mesh-controller/internal/artifacts 1.067s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 5.089s
ok github.com/novox/mesh-controller/internal/builder 79.024s
ok github.com/novox/mesh-controller/internal/catalogue 10.381s
ok github.com/novox/mesh-controller/internal/conditions 2.731s
ok github.com/novox/mesh-controller/internal/envfile 1.034s
ok github.com/novox/mesh-controller/internal/facts 1.037s
ok github.com/novox/mesh-controller/internal/identity 6.534s
ok github.com/novox/mesh-controller/internal/inventory 60.619s
ok github.com/novox/mesh-controller/internal/lease 17.738s
ok github.com/novox/mesh-controller/internal/licences 5.226s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.010s
ok github.com/novox/mesh-controller/internal/link 75.580s
ok github.com/novox/mesh-controller/internal/lint 2.823s
ok github.com/novox/mesh-controller/internal/outward 1.036s
ok github.com/novox/mesh-controller/internal/overlay 1.026s
ok github.com/novox/mesh-controller/internal/secrets 1.551s
ok github.com/novox/mesh-controller/internal/store 3.729s
ok github.com/novox/mesh-controller/internal/testbus 1.231s
ok github.com/novox/mesh-controller/internal/token 1.018s
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.34s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.29s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.23s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.98s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.27s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.18s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.38s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.67s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.32s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.26s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.35s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.24s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.22s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.25s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.34s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.30s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.18s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.39s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.28s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.32s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.27s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.32s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.23s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.16s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.20s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.10s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.58s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.34s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.12s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.13s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.12s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.09s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.09s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.12s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.13s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.13s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.08s)
```
Merge check at 52df577d
Judged: head 52df577d8d49 merged into trunk 6f1a05366c1d; read beside it: mesh-catalog 4d15a155e634, mesh-controller-main 6f1a05366c1d, mesh-host 0e92ef3d1b21, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go
Run by the build seat on shanks as build-1791903277759374821 (builds --log build-1791903277759374821).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T14:52:41Z 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-13T14:52:41Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go and internal/catalogue/served_own_names_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.046s
ok github.com/novox/mesh-controller/cmd/mesh-controller 177.373s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.025s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.053s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.034s
ok github.com/novox/mesh-controller/examples/route-proxy 1.197s
ok github.com/novox/mesh-controller/internal/artifacts 1.086s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.446s
ok github.com/novox/mesh-controller/internal/builder 41.335s
ok github.com/novox/mesh-controller/internal/catalogue 8.349s
ok github.com/novox/mesh-controller/internal/conditions 2.675s
ok github.com/novox/mesh-controller/internal/envfile 1.060s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 5.043s
ok github.com/novox/mesh-controller/internal/inventory 35.660s
ok github.com/novox/mesh-controller/internal/lease 17.732s
ok github.com/novox/mesh-controller/internal/licences 4.111s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.054s
ok github.com/novox/mesh-controller/internal/link 59.211s
ok github.com/novox/mesh-controller/internal/lint 2.513s
ok github.com/novox/mesh-controller/internal/outward 1.089s
ok github.com/novox/mesh-controller/internal/overlay 1.078s
ok github.com/novox/mesh-controller/internal/secrets 1.544s
ok github.com/novox/mesh-controller/internal/store 3.505s
ok github.com/novox/mesh-controller/internal/testbus 1.257s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.23s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.22s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.20s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.17s)
./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.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.21s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.26s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.20s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.21s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.31s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.28s)
./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.39s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.30s)
./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.18s)
./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.30s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.09s)
./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)
**Merge check** at `52df577d`
Judged: head `52df577d8d49` merged into trunk `6f1a05366c1d`; read beside it: mesh-catalog `4d15a155e634`, mesh-controller-main `6f1a05366c1d`, mesh-host `0e92ef3d1b21`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go
Run by the build seat on shanks as `build-1791903277759374821` (`builds --log build-1791903277759374821`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T14:52:41Z 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-13T14:52:41Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go and internal/catalogue/served_own_names_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.046s
ok github.com/novox/mesh-controller/cmd/mesh-controller 177.373s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.025s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.053s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.034s
ok github.com/novox/mesh-controller/examples/route-proxy 1.197s
ok github.com/novox/mesh-controller/internal/artifacts 1.086s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.446s
ok github.com/novox/mesh-controller/internal/builder 41.335s
ok github.com/novox/mesh-controller/internal/catalogue 8.349s
ok github.com/novox/mesh-controller/internal/conditions 2.675s
ok github.com/novox/mesh-controller/internal/envfile 1.060s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 5.043s
ok github.com/novox/mesh-controller/internal/inventory 35.660s
ok github.com/novox/mesh-controller/internal/lease 17.732s
ok github.com/novox/mesh-controller/internal/licences 4.111s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.054s
ok github.com/novox/mesh-controller/internal/link 59.211s
ok github.com/novox/mesh-controller/internal/lint 2.513s
ok github.com/novox/mesh-controller/internal/outward 1.089s
ok github.com/novox/mesh-controller/internal/overlay 1.078s
ok github.com/novox/mesh-controller/internal/secrets 1.544s
ok github.com/novox/mesh-controller/internal/store 3.505s
ok github.com/novox/mesh-controller/internal/testbus 1.257s
ok github.com/novox/mesh-controller/internal/token 1.015s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.23s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.22s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.20s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.17s)
./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.27s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.25s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.21s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.21s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.27s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.22s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.26s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.20s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.21s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.21s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.23s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.31s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.28s)
./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.39s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.30s)
./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.18s)
./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.30s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.09s)
./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)
```
Verdict: changes needed at 52df577d. There is one blocker: the new store test is not listed in testdata/store-tests. The logic itself is sound.
Independent review (issue 624, ADR 0346).
BLOCKER: testdata/store-tests (issue 459). cmd/mesh-controller/served_own_names_test.go:12 TestAProviderElsewhereServesItsOwnComposedName uses aMesh, so it needs the store, and it skips without MESH_TEST_POSTGRES. It is not in testdata/store-tests, so the repo check would pass a skip unseen. Add ./cmd/mesh-controller TestAProviderElsewhereServesItsOwnComposedName. The branch also predates main's #307, which edits testdata/store-tests. It merges without conflict, but rebase it so the list you add to is main's.
What holds:
No leak. ServedOwnNames (served_own_names.go:63-112) fills only from own[to], built from r.ownNames(m, to, ...) for the requirements m itself contributes to. ownNames keeps only name and internal-name, composed from m's label and the machine's domains. A token naming another requirement, a fact other than a name, or carrying a default is left out, never filled. That includes a token that arrives through a setting after Settle. checkServedOwnNames (:143-163) refuses those shapes when the definition is read. I checked that main accepted them and passed the literal placeholder through. The provider's contributions file carries no own name (derivedFor test).
Other machine: plan.go:292-300 reads PublicDomainOf per machine. A NULL or empty domain composes nothing, so the key is left out, with the reason under the consumer's need (resolve.go:591, bound.go:130) and on the provider's machine (plan.go:1451, ServedLeftOut). The store test covers both cases.
No current consumer changes. No catalogue manifest on main serves a ${bound:...}, so ServedOwnNames returns the map untouched (asking is empty). build-agent (cmd/mesh-builder/main.go:461-486, 588-606) unmarshals serves into map[string]any and reads only scheme, port and npm-path.
The new tests fail on main: they do not compile there (ServedOwnNames, LeftOut), and a probe shows main parses the bad shapes and serves the raw placeholder.
Tests, niced against a throwaway postgres 18: gofmt is clean, go vet is clean, and go test ./... passes, 26 of 26 packages (without -race). The store test PASSes against the store.
Non-blocking:
plan.go:325. inv.SettingsFor is read a second time for every offered provision, although servedOnNode (plan.go:1594, via portsGivenOn) already read the same layers. That is one extra store query per offer, and a new error path that fails the whole walk. Returning the layers from servedOnNode would avoid both.
plan.go:294. A PublicDomainOf error fails the whole World, while ProfileOf beside it ignores its error. A machine deleted between the node list and this read (ErrNoSuchNode) would fail every machine's plan. Consider skipping it, as an empty domain is.
declaration.go:1775 servingAt. On the walk path the provider is resolved with World{Unchecked: true}, so a route provided from another machine is not among its Needs, and internal-name falls back to the provider's own At. The provider's own plan uses the route provider's At. So internal-name* can differ between the two paths when the route is answered from another machine. The public name is not affected, and neither is gitea.
Only top-level string values are filled. A token nested in a list or map stays literal. It cannot leak, but it is not said either.
Statuses read at review time: mesh/merge-gate and mesh/repo-check are pending, "out of date: judged against trunk 6f1a05366c, the trunk is now 8ddf8b700558". main is now at 9f3aa91. mesh/delivery is pending ("checking"). After the fix, recheck and merge on green. Merge order: hq #345 (any time), then this, then, once its walk is done, mesh-catalog #280.
Verdict: changes needed at 52df577d. There is one blocker: the new store test is not listed in testdata/store-tests. The logic itself is sound.
Independent review (issue 624, ADR 0346).
BLOCKER: testdata/store-tests (issue 459). cmd/mesh-controller/served_own_names_test.go:12 TestAProviderElsewhereServesItsOwnComposedName uses aMesh, so it needs the store, and it skips without MESH_TEST_POSTGRES. It is not in testdata/store-tests, so the repo check would pass a skip unseen. Add `./cmd/mesh-controller TestAProviderElsewhereServesItsOwnComposedName`. The branch also predates main's #307, which edits testdata/store-tests. It merges without conflict, but rebase it so the list you add to is main's.
What holds:
1. No leak. ServedOwnNames (served_own_names.go:63-112) fills only from own[to], built from r.ownNames(m, to, ...) for the requirements m itself contributes to. ownNames keeps only name and internal-name, composed from m's label and the machine's domains. A token naming another requirement, a fact other than a name, or carrying a default is left out, never filled. That includes a token that arrives through a setting after Settle. checkServedOwnNames (:143-163) refuses those shapes when the definition is read. I checked that main accepted them and passed the literal placeholder through. The provider's contributions file carries no own name (derivedFor test).
2. Other machine: plan.go:292-300 reads PublicDomainOf per machine. A NULL or empty domain composes nothing, so the key is left out, with the reason under the consumer's need (resolve.go:591, bound.go:130) and on the provider's machine (plan.go:1451, ServedLeftOut). The store test covers both cases.
3. No current consumer changes. No catalogue manifest on main serves a ${bound:...}, so ServedOwnNames returns the map untouched (asking is empty). build-agent (cmd/mesh-builder/main.go:461-486, 588-606) unmarshals serves into map[string]any and reads only scheme, port and npm-path.
5. The new tests fail on main: they do not compile there (ServedOwnNames, LeftOut), and a probe shows main parses the bad shapes and serves the raw placeholder.
Tests, niced against a throwaway postgres 18: gofmt is clean, go vet is clean, and go test ./... passes, 26 of 26 packages (without -race). The store test PASSes against the store.
Non-blocking:
- plan.go:325. inv.SettingsFor is read a second time for every offered provision, although servedOnNode (plan.go:1594, via portsGivenOn) already read the same layers. That is one extra store query per offer, and a new error path that fails the whole walk. Returning the layers from servedOnNode would avoid both.
- plan.go:294. A PublicDomainOf error fails the whole World, while ProfileOf beside it ignores its error. A machine deleted between the node list and this read (ErrNoSuchNode) would fail every machine's plan. Consider skipping it, as an empty domain is.
- declaration.go:1775 servingAt. On the walk path the provider is resolved with World{Unchecked: true}, so a route provided from another machine is not among its Needs, and internal-name falls back to the provider's own At. The provider's own plan uses the route provider's At. So internal-name* can differ between the two paths when the route is answered from another machine. The public name is not affected, and neither is gitea.
- Only top-level string values are filled. A token nested in a list or map stays literal. It cannot leak, but it is not said either.
Statuses read at review time: mesh/merge-gate and mesh/repo-check are pending, "out of date: judged against trunk 6f1a05366c1d, the trunk is now 8ddf8b700558". main is now at 9f3aa91. mesh/delivery is pending ("checking"). After the fix, recheck and merge on green. Merge order: hq #345 (any time), then this, then, once its walk is done, mesh-catalog #280.
The forge writes every package tarball at its public name, and its
consumers had no source for that name but a second copy kept by hand,
though the mesh composes it for the forge's route. A served value may now
name the provider's own names; a name its machine does not compose leaves
the key out, and the plan says so.
mesh/merge-gate head 7a0c219f961e merged into trunk 332fbaa9b175 — pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every …
Merge check at 7a0c219f
Judged: head 7a0c219f961e merged into trunk 9f3aa91e812b; read beside it: mesh-catalog 9c166398f204, mesh-controller-main 9f3aa91e812b, mesh-host 0e92ef3d1b21, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go, testdata/store-tests
Run by the build seat on ace as build-1791916376753448931 (builds --log build-1791916376753448931).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T17:37:27Z 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-13T17:37:27Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_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.046s
ok github.com/novox/mesh-controller/cmd/mesh-controller 160.452s
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.014s
ok github.com/novox/mesh-controller/examples/route-proxy 1.115s
ok github.com/novox/mesh-controller/internal/artifacts 1.040s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.062s
ok github.com/novox/mesh-controller/internal/builder 39.163s
ok github.com/novox/mesh-controller/internal/catalogue 7.925s
ok github.com/novox/mesh-controller/internal/conditions 2.591s
ok github.com/novox/mesh-controller/internal/envfile 1.056s
ok github.com/novox/mesh-controller/internal/facts 1.059s
ok github.com/novox/mesh-controller/internal/identity 4.499s
ok github.com/novox/mesh-controller/internal/inventory 33.546s
ok github.com/novox/mesh-controller/internal/lease 17.776s
ok github.com/novox/mesh-controller/internal/licences 3.740s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.107s
ok github.com/novox/mesh-controller/internal/link 58.350s
ok github.com/novox/mesh-controller/internal/lint 2.337s
ok github.com/novox/mesh-controller/internal/outward 1.074s
ok github.com/novox/mesh-controller/internal/overlay 1.124s
ok github.com/novox/mesh-controller/internal/secrets 1.483s
ok github.com/novox/mesh-controller/internal/store 3.454s
ok github.com/novox/mesh-controller/internal/testbus 1.239s
ok github.com/novox/mesh-controller/internal/token 1.019s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.20s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.19s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.16s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.96s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.22s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.19s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.25s)
./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.19s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.19s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.19s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.28s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.15s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.14s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.15s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.22s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.28s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.23s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.18s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.17s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.15s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.18s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.44s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.26s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.19s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.18s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.51s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.16s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.16s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.22s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.07s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.07s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.06s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.06s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.08s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.07s)
Out of date when it landed: out of date: judged against trunk 9f3aa91e81, the trunk is now 332fbaa9b175; judged again on a recheck or when it is merged
**Merge check** at `7a0c219f`
Judged: head `7a0c219f961e` merged into trunk `9f3aa91e812b`; read beside it: mesh-catalog `9c166398f204`, mesh-controller-main `9f3aa91e812b`, mesh-host `0e92ef3d1b21`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go, testdata/store-tests
Run by the build seat on ace as `build-1791916376753448931` (`builds --log build-1791916376753448931`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T17:37:27Z 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-13T17:37:27Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_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.046s
ok github.com/novox/mesh-controller/cmd/mesh-controller 160.452s
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.014s
ok github.com/novox/mesh-controller/examples/route-proxy 1.115s
ok github.com/novox/mesh-controller/internal/artifacts 1.040s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 4.062s
ok github.com/novox/mesh-controller/internal/builder 39.163s
ok github.com/novox/mesh-controller/internal/catalogue 7.925s
ok github.com/novox/mesh-controller/internal/conditions 2.591s
ok github.com/novox/mesh-controller/internal/envfile 1.056s
ok github.com/novox/mesh-controller/internal/facts 1.059s
ok github.com/novox/mesh-controller/internal/identity 4.499s
ok github.com/novox/mesh-controller/internal/inventory 33.546s
ok github.com/novox/mesh-controller/internal/lease 17.776s
ok github.com/novox/mesh-controller/internal/licences 3.740s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.107s
ok github.com/novox/mesh-controller/internal/link 58.350s
ok github.com/novox/mesh-controller/internal/lint 2.337s
ok github.com/novox/mesh-controller/internal/outward 1.074s
ok github.com/novox/mesh-controller/internal/overlay 1.124s
ok github.com/novox/mesh-controller/internal/secrets 1.483s
ok github.com/novox/mesh-controller/internal/store 3.454s
ok github.com/novox/mesh-controller/internal/testbus 1.239s
ok github.com/novox/mesh-controller/internal/token 1.019s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.21s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.20s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.20s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.19s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.16s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.96s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.22s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.23s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.19s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.19s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.25s)
./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.19s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.19s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.19s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.22s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.28s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.15s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.14s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.15s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.28s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.22s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.28s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.23s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.18s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.19s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.17s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.15s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.18s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.07s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.44s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.26s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.19s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.19s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.17s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.18s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.51s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.16s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.16s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.22s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.07s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.07s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.09s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.06s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.06s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.06s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.08s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.08s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.07s)
```
**Out of date when it landed**: out of date: judged against trunk 9f3aa91e812b, the trunk is now 332fbaa9b175; judged again on a recheck or when it is merged
Verdict: approve at 7a0c219f. It merges after a recheck against main 332fbaa comes back green.
Re-review after review 228.
The blocker is answered. testdata/store-tests now lists ./cmd/mesh-controller TestAProviderElsewhereServesItsOwnComposedName, and the test PASSes against a throwaway store.
plan.go:294 is fixed. A public domain that cannot be read is now ignored, as the profile read is, so that machine composes no public name and no other machine's plan fails.
plan.go:325 is fixed. servedOnNode now returns the layers it already read, and the second SettingsFor read is gone. The other caller, network.go:687, was updated.
Nested values are fixed. CheckServes refuses a ${bound:...} inside a served list or object (nestedOwnNames), and a new test covers it. No catalogue manifest on main serves one nested, so nothing current is refused.
Not changed, and acceptable: the internal-name difference on the walk path when a route is answered from another machine (declaration.go:1775). It does not affect the public name.
Tests, niced against a throwaway postgres: gofmt is clean, go vet is clean, and go test ./... passes 26 of 26 packages. The branch merges into main 332fbaa without conflict.
Statuses read now: mesh/merge-gate and mesh/repo-check are pending, "out of date: judged against trunk 9f3aa91e81, the trunk is now 332fbaa9b175". mesh/delivery is pending ("checking"). Ask mesh-delivery.recheck and merge only on the new green verdict.
Verdict: approve at 7a0c219f. It merges after a recheck against main 332fbaa comes back green.
Re-review after review 228.
- The blocker is answered. testdata/store-tests now lists `./cmd/mesh-controller TestAProviderElsewhereServesItsOwnComposedName`, and the test PASSes against a throwaway store.
- plan.go:294 is fixed. A public domain that cannot be read is now ignored, as the profile read is, so that machine composes no public name and no other machine's plan fails.
- plan.go:325 is fixed. servedOnNode now returns the layers it already read, and the second SettingsFor read is gone. The other caller, network.go:687, was updated.
- Nested values are fixed. CheckServes refuses a ${bound:...} inside a served list or object (nestedOwnNames), and a new test covers it. No catalogue manifest on main serves one nested, so nothing current is refused.
- Not changed, and acceptable: the internal-name difference on the walk path when a route is answered from another machine (declaration.go:1775). It does not affect the public name.
Tests, niced against a throwaway postgres: gofmt is clean, go vet is clean, and go test ./... passes 26 of 26 packages. The branch merges into main 332fbaa without conflict.
Statuses read now: mesh/merge-gate and mesh/repo-check are pending, "out of date: judged against trunk 9f3aa91e812b, the trunk is now 332fbaa9b175". mesh/delivery is pending ("checking"). Ask mesh-delivery.recheck and merge only on the new green verdict.
Merge check at 7a0c219f
Judged: head 7a0c219f961e merged into trunk 332fbaa9b175; read beside it: mesh-catalog 9c166398f204, mesh-controller-main 332fbaa9b175, mesh-host 0e92ef3d1b21, mesh-tools 954e1a53eef9
mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
mesh/repo-check: PASS — its merge-check.sh passed
Delivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
tier 0: mesh-controller
tier 1: build-agent
ace: receives build-agent
g14: receives build-agent
novox: receives mesh-controller, build-agent
shanks: receives build-agent
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go, testdata/store-tests
Run by the build seat on novox as build-1791918082419149295 (builds --log build-1791918082419149295).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T18:48:16Z 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-13T18:48:16Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_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.051s
ok github.com/novox/mesh-controller/cmd/mesh-controller 252.534s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.069s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/route-proxy 1.213s
ok github.com/novox/mesh-controller/internal/artifacts 1.132s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.622s
ok github.com/novox/mesh-controller/internal/builder 68.319s
ok github.com/novox/mesh-controller/internal/catalogue 15.491s
ok github.com/novox/mesh-controller/internal/conditions 3.376s
ok github.com/novox/mesh-controller/internal/envfile 1.033s
ok github.com/novox/mesh-controller/internal/facts 1.049s
ok github.com/novox/mesh-controller/internal/identity 8.865s
ok github.com/novox/mesh-controller/internal/inventory 56.558s
ok github.com/novox/mesh-controller/internal/lease 17.840s
ok github.com/novox/mesh-controller/internal/licences 7.048s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.025s
ok github.com/novox/mesh-controller/internal/link 69.155s
ok github.com/novox/mesh-controller/internal/lint 3.825s
ok github.com/novox/mesh-controller/internal/outward 1.071s
ok github.com/novox/mesh-controller/internal/overlay 1.055s
ok github.com/novox/mesh-controller/internal/secrets 1.822s
ok github.com/novox/mesh-controller/internal/store 4.430s
ok github.com/novox/mesh-controller/internal/testbus 1.331s
ok github.com/novox/mesh-controller/internal/token 1.045s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.30s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.29s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.36s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.22s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.08s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.28s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.34s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.34s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.50s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.39s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.43s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.23s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.42s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.35s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.36s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.20s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.19s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.18s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.38s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.43s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.88s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.27s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.34s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.30s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.21s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.66s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.46s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.28s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.31s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.69s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.44s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.41s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.15s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.09s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.13s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.11s)
**Merge check** at `7a0c219f`
Judged: head `7a0c219f961e` merged into trunk `332fbaa9b175`; read beside it: mesh-catalog `9c166398f204`, mesh-controller-main `332fbaa9b175`, mesh-host `0e92ef3d1b21`, mesh-tools `954e1a53eef9`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed
**Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- ace: receives build-agent
- g14: receives build-agent
- novox: receives mesh-controller, build-agent
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before build-agent is judged on its first machine
- read by no module's build: cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_test.go, testdata/store-tests
Run by the build seat on novox as `build-1791918082419149295` (`builds --log build-1791918082419149295`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 58 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-13T18:48:16Z 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-13T18:48:16Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
notes:
- cmd/mesh-controller/served_own_names_test.go, internal/catalogue/served_own_names_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.051s
ok github.com/novox/mesh-controller/cmd/mesh-controller 252.534s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.069s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/route-proxy 1.213s
ok github.com/novox/mesh-controller/internal/artifacts 1.132s
? github.com/novox/mesh-controller/internal/beside [no test files]
ok github.com/novox/mesh-controller/internal/broker 6.622s
ok github.com/novox/mesh-controller/internal/builder 68.319s
ok github.com/novox/mesh-controller/internal/catalogue 15.491s
ok github.com/novox/mesh-controller/internal/conditions 3.376s
ok github.com/novox/mesh-controller/internal/envfile 1.033s
ok github.com/novox/mesh-controller/internal/facts 1.049s
ok github.com/novox/mesh-controller/internal/identity 8.865s
ok github.com/novox/mesh-controller/internal/inventory 56.558s
ok github.com/novox/mesh-controller/internal/lease 17.840s
ok github.com/novox/mesh-controller/internal/licences 7.048s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.025s
ok github.com/novox/mesh-controller/internal/link 69.155s
ok github.com/novox/mesh-controller/internal/lint 3.825s
ok github.com/novox/mesh-controller/internal/outward 1.071s
ok github.com/novox/mesh-controller/internal/overlay 1.055s
ok github.com/novox/mesh-controller/internal/secrets 1.822s
ok github.com/novox/mesh-controller/internal/store 4.430s
ok github.com/novox/mesh-controller/internal/testbus 1.331s
ok github.com/novox/mesh-controller/internal/token 1.045s
store tests, each run against the store:
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.26s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.30s)
./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.29s)
./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.36s)
./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.22s)
./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (2.08s)
./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.28s)
./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.34s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.33s)
./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.34s)
./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.37s)
./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.50s)
./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.39s)
./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.43s)
./cmd/mesh-controller --- PASS: TestReplay237 (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.22s)
./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.23s)
./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.23s)
./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.42s)
./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.35s)
./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.36s)
./cmd/mesh-controller --- PASS: TestReplay201 (0.20s)
./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.19s)
./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.18s)
./cmd/mesh-controller --- PASS: TestReplay401 (0.38s)
./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.43s)
./cmd/mesh-controller --- PASS: TestPlanAndNodeListAnOptionalRequirementLeftUnbound (0.88s)
./cmd/mesh-controller --- PASS: TestReplay340 (0.27s)
./cmd/mesh-controller --- PASS: TestOnlyATrustedFilesNamedKeyIsRefusedThroughAVerb (0.34s)
./cmd/mesh-controller --- PASS: TestReplay349 (0.30s)
./cmd/mesh-controller --- PASS: TestReplay348AFaultFromBeforeTheSendFailsNoGate (0.19s)
./cmd/mesh-controller --- PASS: TestReplay239AModuleNameIsNotTakenOverByAnotherRepository (0.17s)
./cmd/mesh-controller --- PASS: TestAWalkThatMovedNothingSaysWhichModulesMatchedWhatRuns (0.21s)
./cmd/mesh-controller --- PASS: TestReplay614ANewSDKPlansTheToolchainAndThenItsBundles (0.08s)
./cmd/mesh-controller --- PASS: TestOneAcceptForAProviderIsPlacedForEveryConsumer (0.66s)
./cmd/mesh-controller --- PASS: TestReplay164 (0.46s)
./cmd/mesh-controller --- PASS: TestAnApprovedLayerOpensTheWalkThatSendsIt (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsOneMachineAtATimeEachJudged (0.28s)
./cmd/mesh-controller --- PASS: TestAFailedSettingsWalkStopsAndHoldsNothingBack (0.31s)
./cmd/mesh-controller --- PASS: TestASettingsWalkSendsTheLayerAloneEveryBuildKept (0.22s)
./cmd/mesh-controller --- PASS: TestASettingsWalkStopsBeforeADataMoveAndPassesOverAMachineAway (0.69s)
./cmd/mesh-controller --- PASS: TestACrossingSendSupersedesASettingsGate (0.20s)
./cmd/mesh-controller --- PASS: TestASettingsWalkFailsOnARefusalThatCannotClear (0.44s)
./cmd/mesh-controller --- PASS: TestAProviderElsewhereServesItsOwnComposedName (0.41s)
./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.10s)
./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.10s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.15s)
./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.10s)
./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.08s)
./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.09s)
./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.08s)
./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
./internal/inventory --- PASS: TestAStoredBuildWithASilentMergeableFileIsStillReadAndComposed (0.08s)
./internal/inventory --- PASS: TestACredentialIssuedOutsideIsNeverMade (0.10s)
./internal/inventory --- PASS: TestOneAcceptForAProviderIsSealedToEveryConsumer (0.13s)
./internal/inventory --- PASS: TestASharedOwnSecretIssuedOutsideIsNeverMade (0.11s)
```
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.
For issue 624 (the lab's runs stop at setup), decision ADR 0346 (a provider's served values may name the provider's own composed route names; proposed in the knowledge base), design 27 (hq #345).
What
internal/catalogue/served_own_names.go: a string in a provider'sservesblock may say${bound:<requirement>:<name>}for a requirement the provider contributes to:name,internal-name,name-<local>,internal-name-<local>, the names its own files read (withOwnNames).Resolution.ServedOwnNamesfills them fromownNames, the one composition the provider's proxy also receives. A name the machine does not compose (no public domain, or the endpoint not reached publicly) leaves the key out, and says so.theRestOfTheMeshnow carries each machine's public domain on its node (it had none, so a provider composed no public name there) and fills the served values per provider, putting what was left out onProvider.LeftOut. Resolution copies it toNeeded.LeftOut(also throughboundNeed).servedOnThisMachinefills them after settling.planprints each left-out key under the consumer'sneedsline, and on the provider's machine (Resolution.ServedLeftOut), where the remedy is.CheckServesrefuses a served${bound:…}that names a requirement the module does not contribute to, a fact other than its names, a local name it does not contribute under, or a|default:.Behaviour for what exists
No manifest in the catalogue serves a
${bound:…}today, so nothing changes until the forge declares one (mesh-catalog PR for issue 624, to merge after this is delivered). The one new store read isPublicDomainOfper node intheRestOfTheMesh.Tests
internal/catalogue/served_own_names_test.go: filled from the composition; left out and said without a public domain, with the manifest's own map untouched; a consumer beside the provider gets the name in its binding file with no placeholder left; a need carries the provider's left-out lines; the module check refuses the four wrong shapes. They do not build on main (ServedOwnNamesdoes not exist).cmd/mesh-controller/served_own_names_test.go(store-backed): a consumer on another machine is servedhttps://git.example.test/api/packages/novox/npm/; with the provider's public domain cleared, the key is left out and the need says why. With plan.go reverted to main it fails: the consumer is handed the literalhttps://${bound:route:name-web}/….go test ./internal/catalogueand./cmd/mesh-controller(against postgres 17) pass; gofmt and vet clean.Delivery
novox/mesh-controller@7a0c219f961e— delivered since 2026-10-13T19:24:55ZDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
205f1541Judged: head
205f1541efa5merged into trunk6f1a05366c1d; read beside it: mesh-catalog4d15a155e634, mesh-controller-main6f1a05366c1d, mesh-host0e92ef3d1b21, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on novox as
build-1791903029690960899(builds --log build-1791903029690960899).Merge check at
52df577dJudged: head
52df577d8d49merged into trunk6f1a05366c1d; read beside it: mesh-catalog4d15a155e634, mesh-controller-main6f1a05366c1d, mesh-host0e92ef3d1b21, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1791903277759374821(builds --log build-1791903277759374821).Verdict: changes needed at
52df577d. There is one blocker: the new store test is not listed in testdata/store-tests. The logic itself is sound.Independent review (issue 624, ADR 0346).
BLOCKER: testdata/store-tests (issue 459). cmd/mesh-controller/served_own_names_test.go:12 TestAProviderElsewhereServesItsOwnComposedName uses aMesh, so it needs the store, and it skips without MESH_TEST_POSTGRES. It is not in testdata/store-tests, so the repo check would pass a skip unseen. Add
./cmd/mesh-controller TestAProviderElsewhereServesItsOwnComposedName. The branch also predates main's #307, which edits testdata/store-tests. It merges without conflict, but rebase it so the list you add to is main's.What holds:
Tests, niced against a throwaway postgres 18: gofmt is clean, go vet is clean, and go test ./... passes, 26 of 26 packages (without -race). The store test PASSes against the store.
Non-blocking:
Statuses read at review time: mesh/merge-gate and mesh/repo-check are pending, "out of date: judged against trunk
6f1a05366c, the trunk is now 8ddf8b700558". main is now at9f3aa91. mesh/delivery is pending ("checking"). After the fix, recheck and merge on green. Merge order: hq #345 (any time), then this, then, once its walk is done, mesh-catalog #280.52df577d8dto7a0c219f96Merge check at
7a0c219fJudged: head
7a0c219f961emerged into trunk9f3aa91e812b; read beside it: mesh-catalog9c166398f204, mesh-controller-main9f3aa91e812b, mesh-host0e92ef3d1b21, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791916376753448931(builds --log build-1791916376753448931).Out of date when it landed: out of date: judged against trunk
9f3aa91e81, the trunk is now 332fbaa9b175; judged again on a recheck or when it is mergedVerdict: approve at
7a0c219f. It merges after a recheck against main332fbaacomes back green.Re-review after review 228.
./cmd/mesh-controller TestAProviderElsewhereServesItsOwnComposedName, and the test PASSes against a throwaway store.Tests, niced against a throwaway postgres: gofmt is clean, go vet is clean, and go test ./... passes 26 of 26 packages. The branch merges into main
332fbaawithout conflict.Statuses read now: mesh/merge-gate and mesh/repo-check are pending, "out of date: judged against trunk
9f3aa91e81, the trunk is now 332fbaa9b175". mesh/delivery is pending ("checking"). Ask mesh-delivery.recheck and merge only on the new green verdict.Merge check at
7a0c219fJudged: head
7a0c219f961emerged into trunk332fbaa9b175; read beside it: mesh-catalog9c166398f204, mesh-controller-main332fbaa9b175, mesh-host0e92ef3d1b21, mesh-tools954e1a53eef9mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on novox as
build-1791918082419149295(builds --log build-1791918082419149295).