The controller's check stops waiting on fixtures and fixed intervals (issue 591) #279

Merged
mesh-admin merged 3 commits from fix/591-the-controller-check-runs-in-minutes into main 2026-10-12 22:22:24 +00:00
Contributor

Fixes novox/hq issue 591 (the controller's repository check takes 6-8 minutes).

Measured with go test -race -json ./... against a throwaway PostgreSQL 18 on a 24-core machine (fsync on). The before and after are the same machine and the same load.

package before after
cmd/mesh-controller 172.8 s 106.4 s
internal/inventory 59.3 s 18.9 s
internal/link 58.1 s 49.2 s
internal/builder 31.6 s 32.3 s (unchanged)
whole go test ./... 175 s 108 s
sh merge-check.sh with the store 191 s 116 s
sh merge-check.sh without a store 51 s 50 s

Where the time went, and what changed

  1. Every store test migrated a fresh database (~90 migrations, about 110 ms each, more under load; 278 store tests in cmd/mesh-controller and 223 in internal/inventory). store.CreateMigratedForTest now migrates a template once for each set of migrations, through Migrate itself, and copies each test's database from it. The template is named after a digest of the migrations, built under an advisory lock so packages tested at once share it, and marked a template only once it is whole. Each ForTest (inventory, licences, identity) still runs Migrate on its copy, which finds nothing pending only if the copy's record matches every migration. ForTest went from ~110 ms to ~35 ms.
  2. bcrypt at the default cost under the race detector took ~0.7 s for each bus password. inventory.ForTest sets the cost to bcrypt.MinCost, which is still a real bcrypt hash checked by the same comparison. A new test holds the production cost at bcrypt.DefaultCost.
  3. link.ReadBuildEvents waited out its 2 s fetch on every read when fewer than 500 events were there, so every queue, cancel, clear and kill took 2 s or more. This is a production change: it now reads the number of events the consumer holds and stops once they are read. TestCancelRefusesAnAskInFlight proves that events are still read.
  4. A race-built binary sleeps 1 s before it exits (GORACE atexit_sleep_ms), and many cmd tests run the test binary as a verb's command line. TestMain sets atexit_sleep_ms=0 for the children when GORACE is unset. The children still run under the race detector and still fail on a race they find.
  5. TestTwoControllersOneActs waited out the production lease intervals. The actor now takes renewEvery/poll (zero means the lease's defaults), and the test uses 1 s and 100 ms. The test went from 8.2 s to 2.1 s.
  6. TestAPlanFollowedFromTheStoreAnswersWhenItMoves waited out a 1 s re-read and a 2 s bound. planWaitEvery is now a variable and the test sets it to 50 ms. It keeps the 1.5 s before the plan moves, and its bound is now 300 ms. Parsing a bound given as a bare number of seconds is still covered by TestAWaitIsRefusedWhatItCannotDo's planWaitAsked("tier", "12").

Self-review

  • No test was removed or skipped, and no test was made parallel: ForTest uses t.Setenv, and the cmd tests share globals.
  • The lease test checks the order of events (B waits while A holds it, takes it on handover at a higher epoch, and is told at once when it loses it), and that order does not depend on the interval. B still looks 15 times while A holds the lease.
  • Template copies carry whatever the migrations seeded with now() at the time the template was built, not the time of the test. No test depends on that: the whole suite passed 3 times in a row under -race -count=3 ./... with every package running at once.
  • No test is order-dependent. The template is per process and per digest, and the lease and plan-wait overrides are restored by t.Cleanup. The bcrypt cost is set by every inventory.ForTest call, so it does not depend on which test ran first. Only the new cost test reads it unset, and that test restores it.

Seen but not changed

  • TestNatsWorkSlowerThanTheWindowIsNotHandedOverAgain (9 s) passes with go stillWorking removed, so it does not prove its fault. I think the controller re-ensures its CONTROL consumer at 30 s over the test's 2 s window. Left as it is.
  • internal/conditions TestBorrowedWordsAreLogged fails between 23:30 and 23:39 local time, because the log's timestamp contains 23:3. This is unrelated to this change.
  • Issue 560: the bcrypt change cuts the work before the 2 s token is used (the test went from 4.4 s to 2.3 s), so it fails less often, but the test still runs on the real clock and is not fixed by this change.
Fixes novox/hq issue 591 (the controller's repository check takes 6-8 minutes). Measured with `go test -race -json ./...` against a throwaway PostgreSQL 18 on a 24-core machine (fsync on). The before and after are the same machine and the same load. | package | before | after | |---|---|---| | cmd/mesh-controller | 172.8 s | 106.4 s | | internal/inventory | 59.3 s | 18.9 s | | internal/link | 58.1 s | 49.2 s | | internal/builder | 31.6 s | 32.3 s (unchanged) | | whole `go test ./...` | 175 s | 108 s | | `sh merge-check.sh` with the store | 191 s | 116 s | | `sh merge-check.sh` without a store | 51 s | 50 s | ## Where the time went, and what changed 1. **Every store test migrated a fresh database** (~90 migrations, about 110 ms each, more under load; 278 store tests in cmd/mesh-controller and 223 in internal/inventory). `store.CreateMigratedForTest` now migrates a template once for each set of migrations, through `Migrate` itself, and copies each test's database from it. The template is named after a digest of the migrations, built under an advisory lock so packages tested at once share it, and marked a template only once it is whole. Each `ForTest` (inventory, licences, identity) still runs `Migrate` on its copy, which finds nothing pending only if the copy's record matches every migration. ForTest went from ~110 ms to ~35 ms. 2. **bcrypt at the default cost under the race detector** took ~0.7 s for each bus password. `inventory.ForTest` sets the cost to `bcrypt.MinCost`, which is still a real bcrypt hash checked by the same comparison. A new test holds the production cost at `bcrypt.DefaultCost`. 3. **`link.ReadBuildEvents` waited out its 2 s fetch on every read** when fewer than 500 events were there, so every `queue`, `cancel`, `clear` and `kill` took 2 s or more. This is a production change: it now reads the number of events the consumer holds and stops once they are read. `TestCancelRefusesAnAskInFlight` proves that events are still read. 4. **A race-built binary sleeps 1 s before it exits** (GORACE `atexit_sleep_ms`), and many cmd tests run the test binary as a verb's command line. TestMain sets `atexit_sleep_ms=0` for the children when GORACE is unset. The children still run under the race detector and still fail on a race they find. 5. **TestTwoControllersOneActs** waited out the production lease intervals. The actor now takes `renewEvery`/`poll` (zero means the lease's defaults), and the test uses 1 s and 100 ms. The test went from 8.2 s to 2.1 s. 6. **TestAPlanFollowedFromTheStoreAnswersWhenItMoves** waited out a 1 s re-read and a 2 s bound. `planWaitEvery` is now a variable and the test sets it to 50 ms. It keeps the 1.5 s before the plan moves, and its bound is now 300 ms. Parsing a bound given as a bare number of seconds is still covered by `TestAWaitIsRefusedWhatItCannotDo`'s `planWaitAsked("tier", "12")`. ## Self-review - No test was removed or skipped, and no test was made parallel: `ForTest` uses `t.Setenv`, and the cmd tests share globals. - The lease test checks the order of events (B waits while A holds it, takes it on handover at a higher epoch, and is told at once when it loses it), and that order does not depend on the interval. B still looks 15 times while A holds the lease. - Template copies carry whatever the migrations seeded with `now()` at the time the template was built, not the time of the test. No test depends on that: the whole suite passed 3 times in a row under `-race -count=3 ./...` with every package running at once. - No test is order-dependent. The template is per process and per digest, and the lease and plan-wait overrides are restored by `t.Cleanup`. The bcrypt cost is set by every `inventory.ForTest` call, so it does not depend on which test ran first. Only the new cost test reads it unset, and that test restores it. ## Seen but not changed - `TestNatsWorkSlowerThanTheWindowIsNotHandedOverAgain` (9 s) passes with `go stillWorking` removed, so it does not prove its fault. I think the controller re-ensures its CONTROL consumer at 30 s over the test's 2 s window. Left as it is. - `internal/conditions` `TestBorrowedWordsAreLogged` fails between 23:30 and 23:39 local time, because the log's timestamp contains `23:3`. This is unrelated to this change. - Issue 560: the bcrypt change cuts the work before the 2 s token is used (the test went from 4.4 s to 2.3 s), so it fails less often, but the test still runs on the real clock and is not fixed by this change.
mesh-admin added 2 commits 2026-10-12 21:53:31 +00:00
Running ~90 migrations into a fresh database per store test, and bcrypt at
the default cost under the race detector, were most of the controller's
check (novox/hq issue 591).
Stop the controller's tests waiting out fixed intervals
mesh/merge-gate out of date: judged against trunk e63af0df17f5, the trunk is now 21ac8fd8586d; judged again on a recheck or when it is merged
mesh/repo-check out of date: judged against trunk e63af0df17f5, the trunk is now 21ac8fd8586d; judged again on a recheck or when it is merged
mesh/delivery superseded: a newer head of the same pull request
2819915e8e
Reading the build events waited two seconds on every queue read, the race
detector's exit sleep cost a second per command line a test runs, and the
lease and plan-wait tests waited out production intervals (novox/hq issue 591).
Author
Contributor

Delivery novox/mesh-controller@7f3ff3236149 — delivered since 2026-10-12T22:33:11Z

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
  • 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, route-proxy is judged on its first machine

Machines

  • mesh-controller on novox: passed — healthy 3 times over 4m10s
  • mesh-controller on the rest running it: sent
  • build-agent on ace: passed — healthy 1 times over 23s
  • build-agent on the rest running it: sent
  • route-proxy on ace: passed — healthy 1 times over 25s
  • route-proxy on the rest running it: sent

Transitions

  • 2026-10-12 22:09 (new) → proposed (announced): novox/mesh-controller#279's head announced
  • 2026-10-12 22:21 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-12 22:21 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-12 22:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-12 22:22 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-12 22:33 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@7f3ff3236149` — **delivered** since 2026-10-12T22:33:11Z **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves - 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, route-proxy is judged on its first machine **Machines** - mesh-controller on novox: passed — healthy 3 times over 4m10s - mesh-controller on the rest running it: sent - build-agent on ace: passed — healthy 1 times over 23s - build-agent on the rest running it: sent - route-proxy on ace: passed — healthy 1 times over 25s - route-proxy on the rest running it: sent **Transitions** - 2026-10-12 22:09 (new) → proposed (announced): novox/mesh-controller#279's head announced - 2026-10-12 22:21 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-12 22:21 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-12 22:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-12 22:22 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-12 22:33 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`.
Author
Contributor

Merge check at 2819915e
Judged: head 2819915e8e19 merged into trunk e63af0df17f5; read beside it: mesh-catalog 43a9155d5afe, mesh-controller-main e63af0df17f5, mesh-host 8e95c1d9ed2d, 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/lease_test.go, cmd/mesh-controller/plans_follow_test.go, cmd/mesh-controller/sayable_test.go, internal/inventory/bususers_test.go

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

--- 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-12T21:48:00Z 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-12T21:48:00Z

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/lease_test.go, cmd/mesh-controller/plans_follow_test.go, cmd/mesh-controller/sayable_test.go and internal/inventory/bususers_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.038s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	184.152s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.023s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.055s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.034s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.212s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.097s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	4.589s
ok  	github.com/novox/mesh-controller/internal/builder	55.059s
ok  	github.com/novox/mesh-controller/internal/catalogue	8.657s
ok  	github.com/novox/mesh-controller/internal/conditions	2.664s
ok  	github.com/novox/mesh-controller/internal/envfile	1.065s
ok  	github.com/novox/mesh-controller/internal/facts	1.068s
ok  	github.com/novox/mesh-controller/internal/identity	5.186s
ok  	github.com/novox/mesh-controller/internal/inventory	38.840s
ok  	github.com/novox/mesh-controller/internal/lease	17.724s
ok  	github.com/novox/mesh-controller/internal/licences	4.343s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.056s
ok  	github.com/novox/mesh-controller/internal/link	61.805s
ok  	github.com/novox/mesh-controller/internal/lint	2.471s
ok  	github.com/novox/mesh-controller/internal/outward	1.095s
ok  	github.com/novox/mesh-controller/internal/overlay	1.086s
ok  	github.com/novox/mesh-controller/internal/secrets	1.533s
ok  	github.com/novox/mesh-controller/internal/store	3.505s
ok  	github.com/novox/mesh-controller/internal/testbus	1.267s
ok  	github.com/novox/mesh-controller/internal/token	1.016s
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.22s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.23s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.22s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.21s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.20s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.23s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.25s)
  ./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.21s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.25s)
  ./cmd/mesh-controller --- PASS: TestReplay237 (0.21s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.20s)
  ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.20s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.20s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.23s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.28s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.29s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.16s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.29s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s)
  ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s)
  ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s)
  ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s)
  ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s)
