The build seat ran the merge-check.sh found in the pull request's head. A change could delete or gut it and skip its own tests, and a branch cut before the repository had a script escaped them (the media catalogue's Lidarr pull request merged with "no repository check defined" as a warning).
Now (internal/builder/check_base.go, TheCheckThatJudges): where the base branch holds a merge-check.sh, its script, its # mesh-check-also: parts and its toolchain marker run against the change's tree. The base's scripts are written into the throwaway clone after the gate (which composes the change as it is) and before the repository's own check.
The head lacks the script: main's runs, and the summary says the change holds no merge-check.sh: main's judged it.
The head alters the script or a declared part: main's runs, and the summary leads with THE CHANGE ALTERS ITS OWN CHECK (<files>): main's version judged it; the change's judges the pull requests after it merges. The verdict stays the verdict of main's script, because the forge counts a warning as a failure, and a warning would block every legitimate change to a check.
The base holds no script: unchanged. The head's script runs, or the warning is given when there is none.
The base branch cannot be read: an error. It never falls back to the head's script.
Chicken and egg: a pull request that changes the check is judged by the version it replaces. Its own version judges the next pull request.
Tests: check_base_test.go covers a head without the script, a head that guts the script, a head that guts a declared part, a legitimate change to the check, a main with no script, and an unreadable base, plus a docker-gated end-to-end Check. replay310_test.go (TestReplay310) uses only the API from before the fix. It fails on 1a50d6e (the repository layer answered warning) and passes on this commit. It is registered as R310 in mesh-lab.
merge-check.sh was run locally with -race, against a throwaway postgres and with MESH_TEST_DOCKER=1 plus a local registry, and passed.
novox/hq issue 310, hole 2.
The build seat ran the `merge-check.sh` found in the pull request's head. A change could delete or gut it and skip its own tests, and a branch cut before the repository had a script escaped them (the media catalogue's Lidarr pull request merged with "no repository check defined" as a warning).
**Now** (`internal/builder/check_base.go`, `TheCheckThatJudges`): where the base branch holds a `merge-check.sh`, **its** script, its `# mesh-check-also:` parts and its toolchain marker run against the change's tree. The base's scripts are written into the throwaway clone after the gate (which composes the change as it is) and before the repository's own check.
- The head lacks the script: main's runs, and the summary says `the change holds no merge-check.sh: main's judged it`.
- The head alters the script or a declared part: main's runs, and the summary leads with `THE CHANGE ALTERS ITS OWN CHECK (<files>): main's version judged it; the change's judges the pull requests after it merges`. The verdict stays the verdict of main's script, because the forge counts a warning as a failure, and a warning would block every legitimate change to a check.
- The base holds no script: unchanged. The head's script runs, or the warning is given when there is none.
- The base branch cannot be read: an error. It never falls back to the head's script.
Chicken and egg: a pull request that changes the check is judged by the version it replaces. Its own version judges the next pull request.
**Tests**: `check_base_test.go` covers a head without the script, a head that guts the script, a head that guts a declared part, a legitimate change to the check, a main with no script, and an unreadable base, plus a docker-gated end-to-end `Check`. `replay310_test.go` (`TestReplay310`) uses only the API from before the fix. It fails on 1a50d6e (the repository layer answered `warning`) and passes on this commit. It is registered as R310 in mesh-lab.
`merge-check.sh` was run locally with -race, against a throwaway postgres and with `MESH_TEST_DOCKER=1` plus a local registry, and passed.
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
A change could delete or gut its merge-check.sh and skip its own tests, and a
branch cut before the script escaped them. Where the base branch holds one, its
script, declared parts and toolchain run against the change's tree, and the
verdict says when the change lacks or alters the check (novox/hq issue 310).
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
Machines
mesh-controller on novox: judging — 0 healthy judging(s) so far
Transitions
2026-10-08 08:58 (new) → proposed (announced): novox/mesh-controller#135's head announced
2026-10-08 09:03 proposed → checked (checked): the verdict names this commit
2026-10-08 09:03 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-08 09:10 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-08 09:10 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-08 09:11 delivering → superseded (superseded): a newer delivery to the same trunk took over its walk
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@cb0327de7fc0` — **superseded** since 2026-10-08T09:11:43Z
**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
**Machines**
- mesh-controller on novox: judging — 0 healthy judging(s) so far
**Transitions**
- 2026-10-08 08:58 (new) → proposed (announced): novox/mesh-controller#135's head announced
- 2026-10-08 09:03 proposed → checked (checked): the verdict names this commit
- 2026-10-08 09:03 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-08 09:10 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-08 09:10 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-08 09:11 delivering → superseded (superseded): a newer delivery to the same trunk took over its walk
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
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
Run by the build seat on shanks as build-1791449928843293730 (builds --log build-1791449928843293730).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 47 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
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 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-08T08:57:42Z 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-08T08:57:42Z
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.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 158.525s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.038s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.044s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.040s
ok github.com/novox/mesh-controller/examples/route-proxy 1.189s
ok github.com/novox/mesh-controller/internal/artifacts 1.069s
ok github.com/novox/mesh-controller/internal/broker 2.665s
ok github.com/novox/mesh-controller/internal/builder 1.944s
ok github.com/novox/mesh-controller/internal/catalogue 4.711s
ok github.com/novox/mesh-controller/internal/conditions 2.021s
ok github.com/novox/mesh-controller/internal/envfile 1.045s
ok github.com/novox/mesh-controller/internal/facts 1.047s
ok github.com/novox/mesh-controller/internal/identity 4.734s
ok github.com/novox/mesh-controller/internal/inventory 79.260s
ok github.com/novox/mesh-controller/internal/lease 17.700s
ok github.com/novox/mesh-controller/internal/licences 4.385s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.043s
ok github.com/novox/mesh-controller/internal/link 45.063s
ok github.com/novox/mesh-controller/internal/lint 2.013s
ok github.com/novox/mesh-controller/internal/outward 1.080s
ok github.com/novox/mesh-controller/internal/overlay 1.063s
ok github.com/novox/mesh-controller/internal/secrets 1.534s
ok github.com/novox/mesh-controller/internal/store 3.461s
ok github.com/novox/mesh-controller/internal/testbus 1.227s
ok github.com/novox/mesh-controller/internal/token 1.014s
**Merge check** at `cb0327de`
- `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
Run by the build seat on shanks as `build-1791449928843293730` (`builds --log build-1791449928843293730`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 47 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
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 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-08T08:57:42Z 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-08T08:57:42Z
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.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 158.525s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.038s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.044s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.040s
ok github.com/novox/mesh-controller/examples/route-proxy 1.189s
ok github.com/novox/mesh-controller/internal/artifacts 1.069s
ok github.com/novox/mesh-controller/internal/broker 2.665s
ok github.com/novox/mesh-controller/internal/builder 1.944s
ok github.com/novox/mesh-controller/internal/catalogue 4.711s
ok github.com/novox/mesh-controller/internal/conditions 2.021s
ok github.com/novox/mesh-controller/internal/envfile 1.045s
ok github.com/novox/mesh-controller/internal/facts 1.047s
ok github.com/novox/mesh-controller/internal/identity 4.734s
ok github.com/novox/mesh-controller/internal/inventory 79.260s
ok github.com/novox/mesh-controller/internal/lease 17.700s
ok github.com/novox/mesh-controller/internal/licences 4.385s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.043s
ok github.com/novox/mesh-controller/internal/link 45.063s
ok github.com/novox/mesh-controller/internal/lint 2.013s
ok github.com/novox/mesh-controller/internal/outward 1.080s
ok github.com/novox/mesh-controller/internal/overlay 1.063s
ok github.com/novox/mesh-controller/internal/secrets 1.534s
ok github.com/novox/mesh-controller/internal/store 3.461s
ok github.com/novox/mesh-controller/internal/testbus 1.227s
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.
novox/hq issue 310, hole 2.
The build seat ran the
merge-check.shfound in the pull request's head. A change could delete or gut it and skip its own tests, and a branch cut before the repository had a script escaped them (the media catalogue's Lidarr pull request merged with "no repository check defined" as a warning).Now (
internal/builder/check_base.go,TheCheckThatJudges): where the base branch holds amerge-check.sh, its script, its# mesh-check-also:parts and its toolchain marker run against the change's tree. The base's scripts are written into the throwaway clone after the gate (which composes the change as it is) and before the repository's own check.the change holds no merge-check.sh: main's judged it.THE CHANGE ALTERS ITS OWN CHECK (<files>): main's version judged it; the change's judges the pull requests after it merges. The verdict stays the verdict of main's script, because the forge counts a warning as a failure, and a warning would block every legitimate change to a check.Chicken and egg: a pull request that changes the check is judged by the version it replaces. Its own version judges the next pull request.
Tests:
check_base_test.gocovers a head without the script, a head that guts the script, a head that guts a declared part, a legitimate change to the check, a main with no script, and an unreadable base, plus a docker-gated end-to-endCheck.replay310_test.go(TestReplay310) uses only the API from before the fix. It fails on1a50d6e(the repository layer answeredwarning) and passes on this commit. It is registered as R310 in mesh-lab.merge-check.shwas run locally with -race, against a throwaway postgres and withMESH_TEST_DOCKER=1plus a local registry, and passed.Delivery
novox/mesh-controller@cb0327de7fc0— superseded since 2026-10-08T09:11:43ZDelivery plan — builds build-agent, mesh-controller, route-proxy → 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
cb0327demesh/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 passedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1791449928843293730(builds --log build-1791449928843293730).