Follow-up to #192/#193 (hq issue 363, hq #266). A what-if for cmd/mesh-controller/main.go named build-agent as "package source from novox/mesh-controller, so they are rebuilt without their own source moving" while it was there only because open plan plan-1791628803737088955 (df6d72ae) had not built it yet.
What changes
whyMoved (upgrades.go) gives each moved module a reason: its build source changed: <n> changed file(s) in it, e.g. <file> (or in <owner/repo> through a build context), or read whole: <why> where why is plan <id> has not built it yet, a newer build of it failed, no build source recorded, or the merge's changed files were not all said.
planningView and ReadRepositories carry the reason on an Own entry with no paths (Whole, never stored); staleIn returns the overtaking plan's id.
The what-if prints why: under every module (dependents: it stands on a module the merge moves); the merge log prints one line per moved module. The old "package source … rebuilt without their own source moving" what-if line is gone; the merge log keeps only the true part (its own source record is left where it is).
Separate commit: TestARollbackNeverPutsBackABuildFromAnotherRepository hard-coded a build id meaning 2026-10-10 02:40 UTC; since that moment it fails on main (the registered build reads as newer). Its id is now relative to now. Without this, every mesh-controller PR's repo-check fails today.
Tests: TestAPlanSaysWhyEachModuleIsInIt (six reasons, incl. the build-agent case above); store test for the failed-build reason; merge-check.sh passes locally against a throwaway store, race on.
Follow-up to #192/#193 (hq issue 363, hq #266). A what-if for `cmd/mesh-controller/main.go` named build-agent as "package source from novox/mesh-controller, so they are rebuilt without their own source moving" while it was there only because open plan plan-1791628803737088955 (df6d72ae) had not built it yet.
**What changes**
- `whyMoved` (upgrades.go) gives each moved module a reason: `its build source changed: <n> changed file(s) in it, e.g. <file>` (or `in <owner/repo>` through a build context), or `read whole: <why>` where why is `plan <id> has not built it yet`, `a newer build of it failed`, `no build source recorded`, or `the merge's changed files were not all said`.
- `planningView` and `ReadRepositories` carry the reason on an Own entry with no paths (`Whole`, never stored); `staleIn` returns the overtaking plan's id.
- The what-if prints `why:` under every module (dependents: `it stands on a module the merge moves`); the merge log prints one line per moved module. The old "package source … rebuilt without their own source moving" what-if line is gone; the merge log keeps only the true part (its own source record is left where it is).
- Separate commit: `TestARollbackNeverPutsBackABuildFromAnotherRepository` hard-coded a build id meaning 2026-10-10 02:40 UTC; since that moment it fails on main (the registered build reads as newer). Its id is now relative to now. Without this, every mesh-controller PR's repo-check fails today.
**Tests**: `TestAPlanSaysWhyEachModuleIsInIt` (six reasons, incl. the build-agent case above); store test for the failed-build reason; `merge-check.sh` passes locally against a throwaway store, race on.
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
A what-if named the build seat's holder as packaging the controller's
source, "rebuilt without their own source moving", while it was in the
plan because an open plan had not built it yet. The what-if and the merge
log now say, per module, which changed files of its build source moved it,
or that it is read whole and why: no build source recorded, a newer build
failed, or a plan has not built it yet.
Deliverynovox/mesh-controller@d0161fac5262 — delivered since 2026-10-10T11:13:44Z
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
Machines
mesh-controller on novox: passed — healthy 3 times over 3m38s
mesh-controller on the rest running it: sent
build-agent on ace: passed — healthy 3 times over 3m21s
build-agent on the rest running it: sent
Transitions
2026-10-10 10:56 (new) → proposed (announced): novox/mesh-controller#196's head announced
2026-10-10 11:02 proposed → checked (checked): the verdict names this commit
2026-10-10 11:02 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-10 11:04 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-10 11:04 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
2026-10-10 11:13 delivering → delivered (done): its walk is done: 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@d0161fac5262` — **delivered** since 2026-10-10T11:13:44Z
**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
**Machines**
- mesh-controller on novox: passed — healthy 3 times over 3m38s
- mesh-controller on the rest running it: sent
- build-agent on ace: passed — healthy 3 times over 3m21s
- build-agent on the rest running it: sent
**Transitions**
- 2026-10-10 10:56 (new) → proposed (announced): novox/mesh-controller#196's head announced
- 2026-10-10 11:02 proposed → checked (checked): the verdict names this commit
- 2026-10-10 11:02 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-10 11:04 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-10 11:04 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
- 2026-10-10 11:13 delivering → delivered (done): its walk is done: 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/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
read by no module's build: cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/planner_rules_test.go, internal/inventory/builds_test.go
Run by the build seat on ace as build-1791629408421270079 (builds --log build-1791629408421270079).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); 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: 0
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-10T10:41:49Z 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-10T10:41:49Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.031s
ok github.com/novox/mesh-controller/cmd/mesh-controller 190.954s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/route-proxy 1.116s
ok github.com/novox/mesh-controller/internal/artifacts 1.036s
ok github.com/novox/mesh-controller/internal/broker 2.591s
ok github.com/novox/mesh-controller/internal/builder 2.479s
ok github.com/novox/mesh-controller/internal/catalogue 4.478s
ok github.com/novox/mesh-controller/internal/conditions 2.468s
ok github.com/novox/mesh-controller/internal/envfile 1.052s
ok github.com/novox/mesh-controller/internal/facts 1.053s
ok github.com/novox/mesh-controller/internal/identity 4.134s
ok github.com/novox/mesh-controller/internal/inventory 72.831s
ok github.com/novox/mesh-controller/internal/lease 17.727s
ok github.com/novox/mesh-controller/internal/licences 3.725s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.091s
ok github.com/novox/mesh-controller/internal/link 51.373s
ok github.com/novox/mesh-controller/internal/lint 2.054s
ok github.com/novox/mesh-controller/internal/outward 1.070s
ok github.com/novox/mesh-controller/internal/overlay 1.113s
ok github.com/novox/mesh-controller/internal/secrets 1.465s
ok github.com/novox/mesh-controller/internal/store 3.297s
ok github.com/novox/mesh-controller/internal/testbus 1.261s
ok github.com/novox/mesh-controller/internal/token 1.015s
**Merge check** at `887de9b5`
- `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
- read by no module's build: cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/planner_rules_test.go, internal/inventory/builds_test.go
Run by the build seat on ace as `build-1791629408421270079` (`builds --log build-1791629408421270079`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); 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: 0
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-10T10:41:49Z 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-10T10:41:49Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller
--- its merge-check.sh (go toolchain)
ok github.com/novox/mesh-controller/cmd/mesh-builder 1.031s
ok github.com/novox/mesh-controller/cmd/mesh-controller 190.954s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/route-proxy 1.116s
ok github.com/novox/mesh-controller/internal/artifacts 1.036s
ok github.com/novox/mesh-controller/internal/broker 2.591s
ok github.com/novox/mesh-controller/internal/builder 2.479s
ok github.com/novox/mesh-controller/internal/catalogue 4.478s
ok github.com/novox/mesh-controller/internal/conditions 2.468s
ok github.com/novox/mesh-controller/internal/envfile 1.052s
ok github.com/novox/mesh-controller/internal/facts 1.053s
ok github.com/novox/mesh-controller/internal/identity 4.134s
ok github.com/novox/mesh-controller/internal/inventory 72.831s
ok github.com/novox/mesh-controller/internal/lease 17.727s
ok github.com/novox/mesh-controller/internal/licences 3.725s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.091s
ok github.com/novox/mesh-controller/internal/link 51.373s
ok github.com/novox/mesh-controller/internal/lint 2.054s
ok github.com/novox/mesh-controller/internal/outward 1.070s
ok github.com/novox/mesh-controller/internal/overlay 1.113s
ok github.com/novox/mesh-controller/internal/secrets 1.465s
ok github.com/novox/mesh-controller/internal/store 3.297s
ok github.com/novox/mesh-controller/internal/testbus 1.261s
ok github.com/novox/mesh-controller/internal/token 1.015s
```
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
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
read by no module's build: cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/planner_rules_test.go, internal/inventory/builds_test.go
Run by the build seat on g14 as build-1791629806548810522 (builds --log build-1791629806548810522).
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); 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: 0
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-10T10:50:49Z 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-10T10:50:49Z
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/build_source_test.go, cmd/mesh-controller/planner_rules_test.go and internal/inventory/builds_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.042s
ok github.com/novox/mesh-controller/cmd/mesh-controller 206.527s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.009s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.015s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.010s
ok github.com/novox/mesh-controller/examples/route-proxy 1.139s
ok github.com/novox/mesh-controller/internal/artifacts 1.042s
ok github.com/novox/mesh-controller/internal/broker 2.571s
ok github.com/novox/mesh-controller/internal/builder 2.456s
ok github.com/novox/mesh-controller/internal/catalogue 4.349s
ok github.com/novox/mesh-controller/internal/conditions 2.364s
ok github.com/novox/mesh-controller/internal/envfile 1.030s
ok github.com/novox/mesh-controller/internal/facts 1.034s
ok github.com/novox/mesh-controller/internal/identity 3.997s
ok github.com/novox/mesh-controller/internal/inventory 73.145s
ok github.com/novox/mesh-controller/internal/lease 17.701s
ok github.com/novox/mesh-controller/internal/licences 3.642s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.008s
ok github.com/novox/mesh-controller/internal/link 51.739s
ok github.com/novox/mesh-controller/internal/lint 1.946s
ok github.com/novox/mesh-controller/internal/outward 1.037s
ok github.com/novox/mesh-controller/internal/overlay 1.023s
ok github.com/novox/mesh-controller/internal/secrets 1.425s
ok github.com/novox/mesh-controller/internal/store 3.164s
ok github.com/novox/mesh-controller/internal/testbus 1.168s
ok github.com/novox/mesh-controller/internal/token 1.014s
**Merge check** at `d0161fac`
- `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
- read by no module's build: cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/planner_rules_test.go, internal/inventory/builds_test.go
Run by the build seat on g14 as `build-1791629806548810522` (`builds --log build-1791629806548810522`).
```
--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); 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: 0
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-10T10:50:49Z 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-10T10:50:49Z
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/build_source_test.go, cmd/mesh-controller/planner_rules_test.go and internal/inventory/builds_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.042s
ok github.com/novox/mesh-controller/cmd/mesh-controller 206.527s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.009s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.015s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.010s
ok github.com/novox/mesh-controller/examples/route-proxy 1.139s
ok github.com/novox/mesh-controller/internal/artifacts 1.042s
ok github.com/novox/mesh-controller/internal/broker 2.571s
ok github.com/novox/mesh-controller/internal/builder 2.456s
ok github.com/novox/mesh-controller/internal/catalogue 4.349s
ok github.com/novox/mesh-controller/internal/conditions 2.364s
ok github.com/novox/mesh-controller/internal/envfile 1.030s
ok github.com/novox/mesh-controller/internal/facts 1.034s
ok github.com/novox/mesh-controller/internal/identity 3.997s
ok github.com/novox/mesh-controller/internal/inventory 73.145s
ok github.com/novox/mesh-controller/internal/lease 17.701s
ok github.com/novox/mesh-controller/internal/licences 3.642s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.008s
ok github.com/novox/mesh-controller/internal/link 51.739s
ok github.com/novox/mesh-controller/internal/lint 1.946s
ok github.com/novox/mesh-controller/internal/outward 1.037s
ok github.com/novox/mesh-controller/internal/overlay 1.023s
ok github.com/novox/mesh-controller/internal/secrets 1.425s
ok github.com/novox/mesh-controller/internal/store 3.164s
ok github.com/novox/mesh-controller/internal/testbus 1.168s
ok github.com/novox/mesh-controller/internal/token 1.014s
```
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.
Follow-up to #192/#193 (hq issue 363, hq #266). A what-if for
cmd/mesh-controller/main.gonamed build-agent as "package source from novox/mesh-controller, so they are rebuilt without their own source moving" while it was there only because open plan plan-1791628803737088955 (df6d72ae) had not built it yet.What changes
whyMoved(upgrades.go) gives each moved module a reason:its build source changed: <n> changed file(s) in it, e.g. <file>(orin <owner/repo>through a build context), orread whole: <why>where why isplan <id> has not built it yet,a newer build of it failed,no build source recorded, orthe merge's changed files were not all said.planningViewandReadRepositoriescarry the reason on an Own entry with no paths (Whole, never stored);staleInreturns the overtaking plan's id.why:under every module (dependents:it stands on a module the merge moves); the merge log prints one line per moved module. The old "package source … rebuilt without their own source moving" what-if line is gone; the merge log keeps only the true part (its own source record is left where it is).TestARollbackNeverPutsBackABuildFromAnotherRepositoryhard-coded a build id meaning 2026-10-10 02:40 UTC; since that moment it fails on main (the registered build reads as newer). Its id is now relative to now. Without this, every mesh-controller PR's repo-check fails today.Tests:
TestAPlanSaysWhyEachModuleIsInIt(six reasons, incl. the build-agent case above); store test for the failed-build reason;merge-check.shpasses locally against a throwaway store, race on.Delivery
novox/mesh-controller@d0161fac5262— delivered since 2026-10-10T11:13:44ZDelivery 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
887de9b5mesh/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-1791629408421270079(builds --log build-1791629408421270079).Merge check at
d0161facmesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)mesh/repo-check: PASS — its merge-check.sh passedDelivery plan — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step
Run by the build seat on g14 as
build-1791629806548810522(builds --log build-1791629806548810522).