**Merge check** at `2819915e` Judged: head `2819915e8e19` merged into trunk `e63af0df17f5`; read beside it: mesh-catalog `43a9155d5afe`, mesh-controller-main `e63af0df17f5`, mesh-host `8e95c1d9ed2d`, 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/lease_test.go, cmd/mesh-controller/plans_follow_test.go, cmd/mesh-controller/sayable_test.go, internal/inventory/bususers_test.go Run by the build seat on shanks as `build-1791842021912650621` (`builds --log build-1791842021912650621`). ``` --- 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-12T21:48:00Z 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-12T21:48:00Z 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/lease_test.go, cmd/mesh-controller/plans_follow_test.go, cmd/mesh-controller/sayable_test.go and internal/inventory/bususers_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.038s ok github.com/novox/mesh-controller/cmd/mesh-controller 184.152s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.023s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.055s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.034s ok github.com/novox/mesh-controller/examples/route-proxy 1.212s ok github.com/novox/mesh-controller/internal/artifacts 1.097s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 4.589s ok github.com/novox/mesh-controller/internal/builder 55.059s ok github.com/novox/mesh-controller/internal/catalogue 8.657s ok github.com/novox/mesh-controller/internal/conditions 2.664s ok github.com/novox/mesh-controller/internal/envfile 1.065s ok github.com/novox/mesh-controller/internal/facts 1.068s ok github.com/novox/mesh-controller/internal/identity 5.186s ok github.com/novox/mesh-controller/internal/inventory 38.840s ok github.com/novox/mesh-controller/internal/lease 17.724s ok github.com/novox/mesh-controller/internal/licences 4.343s ok github.com/novox/mesh-controller/internal/licences/adapters 1.056s ok github.com/novox/mesh-controller/internal/link 61.805s ok github.com/novox/mesh-controller/internal/lint 2.471s ok github.com/novox/mesh-controller/internal/outward 1.095s ok github.com/novox/mesh-controller/internal/overlay 1.086s ok github.com/novox/mesh-controller/internal/secrets 1.533s ok github.com/novox/mesh-controller/internal/store 3.505s ok github.com/novox/mesh-controller/internal/testbus 1.267s ok github.com/novox/mesh-controller/internal/token 1.016s store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.22s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.23s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.22s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.21s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.20s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.18s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.97s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.23s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.13s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.25s) ./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.21s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedByHandAndRetriedEndsFailedWhenItFailsAgain (0.25s) ./cmd/mesh-controller --- PASS: TestReplay237 (0.21s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeUnresolvedSaysSoOnceInItsAnswer (0.20s) ./cmd/mesh-controller --- PASS: TestAnUnassignThatLeavesItsNodeResolvedSaysNothingOfIt (0.20s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.20s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.23s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.28s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.29s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.16s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.29s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.08s) ./internal/inventory --- PASS: TestAReportIsTheLastSendsAnswerOnlyWhenItIsAboutThatSend (0.09s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedToEveryHolderOnceAndNotAgain (0.10s) ./internal/inventory --- PASS: TestAnIssuedValueIsSealedAgainAfterAKeyChangeOrAnAcceptance (0.08s) ./internal/inventory --- PASS: TestAConditionsLooksAreKeptBesideTheBucket (0.07s) ./internal/inventory --- PASS: TestAPlanIdHoldingAQuoteIsReadAsAPlainId (0.07s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.07s) ```
jschoubben added 1 commit 2026-10-12 22:08:50 +00:00
Give a fast-renewing test lease a serving controller's time to renew, and prove the minted hash's cost
mesh/merge-gate head 7f3ff3236149 merged into trunk 21ac8fd8586d — pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus…
mesh/repo-check head 7f3ff3236149 merged into trunk 21ac8fd8586d — pass: its merge-check.sh passed
mesh/delivery delivered
7f3ff32361
A renewal timed out at the renew interval, so the lease test's 1 s renewals
could lose the lease on a slow build machine (novox/hq issue 591, review of #279).
Author
Contributor

Merge check at 7f3ff323
Judged: head 7f3ff3236149 merged into trunk 21ac8fd8586d; read beside it: mesh-catalog 43a9155d5afe, mesh-controller-main 21ac8fd8586d, mesh-host 8e95c1d9ed2d, 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, route-proxy)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
  • 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, route-proxy is judged on its first machine

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

--- the gate: build-agent, mesh-controller, route-proxy
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-12T22:09:48Z 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-12T22:09:48Z

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 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.042s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	188.773s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.049s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.072s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.045s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.210s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.098s
?   	github.com/novox/mesh-controller/internal/beside	[no test files]
ok  	github.com/novox/mesh-controller/internal/broker	4.379s
ok  	github.com/novox/mesh-controller/internal/builder	55.206s
ok  	github.com/novox/mesh-controller/internal/catalogue	8.308s
ok  	github.com/novox/mesh-controller/internal/conditions	2.680s
ok  	github.com/novox/mesh-controller/internal/envfile	1.069s
ok  	github.com/novox/mesh-controller/internal/facts	1.067s
ok  	github.com/novox/mesh-controller/internal/identity	5.160s
ok  	github.com/novox/mesh-controller/internal/inventory	40.185s
ok  	github.com/novox/mesh-controller/internal/lease	17.788s
ok  	github.com/novox/mesh-controller/internal/licences	4.284s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.055s
ok  	github.com/novox/mesh-controller/internal/link	59.635s
ok  	github.com/novox/mesh-controller/internal/lint	2.523s
ok  	github.com/novox/mesh-controller/internal/outward	1.098s
ok  	github.com/novox/mesh-controller/internal/overlay	1.070s
ok  	github.com/novox/mesh-controller/internal/secrets	1.561s
ok  	github.com/novox/mesh-controller/internal/store	3.572s
ok  	github.com/novox/mesh-controller/internal/testbus	1.198s
ok  	github.com/novox/mesh-controller/internal/token	1.016s
store tests, each run against the store:
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.22s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.24s)
  ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s)
  ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.22s)
  ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.21s)
  ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s)
  ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.98s)
  ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.25s)
  ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.14s)
  ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.26s)
  ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.25s)
  ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.22s)
  ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s)
  ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.27s)
  ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.21s)
  ./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.20s)
  ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.20s)
  ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.24s)
  ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.30s)
  ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.29s)
  ./cmd/mesh-controller --- PASS: TestReplay201 (0.17s)
  ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s)
  ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s)
  ./cmd/mesh-controller --- PASS: TestReplay401 (0.29s)
  ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s)
  ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s)
  ./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.08s)
  ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s)
  ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s)
**Merge check** at `7f3ff323` Judged: head `7f3ff3236149` merged into trunk `21ac8fd8586d`; read beside it: mesh-catalog `43a9155d5afe`, mesh-controller-main `21ac8fd8586d`, mesh-host `8e95c1d9ed2d`, 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, route-proxy) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves - 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, route-proxy is judged on its first machine Run by the build seat on shanks as `build-1791842942356542802` (`builds --log build-1791842942356542802`). ``` --- the gate: build-agent, mesh-controller, route-proxy 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-12T22:09:48Z 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-12T22:09:48Z 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 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.042s ok github.com/novox/mesh-controller/cmd/mesh-controller 188.773s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.049s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.072s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.045s ok github.com/novox/mesh-controller/examples/route-proxy 1.210s ok github.com/novox/mesh-controller/internal/artifacts 1.098s ? github.com/novox/mesh-controller/internal/beside [no test files] ok github.com/novox/mesh-controller/internal/broker 4.379s ok github.com/novox/mesh-controller/internal/builder 55.206s ok github.com/novox/mesh-controller/internal/catalogue 8.308s ok github.com/novox/mesh-controller/internal/conditions 2.680s ok github.com/novox/mesh-controller/internal/envfile 1.069s ok github.com/novox/mesh-controller/internal/facts 1.067s ok github.com/novox/mesh-controller/internal/identity 5.160s ok github.com/novox/mesh-controller/internal/inventory 40.185s ok github.com/novox/mesh-controller/internal/lease 17.788s ok github.com/novox/mesh-controller/internal/licences 4.284s ok github.com/novox/mesh-controller/internal/licences/adapters 1.055s ok github.com/novox/mesh-controller/internal/link 59.635s ok github.com/novox/mesh-controller/internal/lint 2.523s ok github.com/novox/mesh-controller/internal/outward 1.098s ok github.com/novox/mesh-controller/internal/overlay 1.070s ok github.com/novox/mesh-controller/internal/secrets 1.561s ok github.com/novox/mesh-controller/internal/store 3.572s ok github.com/novox/mesh-controller/internal/testbus 1.198s ok github.com/novox/mesh-controller/internal/token 1.016s store tests, each run against the store: ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeWalksTheOthersAgain (0.22s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeEndsTheMergesThatContainIt (0.24s) ./cmd/mesh-controller --- PASS: TestAStopWalksTheOthersAgainInTheOpenBatch (0.23s) ./cmd/mesh-controller --- PASS: TestAStopNamesWhatStaysOnTheMachinesAndWhatStillCarriesIt (0.22s) ./cmd/mesh-controller --- PASS: TestAStopWithoutAMergeLeavesItOutOfABatch (0.21s) ./cmd/mesh-controller --- PASS: TestSavingPlansAndMovingMergesIsOneAct (0.19s) ./cmd/mesh-controller --- PASS: TestAPlanFollowedFromTheStoreAnswersWhenItMoves (1.98s) ./cmd/mesh-controller --- PASS: TestNodeShowAndStatusReadTheLastSendFromTheStore (0.25s) ./cmd/mesh-controller --- PASS: TestTheConditionsVerbReadsTheLooksTheBucketNoLongerHolds (0.14s) ./cmd/mesh-controller --- PASS: TestAWalkLetGoAndStoppedByVerbsIsSaidStartedAndEnded (0.26s) ./cmd/mesh-controller --- PASS: TestAWalkStoppedOrClosedByAPersonIsSaidEndedStopped (0.25s) ./cmd/mesh-controller --- PASS: TestAWalkRetriedByAPersonIsSaidStartedAgain (0.22s) ./cmd/mesh-controller --- PASS: TestABacklogReleasedByAPersonIsSaidStarted (0.22s) ./cmd/mesh-controller --- PASS: TestAWalkEndedByCancelOrClearIsSaidEnded (0.27s) ./cmd/mesh-controller --- PASS: TestAWalkRestartedByARebuildIsSaidStarted (0.21s) ./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.20s) ./cmd/mesh-controller --- PASS: TestAnAssignThatLeavesItsNodeUnresolvedSaysOnlyThePlansRefusal (0.20s) ./cmd/mesh-controller --- PASS: TestADirectoryOwnersKeyIsRefusedThroughAVerb (0.24s) ./cmd/mesh-controller --- PASS: TestTheSendMakesNoValueForAnOutsideSecretNobodyGave (0.30s) ./cmd/mesh-controller --- PASS: TestAQuestionComposesWithoutAnOutsideSecretNobodyGave (0.29s) ./cmd/mesh-controller --- PASS: TestReplay201 (0.17s) ./cmd/mesh-controller --- PASS: TestARollbackWhoseSendWasRefusedIsCompletedByTheNextSend (0.16s) ./cmd/mesh-controller --- PASS: TestAGateJudgesTheOtherMovesBesideAKeptCore (0.16s) ./cmd/mesh-controller --- PASS: TestReplay401 (0.29s) ./cmd/mesh-controller --- PASS: TestReplay201ThePlansSend (0.23s) ./internal/inventory --- PASS: TestTheLastSendSaysWhatTheMachineAnswered (0.09s) ./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.08s) ./internal/inventory --- PASS: TestAWalksStartIsKeptAndARefusedSaveLeavesItUnsaid (0.07s) ./internal/inventory --- PASS: TestAWalksRestIsReadFromEachMachinesOwnSend (0.08s) ```
mesh-admin merged commit 56d6313262 into main 2026-10-12 22:22:24 +00:00
mesh-admin deleted branch fix/591-the-controller-check-runs-in-minutes 2026-10-12 22:22:25 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#279