Step 1 of hq ADR 0259 (hq #211; §8 as revised and accepted on 2026-10-08). The bus enforces who submits an ask and which channel answers. The controller refuses to place a trusted holder where an agent can reach it. Nothing in the controller knows Telegram.
Kinded benches, verbs named by their caller, proofs, records (as before)
Seat declarations gain kinded (channel and intake only), by-caller, proofs and records. A claim gains kind and capabilities (from channel-capabilities/1). There is one holder per kind, and resolution treats each kind as its own holder.
Grants: a caller publishes and hears under its own name; a kind's holder reaches its own kind only. Proofs are never on a stream. Records are read under the reader's own prefix. Every kind and its capabilities are named in the membership of each module that uses or watches the bench.
Changed after the security and correctness reviews of 2026-10-08
runs-as (new manifest field). A module running as its own account is served by a runtime of its own: the machine's runtime program, run as that account, serving that module alone, on the module's own bus credential. The machine's runtime never carries it and is given none of its words.
Registration refuses root, an account the module does not make, secrets it does not own, and a missing broker.
A trusted holder must run as its own account. That is a module saying a by-caller event (a warrant), or holding a kind that declares verified-sender. Registration refuses it otherwise, and composing the machine's runtime refuses carrying it.
verified-sender reaches the router only from a holder that runs as its own account. It is stripped from the membership otherwise.
Only the bench's declarer (the router) puts work on a kind's queue and answers its proofs. Before, every user and every watcher could.
Probe D-root (self-check). On every machine where a module of its own account runs, it asks the sudo module's new sudo_escalation (mesh-catalog #133) whether either of these can become root without a person:
the account agents run as: the claude-code module's agent_account, or the operator's account while it names none;
the account the login shell runs commands as.
While either can, it raises the urgent condition agent-root, in plain words. It fails today (agents run as the operator's account, which has passwordless sudo). It still fails after the agent-account change alone, because the login shell's execute runs any command as the operator's account. It passes once both are closed (ADR 0259 §8, rule 3).
Queues: a kinded or caller-named seat's queue is created at registration, held or not. Its workers have no delivery limit (the runtime backs off). A failed queue assertion is collected rather than ending the raise early.
seat --to/--add is refused on a kinded bench, because holdings have no kind column.
Tests
internal/broker/seattraffic_test.go: as before, plus: only the router answers proofs and submits work; the machine's runtime never carries a trusted holder (and the runtime still composes); verified-sender is believed only from a holder of its own account.
internal/catalogue/kinded_test.go: a trusted holder must run as its own account; runs-as refusals.
internal/catalogue/runtime_test.go: a module of its own account is served by its own runtime (its user, its credential, only itself), and is refused without the runtime program.
cmd/mesh-controller/probe_agent_root_test.go: today fails; agents moved but the login shell still the runtime's fails; both closed passes; no agents and no login shell passes; the words are plain.
cmd/mesh-controller/seats_test.go: a kinded bench is not handed over.
sh merge-check.sh passes locally (the full suite with -race).
Merge order: mesh-sdk #12 (tagged), then mesh-tools #23, then this, then mesh-controller #157 with mesh-host #59, then mesh-catalog #133 and #134 together. Do not merge without review.
Step 1 of hq ADR 0259 (hq #211; §8 as revised and accepted on 2026-10-08). The bus enforces who submits an ask and which channel answers. The controller refuses to place a trusted holder where an agent can reach it. Nothing in the controller knows Telegram.
**Kinded benches, verbs named by their caller, proofs, records (as before)**
- Seat declarations gain `kinded` (channel and intake only), `by-caller`, `proofs` and `records`. A claim gains `kind` and `capabilities` (from `channel-capabilities/1`). There is one holder per kind, and resolution treats each kind as its own holder.
- Grants: a caller publishes and hears under its own name; a kind's holder reaches its own kind only. Proofs are never on a stream. Records are read under the reader's own prefix. Every kind and its capabilities are named in the membership of each module that uses or watches the bench.
**Changed after the security and correctness reviews of 2026-10-08**
- **`runs-as`** (new manifest field). A module running as its own account is served by a runtime of its own: the machine's runtime program, run as that account, serving that module alone, on the module's own bus credential. The machine's runtime never carries it and is given none of its words.
- Registration refuses root, an account the module does not make, secrets it does not own, and a missing broker.
- **A trusted holder must run as its own account.** That is a module saying a by-caller event (a warrant), or holding a kind that declares `verified-sender`. Registration refuses it otherwise, and composing the machine's runtime refuses carrying it.
- **`verified-sender` reaches the router only from a holder that runs as its own account.** It is stripped from the membership otherwise.
- **Only the bench's declarer (the router)** puts work on a kind's queue and answers its proofs. Before, every user and every watcher could.
- **Probe D-root (self-check).** On every machine where a module of its own account runs, it asks the sudo module's new `sudo_escalation` (mesh-catalog #133) whether either of these can become root without a person:
- the account agents run as: the claude-code module's `agent_account`, or the operator's account while it names none;
- the account the login shell runs commands as.
While either can, it raises the urgent condition `agent-root`, in plain words. **It fails today** (agents run as the operator's account, which has passwordless sudo). **It still fails after the agent-account change alone**, because the login shell's `execute` runs any command as the operator's account. It passes once both are closed (ADR 0259 §8, rule 3).
- **Queues:** a kinded or caller-named seat's queue is created at registration, held or not. Its workers have no delivery limit (the runtime backs off). A failed queue assertion is collected rather than ending the raise early.
- **`seat --to/--add` is refused on a kinded bench**, because holdings have no kind column.
**Tests**
- `internal/broker/seattraffic_test.go`: as before, plus: only the router answers proofs and submits work; the machine's runtime never carries a trusted holder (and the runtime still composes); verified-sender is believed only from a holder of its own account.
- `internal/catalogue/kinded_test.go`: a trusted holder must run as its own account; `runs-as` refusals.
- `internal/catalogue/runtime_test.go`: a module of its own account is served by its own runtime (its user, its credential, only itself), and is refused without the runtime program.
- `cmd/mesh-controller/probe_agent_root_test.go`: today fails; agents moved but the login shell still the runtime's fails; both closed passes; no agents and no login shell passes; the words are plain.
- `cmd/mesh-controller/seats_test.go`: a kinded bench is not handed over.
`sh merge-check.sh` passes locally (the full suite with -race).
**Merge order:** mesh-sdk #12 (tagged), then mesh-tools #23, then this, then mesh-controller #157 with mesh-host #59, then mesh-catalog #133 and #134 together. Do not merge without review.
mesh-controller on novox: failed — carried by release-1791555560543135916
Transitions
2026-10-09 12:49 (new) → proposed (announced): novox/mesh-controller#154's head announced
2026-10-09 12:54 proposed → checked (checked): the verdict names this commit
2026-10-09 12:54 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-09 14:18 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-09 14:18 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-09 14:30 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@c544c2a17bef` — **superseded** since 2026-10-09T14:30:56Z
**Covered**: delivered after its walk was superseded: the walk plan-1791556256698631508, which took its walk plan-1791555486251741995 over, ended done
**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
**Group** `feat/asks-answered-on-any-channel`: novox/mesh-controller@c544c2a17bef, novox/mesh-sdk@16984aafc689, novox/mesh-tools@127047edd665
**Machines**
- mesh-controller on novox: failed — carried by release-1791555560543135916
**Transitions**
- 2026-10-09 12:49 (new) → proposed (announced): novox/mesh-controller#154's head announced
- 2026-10-09 12:54 proposed → checked (checked): the verdict names this commit
- 2026-10-09 12:54 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-09 14:18 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-09 14:18 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-09 14:30 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 ace as build-1791469681714627413 (builds --log build-1791469681714627413).
tier 1: plan-own: done — novox/a at c0ffee, 1 tier(s)
build-at-commit was built at commit 01234567; a rebuild asks what a follows now, main — `replay build-at-commit` builds that commit
rebuild asked as build-1791469900896447712
build-1791466303944017654: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466304944017654: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466363944017654: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466364944017654: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
plan-1: mesh-controller settled from the build records as built (build-2)
plan-3: postgres settled from the build records as built (build-mine)
plan-2: x settled from the build records as failed (b)
release-1791469904896156942: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791469904896156942: sent anchor 1 build(s) that waited for a gate; judging them there
release-1791469904896156942: sent laptop 2 build(s) that waited for a gate; judging them there
release-1791469905310099762: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791469905310099762: sent anchor 1 build(s) that waited for a gate; judging them there
app's build c2 failed its gate on anchor and was put back to c1: anchor failed what it was sent
release-1791469905310099762: failed its gate on anchor: anchor failed what it was sent — app failed its gate on anchor in tier 0: anchor failed what it was sent; put back app to c1 on anchor, in one send
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
release-1791469905374103603: 1 build(s) wait for a gate on laptop; one machine at a time, each judged
release-1791469905374103603 releases it; `plans release-1791469905374103603` says where it is
release-1791469905374103603: sent laptop 1 build(s) that waited for a gate; judging them there
release-1791469905767866403: 3 build(s) wait for a gate on laptop, workstation; one machine at a time, each judged
release-1791469905767866403: sent laptop 3 build(s) that waited for a gate; judging them there
release-1791469905767866403: sent workstation 3 build(s) that waited for a gate; judging them there
plan-crashloop: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
app's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted)
plan-crashloop: app failed its gate on anchor in tier 0: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted); put back app to c1 on anchor, in one send; none reported left as it was
novox/mesh-catalog merged into main (3ad22356); plan plan-1791469908466762072, 1 module(s) in 1 tier(s)
0: app
tier 0: modules/systemd-resolved is a new module in novox/mesh-catalog: build build-modules/systemd-resolved asked at main; registered when it lands, assigned nowhere
novox/mesh-catalog merged into main (3da80a4b); it changed no module the mesh holds, and adds modules/systemd-resolved: built, registered when the build lands, and sent nowhere
build-1791466309581044459: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466369581044459: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
recorded as act-1791469909682732602-1 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Ace, because "operator's yes: the resolver's new build on anchor" — the person's word their upgrade policy asks for, which no healer is wanted for
recorded as act-1791469909727260699-2 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Ace, because "operator's yes: the resolver's new build on laptop" — the person's word their upgrade policy asks for, which no healer is wanted for
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
build-1791466312188993857: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466372188993857: the build seat did not say whether c2bbbbbb is on its repository's trunk (it predates ADR 0238); registered as before
app at c2bbbbbb was made from the source build-1791466312188993857 was: registered with its artifacts, no move
build-1791466432188993857: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466492188993857: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466312553423363: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466372553423363: the build seat did not say whether n2222222 is on its repository's trunk (it predates ADR 0238); registered as before
nats at n2222222 was made from the source build-1791466312553423363 was: registered with its artifacts, no move
every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade
build-1791466432553423363: the build seat did not say whether n3333333 is on its repository's trunk (it predates ADR 0238); registered as before
plan-gate: app built from the source every machine running it runs: no move, nothing sent
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
plan-97b1b2b closed at tier 1 of 2; what was asked still builds and registers, nothing further is asked
plan-tier: tier 0 built; sent 12 module(s) to anchor first in one send (m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12), the rest once its gate passes
plan-tier: m01 passed its gate on anchor (healthy 3 times over 0s); the rest are sent
plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, node-tools), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound)
plan-tier: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); app1 was not found wanting and is left as it is; passed on their own and kept: app2; node-tools failed its gate on anchor in tier 0: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); put back node-tools to c1 on anchor, in one send; none reported left as it was
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back; none reported left as it was
tier 0: FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 142.729s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.047s
ok github.com/novox/mesh-controller/examples/route-proxy 1.119s
ok github.com/novox/mesh-controller/internal/artifacts 1.030s
ok github.com/novox/mesh-controller/internal/broker 2.429s
ok github.com/novox/mesh-controller/internal/builder 1.690s
--- FAIL: TestEveryCatalogueManifestParses (0.21s)
catalogue_check_test.go:44: i3status-rust: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:44: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
catalogue_check_test.go:57: 117 manifests, 70 named endpoints, 30 routed endpoints resolved
--- FAIL: TestNoCatalogueManifestNamesAnInstallation (0.61s)
catalogue_check_test.go:80: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:80: ../../../mesh-catalog/modules/power/module.json: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryCatalogueIdentityFitsWhatItRequires (0.07s)
catalogue_check_test.go:142: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
--- FAIL: TestEveryCatalogueManifestDeclaresWhatItMounts (0.19s)
mounts_test.go:87: i3status-rust: this is not a module manifest: json: unknown field "renders"
mounts_test.go:87: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryManifestsEventNamesAreLocal (0.04s)
no_subjects_test.go:82: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesResolverHoldersWriteTheFileAndProvideSplitDNS (0.04s)
node_resolver_test.go:156: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesUplinksWriteTheResolverFileAndNothingElseDoes (0.04s)
resolver_file_is_the_uplinks_test.go:26: i3status-rust: json: unknown field "renders"
--- FAIL: TestEveryManifestInUseClaimsASeatTheMeshDefines (0.04s)
seats_test.go:215: ../../../mesh-catalog/modules/i3status-rust/module.json: json: unknown field "renders"
--- FAIL: TestEveryManifestsStateIsLocalAndEveryReadIsKept (0.04s)
state_test.go:73: i3status-rust: json: unknown field "renders"
FAIL
FAIL github.com/novox/mesh-controller/internal/catalogue 2.377s
ok github.com/novox/mesh-controller/internal/conditions 2.182s
ok github.com/novox/mesh-controller/internal/envfile 1.047s
ok github.com/novox/mesh-controller/internal/facts 1.089s
ok github.com/novox/mesh-controller/internal/identity 4.060s
ok github.com/novox/mesh-controller/internal/inventory 67.211s
ok github.com/novox/mesh-controller/internal/lease 17.691s
ok github.com/novox/mesh-controller/internal/licences 3.703s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.081s
ok github.com/novox/mesh-controller/internal/link 43.508s
ok github.com/novox/mesh-controller/internal/lint 1.923s
ok github.com/novox/mesh-controller/internal/outward 1.071s
ok github.com/novox/mesh-controller/internal/overlay 1.097s
ok github.com/novox/mesh-controller/internal/secrets 1.441s
ok github.com/novox/mesh-controller/internal/store 3.280s
ok github.com/novox/mesh-controller/internal/testbus 1.246s
ok github.com/novox/mesh-controller/internal/token 1.016s
FAIL
**Merge check** at `85d6aa3f`
- `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`: **FAIL** — its merge-check.sh failed: --- FAIL: TestEveryCatalogueManifestParses (0.21s)
**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 ace as `build-1791469681714627413` (`builds --log build-1791469681714627413`).
```
tier 1: plan-own: done — novox/a at c0ffee, 1 tier(s)
build-at-commit was built at commit 01234567; a rebuild asks what a follows now, main — `replay build-at-commit` builds that commit
rebuild asked as build-1791469900896447712
build-1791466303944017654: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466304944017654: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466363944017654: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466364944017654: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
plan-1: mesh-controller settled from the build records as built (build-2)
plan-3: postgres settled from the build records as built (build-mine)
plan-2: x settled from the build records as failed (b)
release-1791469904896156942: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791469904896156942: sent anchor 1 build(s) that waited for a gate; judging them there
release-1791469904896156942: sent laptop 2 build(s) that waited for a gate; judging them there
release-1791469905310099762: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791469905310099762: sent anchor 1 build(s) that waited for a gate; judging them there
app's build c2 failed its gate on anchor and was put back to c1: anchor failed what it was sent
release-1791469905310099762: failed its gate on anchor: anchor failed what it was sent — app failed its gate on anchor in tier 0: anchor failed what it was sent; put back app to c1 on anchor, in one send
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
release-1791469905374103603: 1 build(s) wait for a gate on laptop; one machine at a time, each judged
release-1791469905374103603 releases it; `plans release-1791469905374103603` says where it is
release-1791469905374103603: sent laptop 1 build(s) that waited for a gate; judging them there
release-1791469905767866403: 3 build(s) wait for a gate on laptop, workstation; one machine at a time, each judged
release-1791469905767866403: sent laptop 3 build(s) that waited for a gate; judging them there
release-1791469905767866403: sent workstation 3 build(s) that waited for a gate; judging them there
plan-crashloop: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
app's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted)
plan-crashloop: app failed its gate on anchor in tier 0: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted); put back app to c1 on anchor, in one send; none reported left as it was
novox/mesh-catalog merged into main (3ad22356); plan plan-1791469908466762072, 1 module(s) in 1 tier(s)
0: app
tier 0: modules/systemd-resolved is a new module in novox/mesh-catalog: build build-modules/systemd-resolved asked at main; registered when it lands, assigned nowhere
novox/mesh-catalog merged into main (3da80a4b); it changed no module the mesh holds, and adds modules/systemd-resolved: built, registered when the build lands, and sent nowhere
build-1791466309581044459: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466369581044459: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
recorded as act-1791469909682732602-1 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Ace, because "operator's yes: the resolver's new build on anchor" — the person's word their upgrade policy asks for, which no healer is wanted for
recorded as act-1791469909727260699-2 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Ace, because "operator's yes: the resolver's new build on laptop" — the person's word their upgrade policy asks for, which no healer is wanted for
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
build-1791466312188993857: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466372188993857: the build seat did not say whether c2bbbbbb is on its repository's trunk (it predates ADR 0238); registered as before
app at c2bbbbbb was made from the source build-1791466312188993857 was: registered with its artifacts, no move
build-1791466432188993857: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466492188993857: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466312553423363: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466372553423363: the build seat did not say whether n2222222 is on its repository's trunk (it predates ADR 0238); registered as before
nats at n2222222 was made from the source build-1791466312553423363 was: registered with its artifacts, no move
every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade
build-1791466432553423363: the build seat did not say whether n3333333 is on its repository's trunk (it predates ADR 0238); registered as before
plan-gate: app built from the source every machine running it runs: no move, nothing sent
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
plan-97b1b2b closed at tier 1 of 2; what was asked still builds and registers, nothing further is asked
plan-tier: tier 0 built; sent 12 module(s) to anchor first in one send (m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12), the rest once its gate passes
plan-tier: m01 passed its gate on anchor (healthy 3 times over 0s); the rest are sent
plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, node-tools), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound)
plan-tier: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); app1 was not found wanting and is left as it is; passed on their own and kept: app2; node-tools failed its gate on anchor in tier 0: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); put back node-tools to c1 on anchor, in one send; none reported left as it was
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back; none reported left as it was
tier 0: FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 142.729s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.013s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.047s
ok github.com/novox/mesh-controller/examples/route-proxy 1.119s
ok github.com/novox/mesh-controller/internal/artifacts 1.030s
ok github.com/novox/mesh-controller/internal/broker 2.429s
ok github.com/novox/mesh-controller/internal/builder 1.690s
--- FAIL: TestEveryCatalogueManifestParses (0.21s)
catalogue_check_test.go:44: i3status-rust: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:44: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
catalogue_check_test.go:57: 117 manifests, 70 named endpoints, 30 routed endpoints resolved
--- FAIL: TestNoCatalogueManifestNamesAnInstallation (0.61s)
catalogue_check_test.go:80: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:80: ../../../mesh-catalog/modules/power/module.json: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryCatalogueIdentityFitsWhatItRequires (0.07s)
catalogue_check_test.go:142: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
--- FAIL: TestEveryCatalogueManifestDeclaresWhatItMounts (0.19s)
mounts_test.go:87: i3status-rust: this is not a module manifest: json: unknown field "renders"
mounts_test.go:87: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryManifestsEventNamesAreLocal (0.04s)
no_subjects_test.go:82: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesResolverHoldersWriteTheFileAndProvideSplitDNS (0.04s)
node_resolver_test.go:156: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesUplinksWriteTheResolverFileAndNothingElseDoes (0.04s)
resolver_file_is_the_uplinks_test.go:26: i3status-rust: json: unknown field "renders"
--- FAIL: TestEveryManifestInUseClaimsASeatTheMeshDefines (0.04s)
seats_test.go:215: ../../../mesh-catalog/modules/i3status-rust/module.json: json: unknown field "renders"
--- FAIL: TestEveryManifestsStateIsLocalAndEveryReadIsKept (0.04s)
state_test.go:73: i3status-rust: json: unknown field "renders"
FAIL
FAIL github.com/novox/mesh-controller/internal/catalogue 2.377s
ok github.com/novox/mesh-controller/internal/conditions 2.182s
ok github.com/novox/mesh-controller/internal/envfile 1.047s
ok github.com/novox/mesh-controller/internal/facts 1.089s
ok github.com/novox/mesh-controller/internal/identity 4.060s
ok github.com/novox/mesh-controller/internal/inventory 67.211s
ok github.com/novox/mesh-controller/internal/lease 17.691s
ok github.com/novox/mesh-controller/internal/licences 3.703s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.081s
ok github.com/novox/mesh-controller/internal/link 43.508s
ok github.com/novox/mesh-controller/internal/lint 1.923s
ok github.com/novox/mesh-controller/internal/outward 1.071s
ok github.com/novox/mesh-controller/internal/overlay 1.097s
ok github.com/novox/mesh-controller/internal/secrets 1.441s
ok github.com/novox/mesh-controller/internal/store 3.280s
ok github.com/novox/mesh-controller/internal/testbus 1.246s
ok github.com/novox/mesh-controller/internal/token 1.016s
FAIL
```
mesh/merge-gate: ERROR — the merge gate could not judge the change: mesh-controller: the snapshot's i3status-rust is not a manifest: json: unknown field "renders" (modules: build-agent, mesh-controller, route-proxy)
mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestEveryCatalogueManifestParses (0.27s)
Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
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-1791470241386973335 (builds --log build-1791470241386973335).
tier 1: plan-own: done — novox/a at c0ffee, 1 tier(s)
build-at-commit was built at commit 01234567; a rebuild asks what a follows now, main — `replay build-at-commit` builds that commit
rebuild asked as build-1791470413862035777
build-1791466817042683714: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466818042683714: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466877042683714: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466878042683714: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
plan-1: mesh-controller settled from the build records as built (build-2)
plan-3: postgres settled from the build records as built (build-mine)
plan-2: x settled from the build records as failed (b)
release-1791470418158801580: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791470418158801580: sent anchor 1 build(s) that waited for a gate; judging them there
release-1791470418158801580: sent laptop 2 build(s) that waited for a gate; judging them there
release-1791470418650667849: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791470418650667849: sent anchor 1 build(s) that waited for a gate; judging them there
app's build c2 failed its gate on anchor and was put back to c1: anchor failed what it was sent
release-1791470418650667849: failed its gate on anchor: anchor failed what it was sent — app failed its gate on anchor in tier 0: anchor failed what it was sent; put back app to c1 on anchor, in one send
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
release-1791470418724503814: 1 build(s) wait for a gate on laptop; one machine at a time, each judged
release-1791470418724503814 releases it; `plans release-1791470418724503814` says where it is
release-1791470418724503814: sent laptop 1 build(s) that waited for a gate; judging them there
release-1791470419202031104: 3 build(s) wait for a gate on laptop, workstation; one machine at a time, each judged
release-1791470419202031104: sent laptop 3 build(s) that waited for a gate; judging them there
release-1791470419202031104: sent workstation 3 build(s) that waited for a gate; judging them there
plan-crashloop: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
app's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted)
plan-crashloop: app failed its gate on anchor in tier 0: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted); put back app to c1 on anchor, in one send; none reported left as it was
novox/mesh-catalog merged into main (3ad22356); plan plan-1791470422354301794, 1 module(s) in 1 tier(s)
0: app
tier 0: modules/systemd-resolved is a new module in novox/mesh-catalog: build build-modules/systemd-resolved asked at main; registered when it lands, assigned nowhere
novox/mesh-catalog merged into main (3da80a4b); it changed no module the mesh holds, and adds modules/systemd-resolved: built, registered when the build lands, and sent nowhere
build-1791466823663370387: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466883663370387: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
recorded as act-1791470423774074898-1 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Shanks, because "operator's yes: the resolver's new build on anchor" — the person's word their upgrade policy asks for, which no healer is wanted for
recorded as act-1791470423826056114-2 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Shanks, because "operator's yes: the resolver's new build on laptop" — the person's word their upgrade policy asks for, which no healer is wanted for
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
build-1791466826729735404: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466886729735404: the build seat did not say whether c2bbbbbb is on its repository's trunk (it predates ADR 0238); registered as before
app at c2bbbbbb was made from the source build-1791466826729735404 was: registered with its artifacts, no move
build-1791466946729735404: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before
build-1791467006729735404: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466827163312954: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466887163312954: the build seat did not say whether n2222222 is on its repository's trunk (it predates ADR 0238); registered as before
nats at n2222222 was made from the source build-1791466827163312954 was: registered with its artifacts, no move
every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade
build-1791466947163312954: the build seat did not say whether n3333333 is on its repository's trunk (it predates ADR 0238); registered as before
plan-gate: app built from the source every machine running it runs: no move, nothing sent
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
plan-97b1b2b closed at tier 1 of 2; what was asked still builds and registers, nothing further is asked
plan-tier: tier 0 built; sent 12 module(s) to anchor first in one send (m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12), the rest once its gate passes
plan-tier: m01 passed its gate on anchor (healthy 3 times over 0s); the rest are sent
plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, node-tools), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound)
plan-tier: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); app1 was not found wanting and is left as it is; passed on their own and kept: app2; node-tools failed its gate on anchor in tier 0: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); put back node-tools to c1 on anchor, in one send; none reported left as it was
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back; none reported left as it was
tier 0: FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 162.913s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.048s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.047s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.044s
ok github.com/novox/mesh-controller/examples/route-proxy 1.250s
ok github.com/novox/mesh-controller/internal/artifacts 1.079s
ok github.com/novox/mesh-controller/internal/broker 2.651s
ok github.com/novox/mesh-controller/internal/builder 1.824s
--- FAIL: TestEveryCatalogueManifestParses (0.27s)
catalogue_check_test.go:44: i3status-rust: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:44: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
catalogue_check_test.go:57: 117 manifests, 70 named endpoints, 30 routed endpoints resolved
--- FAIL: TestNoCatalogueManifestNamesAnInstallation (0.77s)
catalogue_check_test.go:80: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:80: ../../../mesh-catalog/modules/power/module.json: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryCatalogueIdentityFitsWhatItRequires (0.08s)
catalogue_check_test.go:142: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
--- FAIL: TestEveryCatalogueManifestDeclaresWhatItMounts (0.22s)
mounts_test.go:87: i3status-rust: this is not a module manifest: json: unknown field "renders"
mounts_test.go:87: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryManifestsEventNamesAreLocal (0.05s)
no_subjects_test.go:82: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesResolverHoldersWriteTheFileAndProvideSplitDNS (0.05s)
node_resolver_test.go:156: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesUplinksWriteTheResolverFileAndNothingElseDoes (0.05s)
resolver_file_is_the_uplinks_test.go:26: i3status-rust: json: unknown field "renders"
--- FAIL: TestEveryManifestInUseClaimsASeatTheMeshDefines (0.05s)
seats_test.go:215: ../../../mesh-catalog/modules/i3status-rust/module.json: json: unknown field "renders"
--- FAIL: TestEveryManifestsStateIsLocalAndEveryReadIsKept (0.05s)
state_test.go:73: i3status-rust: json: unknown field "renders"
FAIL
FAIL github.com/novox/mesh-controller/internal/catalogue 2.932s
ok github.com/novox/mesh-controller/internal/conditions 2.238s
ok github.com/novox/mesh-controller/internal/envfile 1.064s
ok github.com/novox/mesh-controller/internal/facts 1.053s
ok github.com/novox/mesh-controller/internal/identity 4.728s
ok github.com/novox/mesh-controller/internal/inventory 79.118s
ok github.com/novox/mesh-controller/internal/lease 17.704s
ok github.com/novox/mesh-controller/internal/licences 4.292s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.034s
ok github.com/novox/mesh-controller/internal/link 46.045s
ok github.com/novox/mesh-controller/internal/lint 2.091s
ok github.com/novox/mesh-controller/internal/outward 1.073s
ok github.com/novox/mesh-controller/internal/overlay 1.071s
ok github.com/novox/mesh-controller/internal/secrets 1.533s
ok github.com/novox/mesh-controller/internal/store 3.467s
ok github.com/novox/mesh-controller/internal/testbus 1.224s
ok github.com/novox/mesh-controller/internal/token 1.014s
FAIL
**Merge check** at `3690c4dd`
- `mesh/merge-gate`: **ERROR** — the merge gate could not judge the change: mesh-controller: the snapshot's i3status-rust is not a manifest: json: unknown field "renders" (modules: build-agent, mesh-controller, route-proxy)
- `mesh/repo-check`: **FAIL** — its merge-check.sh failed: --- FAIL: TestEveryCatalogueManifestParses (0.27s)
**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-1791470241386973335` (`builds --log build-1791470241386973335`).
```
tier 1: plan-own: done — novox/a at c0ffee, 1 tier(s)
build-at-commit was built at commit 01234567; a rebuild asks what a follows now, main — `replay build-at-commit` builds that commit
rebuild asked as build-1791470413862035777
build-1791466817042683714: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466818042683714: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466877042683714: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466878042683714: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
plan-1: mesh-controller settled from the build records as built (build-2)
plan-3: postgres settled from the build records as built (build-mine)
plan-2: x settled from the build records as failed (b)
release-1791470418158801580: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791470418158801580: sent anchor 1 build(s) that waited for a gate; judging them there
release-1791470418158801580: sent laptop 2 build(s) that waited for a gate; judging them there
release-1791470418650667849: 2 build(s) wait for a gate on anchor, laptop; one machine at a time, each judged
release-1791470418650667849: sent anchor 1 build(s) that waited for a gate; judging them there
app's build c2 failed its gate on anchor and was put back to c1: anchor failed what it was sent
release-1791470418650667849: failed its gate on anchor: anchor failed what it was sent — app failed its gate on anchor in tier 0: anchor failed what it was sent; put back app to c1 on anchor, in one send
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
release-1791470418724503814: 1 build(s) wait for a gate on laptop; one machine at a time, each judged
release-1791470418724503814 releases it; `plans release-1791470418724503814` says where it is
release-1791470418724503814: sent laptop 1 build(s) that waited for a gate; judging them there
release-1791470419202031104: 3 build(s) wait for a gate on laptop, workstation; one machine at a time, each judged
release-1791470419202031104: sent laptop 3 build(s) that waited for a gate; judging them there
release-1791470419202031104: sent workstation 3 build(s) that waited for a gate; judging them there
plan-crashloop: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
app's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted)
plan-crashloop: app failed its gate on anchor in tier 0: not healthy within -1s of its apply: its container app.server on anchor keeps restarting (2 restart(s) counted); put back app to c1 on anchor, in one send; none reported left as it was
novox/mesh-catalog merged into main (3ad22356); plan plan-1791470422354301794, 1 module(s) in 1 tier(s)
0: app
tier 0: modules/systemd-resolved is a new module in novox/mesh-catalog: build build-modules/systemd-resolved asked at main; registered when it lands, assigned nowhere
novox/mesh-catalog merged into main (3da80a4b); it changed no module the mesh holds, and adds modules/systemd-resolved: built, registered when the build lands, and sent nowhere
build-1791466823663370387: the build seat did not say whether c1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466883663370387: the build seat did not say whether c2222222 is on its repository's trunk (it predates ADR 0238); registered as before
recorded as act-1791470423774074898-1 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Shanks, because "operator's yes: the resolver's new build on anchor" — the person's word their upgrade policy asks for, which no healer is wanted for
recorded as act-1791470423826056114-2 in the hand-act log: a push of recorded builds (resolver from c1111111 → c2222222) by an unnamed account at a shell on Shanks, because "operator's yes: the resolver's new build on laptop" — the person's word their upgrade policy asks for, which no healer is wanted for
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
laptop is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
build-1791466826729735404: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466886729735404: the build seat did not say whether c2bbbbbb is on its repository's trunk (it predates ADR 0238); registered as before
app at c2bbbbbb was made from the source build-1791466826729735404 was: registered with its artifacts, no move
build-1791466946729735404: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before
build-1791467006729735404: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466827163312954: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791466887163312954: the build seat did not say whether n2222222 is on its repository's trunk (it predates ADR 0238); registered as before
nats at n2222222 was made from the source build-1791466827163312954 was: registered with its artifacts, no move
every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade
build-1791466947163312954: the build seat did not say whether n3333333 is on its repository's trunk (it predates ADR 0238); registered as before
plan-gate: app built from the source every machine running it runs: no move, nothing sent
plan-gate: done — novox/mesh-catalog at c2, 1 tier(s)
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
status could not be composed (after 0s): the store did not answer — `status` answers the last summary, with its age
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is left out of the rest of the mesh: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
anchor is not counted as on the network: it does not resolve: these assignments cannot be applied:
- rival-one and rival-two both claim "the-seat", and only one thing may hold it per node
this act by hand could NOT be recorded in the hand-act log, and is done anyway: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
plan-97b1b2b closed at tier 1 of 2; what was asked still builds and registers, nothing further is asked
plan-tier: tier 0 built; sent 12 module(s) to anchor first in one send (m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12), the rest once its gate passes
plan-tier: m01 passed its gate on anchor (healthy 3 times over 0s); the rest are sent
plan-tier: tier 0 built; sent m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12 to laptop, one send each
plan-tier: done — novox/mesh-catalog at c2, 1 tier(s)
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, node-tools), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound)
plan-tier: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); app1 was not found wanting and is left as it is; passed on their own and kept: app2; node-tools failed its gate on anchor in tier 0: not healthy within -1s of its apply: raised since it was sent: machine.anchor.core-behind — anchor runs the node tools it was last sent, not yet reported applied, and no plan is rolling them out (its settle window runs to the gate's bound); put back node-tools to c1 on anchor, in one send; none reported left as it was
plan-tier: tier 0 built; sent 3 module(s) to anchor first in one send (app1, app2, app3), the rest once its gate passes
app1's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app2's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
app3's build c2 failed its gate on anchor and was put back to c1: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full
plan-tier: app1 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app2 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; app3 failed its gate on anchor in tier 0: not healthy within -1s of its apply: anchor as a whole: raised since it was sent: machine.anchor.disk-full — anchor's root file system is full; put back app1 to c1, app2 to c1, app3 to c1 on anchor, in one send; none reported left as it was
plan-gate: tier 0 built; sent 1 module(s) to anchor first in one send (app), the rest once its gate passes
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back
plan-gate: the send to anchor in tier 0 failed its gate: not healthy within -1s of its apply: anchor has not reported on what it was sent; app was left as it was — anchor already ran app c2, or a build identical to it, before the send, so nothing of it moved and nothing is put back; none reported left as it was
tier 0: FAIL
FAIL github.com/novox/mesh-controller/cmd/mesh-controller 162.913s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.048s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.047s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.044s
ok github.com/novox/mesh-controller/examples/route-proxy 1.250s
ok github.com/novox/mesh-controller/internal/artifacts 1.079s
ok github.com/novox/mesh-controller/internal/broker 2.651s
ok github.com/novox/mesh-controller/internal/builder 1.824s
--- FAIL: TestEveryCatalogueManifestParses (0.27s)
catalogue_check_test.go:44: i3status-rust: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:44: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
catalogue_check_test.go:57: 117 manifests, 70 named endpoints, 30 routed endpoints resolved
--- FAIL: TestNoCatalogueManifestNamesAnInstallation (0.77s)
catalogue_check_test.go:80: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
catalogue_check_test.go:80: ../../../mesh-catalog/modules/power/module.json: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryCatalogueIdentityFitsWhatItRequires (0.08s)
catalogue_check_test.go:142: ../../../mesh-catalog/modules/i3status-rust/module.json: this is not a module manifest: json: unknown field "renders"
--- FAIL: TestEveryCatalogueManifestDeclaresWhatItMounts (0.22s)
mounts_test.go:87: i3status-rust: this is not a module manifest: json: unknown field "renders"
mounts_test.go:87: power: this is not a module manifest: a state is either a name or {name, history, ttl-seconds}: json: unknown field "per-machine"
--- FAIL: TestEveryManifestsEventNamesAreLocal (0.05s)
no_subjects_test.go:82: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesResolverHoldersWriteTheFileAndProvideSplitDNS (0.05s)
node_resolver_test.go:156: i3status-rust: json: unknown field "renders"
--- FAIL: TestTheCataloguesUplinksWriteTheResolverFileAndNothingElseDoes (0.05s)
resolver_file_is_the_uplinks_test.go:26: i3status-rust: json: unknown field "renders"
--- FAIL: TestEveryManifestInUseClaimsASeatTheMeshDefines (0.05s)
seats_test.go:215: ../../../mesh-catalog/modules/i3status-rust/module.json: json: unknown field "renders"
--- FAIL: TestEveryManifestsStateIsLocalAndEveryReadIsKept (0.05s)
state_test.go:73: i3status-rust: json: unknown field "renders"
FAIL
FAIL github.com/novox/mesh-controller/internal/catalogue 2.932s
ok github.com/novox/mesh-controller/internal/conditions 2.238s
ok github.com/novox/mesh-controller/internal/envfile 1.064s
ok github.com/novox/mesh-controller/internal/facts 1.053s
ok github.com/novox/mesh-controller/internal/identity 4.728s
ok github.com/novox/mesh-controller/internal/inventory 79.118s
ok github.com/novox/mesh-controller/internal/lease 17.704s
ok github.com/novox/mesh-controller/internal/licences 4.292s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.034s
ok github.com/novox/mesh-controller/internal/link 46.045s
ok github.com/novox/mesh-controller/internal/lint 2.091s
ok github.com/novox/mesh-controller/internal/outward 1.073s
ok github.com/novox/mesh-controller/internal/overlay 1.071s
ok github.com/novox/mesh-controller/internal/secrets 1.533s
ok github.com/novox/mesh-controller/internal/store 3.467s
ok github.com/novox/mesh-controller/internal/testbus 1.224s
ok github.com/novox/mesh-controller/internal/token 1.014s
FAIL
```
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 ace as build-1791471643275203044 (builds --log build-1791471643275203044).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T15:00:23Z 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-08T15:00:23Z
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.031s
ok github.com/novox/mesh-controller/cmd/mesh-controller 159.801s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/route-proxy 1.165s
ok github.com/novox/mesh-controller/internal/artifacts 1.032s
ok github.com/novox/mesh-controller/internal/broker 2.473s
ok github.com/novox/mesh-controller/internal/builder 1.823s
ok github.com/novox/mesh-controller/internal/catalogue 4.094s
ok github.com/novox/mesh-controller/internal/conditions 2.198s
ok github.com/novox/mesh-controller/internal/envfile 1.076s
ok github.com/novox/mesh-controller/internal/facts 1.084s
ok github.com/novox/mesh-controller/internal/identity 4.081s
ok github.com/novox/mesh-controller/internal/inventory 71.350s
ok github.com/novox/mesh-controller/internal/lease 17.718s
ok github.com/novox/mesh-controller/internal/licences 3.676s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.029s
ok github.com/novox/mesh-controller/internal/link 43.842s
ok github.com/novox/mesh-controller/internal/lint 1.918s
ok github.com/novox/mesh-controller/internal/outward 1.058s
ok github.com/novox/mesh-controller/internal/overlay 1.047s
ok github.com/novox/mesh-controller/internal/secrets 1.425s
ok github.com/novox/mesh-controller/internal/store 3.234s
ok github.com/novox/mesh-controller/internal/testbus 1.175s
ok github.com/novox/mesh-controller/internal/token 1.016s
**Merge check** at `48412767`
- `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 ace as `build-1791471643275203044` (`builds --log build-1791471643275203044`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T15:00:23Z 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-08T15:00:23Z
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.031s
ok github.com/novox/mesh-controller/cmd/mesh-controller 159.801s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/route-proxy 1.165s
ok github.com/novox/mesh-controller/internal/artifacts 1.032s
ok github.com/novox/mesh-controller/internal/broker 2.473s
ok github.com/novox/mesh-controller/internal/builder 1.823s
ok github.com/novox/mesh-controller/internal/catalogue 4.094s
ok github.com/novox/mesh-controller/internal/conditions 2.198s
ok github.com/novox/mesh-controller/internal/envfile 1.076s
ok github.com/novox/mesh-controller/internal/facts 1.084s
ok github.com/novox/mesh-controller/internal/identity 4.081s
ok github.com/novox/mesh-controller/internal/inventory 71.350s
ok github.com/novox/mesh-controller/internal/lease 17.718s
ok github.com/novox/mesh-controller/internal/licences 3.676s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.029s
ok github.com/novox/mesh-controller/internal/link 43.842s
ok github.com/novox/mesh-controller/internal/lint 1.918s
ok github.com/novox/mesh-controller/internal/outward 1.058s
ok github.com/novox/mesh-controller/internal/overlay 1.047s
ok github.com/novox/mesh-controller/internal/secrets 1.425s
ok github.com/novox/mesh-controller/internal/store 3.234s
ok github.com/novox/mesh-controller/internal/testbus 1.175s
ok github.com/novox/mesh-controller/internal/token 1.016s
```
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 g14 as build-1791477104098811484 (builds --log build-1791477104098811484).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T16:26: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-08T16:26: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.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 225.285s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/route-proxy 1.198s
ok github.com/novox/mesh-controller/internal/artifacts 1.054s
ok github.com/novox/mesh-controller/internal/broker 2.719s
ok github.com/novox/mesh-controller/internal/builder 3.061s
ok github.com/novox/mesh-controller/internal/catalogue 4.155s
ok github.com/novox/mesh-controller/internal/conditions 2.146s
ok github.com/novox/mesh-controller/internal/envfile 1.029s
ok github.com/novox/mesh-controller/internal/facts 1.031s
ok github.com/novox/mesh-controller/internal/identity 5.137s
ok github.com/novox/mesh-controller/internal/inventory 84.777s
ok github.com/novox/mesh-controller/internal/lease 17.719s
ok github.com/novox/mesh-controller/internal/licences 4.706s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.010s
ok github.com/novox/mesh-controller/internal/link 45.842s
ok github.com/novox/mesh-controller/internal/lint 1.924s
ok github.com/novox/mesh-controller/internal/outward 1.031s
ok github.com/novox/mesh-controller/internal/overlay 1.020s
ok github.com/novox/mesh-controller/internal/secrets 1.404s
ok github.com/novox/mesh-controller/internal/store 3.362s
ok github.com/novox/mesh-controller/internal/testbus 1.183s
ok github.com/novox/mesh-controller/internal/token 1.020s
**Merge check** at `a1b7be88`
- `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 g14 as `build-1791477104098811484` (`builds --log build-1791477104098811484`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T16:26: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-08T16:26: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.038s
ok github.com/novox/mesh-controller/cmd/mesh-controller 225.285s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/route-proxy 1.198s
ok github.com/novox/mesh-controller/internal/artifacts 1.054s
ok github.com/novox/mesh-controller/internal/broker 2.719s
ok github.com/novox/mesh-controller/internal/builder 3.061s
ok github.com/novox/mesh-controller/internal/catalogue 4.155s
ok github.com/novox/mesh-controller/internal/conditions 2.146s
ok github.com/novox/mesh-controller/internal/envfile 1.029s
ok github.com/novox/mesh-controller/internal/facts 1.031s
ok github.com/novox/mesh-controller/internal/identity 5.137s
ok github.com/novox/mesh-controller/internal/inventory 84.777s
ok github.com/novox/mesh-controller/internal/lease 17.719s
ok github.com/novox/mesh-controller/internal/licences 4.706s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.010s
ok github.com/novox/mesh-controller/internal/link 45.842s
ok github.com/novox/mesh-controller/internal/lint 1.924s
ok github.com/novox/mesh-controller/internal/outward 1.031s
ok github.com/novox/mesh-controller/internal/overlay 1.020s
ok github.com/novox/mesh-controller/internal/secrets 1.404s
ok github.com/novox/mesh-controller/internal/store 3.362s
ok github.com/novox/mesh-controller/internal/testbus 1.183s
ok github.com/novox/mesh-controller/internal/token 1.020s
```
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 novox as build-1791536952486526139 (builds --log build-1791536952486526139).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 52 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 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-09T08:07:39Z 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-09T08:07:39Z
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.039s
ok github.com/novox/mesh-controller/cmd/mesh-controller 221.201s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.027s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/route-proxy 1.115s
ok github.com/novox/mesh-controller/internal/artifacts 1.055s
ok github.com/novox/mesh-controller/internal/broker 2.794s
ok github.com/novox/mesh-controller/internal/builder 2.510s
ok github.com/novox/mesh-controller/internal/catalogue 5.090s
ok github.com/novox/mesh-controller/internal/conditions 2.502s
ok github.com/novox/mesh-controller/internal/envfile 1.028s
ok github.com/novox/mesh-controller/internal/facts 1.032s
ok github.com/novox/mesh-controller/internal/identity 4.961s
ok github.com/novox/mesh-controller/internal/inventory 90.489s
ok github.com/novox/mesh-controller/internal/lease 17.667s
ok github.com/novox/mesh-controller/internal/licences 4.512s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 54.484s
ok github.com/novox/mesh-controller/internal/lint 2.187s
ok github.com/novox/mesh-controller/internal/outward 1.035s
ok github.com/novox/mesh-controller/internal/overlay 1.022s
ok github.com/novox/mesh-controller/internal/secrets 1.462s
ok github.com/novox/mesh-controller/internal/store 3.377s
ok github.com/novox/mesh-controller/internal/testbus 1.179s
ok github.com/novox/mesh-controller/internal/token 1.016s
**Merge check** at `5ef52011`
- `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 novox as `build-1791536952486526139` (`builds --log build-1791536952486526139`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 52 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 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-09T08:07:39Z 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-09T08:07:39Z
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.039s
ok github.com/novox/mesh-controller/cmd/mesh-controller 221.201s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.027s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/route-proxy 1.115s
ok github.com/novox/mesh-controller/internal/artifacts 1.055s
ok github.com/novox/mesh-controller/internal/broker 2.794s
ok github.com/novox/mesh-controller/internal/builder 2.510s
ok github.com/novox/mesh-controller/internal/catalogue 5.090s
ok github.com/novox/mesh-controller/internal/conditions 2.502s
ok github.com/novox/mesh-controller/internal/envfile 1.028s
ok github.com/novox/mesh-controller/internal/facts 1.032s
ok github.com/novox/mesh-controller/internal/identity 4.961s
ok github.com/novox/mesh-controller/internal/inventory 90.489s
ok github.com/novox/mesh-controller/internal/lease 17.667s
ok github.com/novox/mesh-controller/internal/licences 4.512s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 54.484s
ok github.com/novox/mesh-controller/internal/lint 2.187s
ok github.com/novox/mesh-controller/internal/outward 1.035s
ok github.com/novox/mesh-controller/internal/overlay 1.022s
ok github.com/novox/mesh-controller/internal/secrets 1.462s
ok github.com/novox/mesh-controller/internal/store 3.377s
ok github.com/novox/mesh-controller/internal/testbus 1.179s
ok github.com/novox/mesh-controller/internal/token 1.016s
```
This PR now merges after mesh-controller #164, because it is rebased onto it at 926dbd7. The review of 2026-10-09 is addressed at head 0c828fb:
H2/H3: one judgement for root-free (probe_agent_root.go). A machine is root-free only when all three hold:
it names an agent account;
its node-engine judged that account unable to become root within 15 minutes (#164's agentConfined);
the login shell's execute is not served there.
Anything not read fails. The sudo module's measure is no longer used for the pass, because it ran as the very account an agent could become.
The judgement is read three ways. The agent-root probe raises a condition on it; a new in-process verb root-free ({"machines":[...]}) gives it live to the router; and a push composes verified-sender for a kind only while that kind's machine and the router's both pass (broker.Records.RootFree). Memberships are composed only at a push, so the router's live call is the check that holds between pushes.
L4: a module of its own account is refused the node's operator account and the agent account.
Merge order: mesh-controller #164, then this PR, then #157. The installer-list test needs mesh-host main; with mesh-host #59 checked out beside it, that test fails here as expected.
This PR now merges after mesh-controller #164, because it is rebased onto it at 926dbd7. The review of 2026-10-09 is addressed at head 0c828fb:
- **H2/H3: one judgement for root-free** (`probe_agent_root.go`). A machine is root-free only when all three hold:
- it names an agent account;
- its node-engine judged that account unable to become root within 15 minutes (#164's `agentConfined`);
- the login shell's execute is not served there.
Anything not read fails. The sudo module's measure is no longer used for the pass, because it ran as the very account an agent could become.
- **The judgement is read three ways.** The `agent-root` probe raises a condition on it; a new in-process verb `root-free` (`{"machines":[...]}`) gives it live to the router; and a push composes `verified-sender` for a kind only while that kind's machine and the router's both pass (`broker.Records.RootFree`). Memberships are composed only at a push, so the router's live call is the check that holds between pushes.
- **L4**: a module of its own account is refused the node's operator account and the agent account.
- **Merge order**: mesh-controller #164, then this PR, then #157. The installer-list test needs mesh-host main; with mesh-host #59 checked out beside it, that test fails here as expected.
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-1791542327523676804 (builds --log build-1791542327523676804).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 53 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-09T08:07:39Z 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-09T08:07:39Z
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.036s
ok github.com/novox/mesh-controller/cmd/mesh-controller 198.051s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.059s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.063s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.039s
ok github.com/novox/mesh-controller/examples/route-proxy 1.239s
ok github.com/novox/mesh-controller/internal/artifacts 1.093s
ok github.com/novox/mesh-controller/internal/broker 2.784s
ok github.com/novox/mesh-controller/internal/builder 1.960s
ok github.com/novox/mesh-controller/internal/catalogue 5.009s
ok github.com/novox/mesh-controller/internal/conditions 2.516s
ok github.com/novox/mesh-controller/internal/envfile 1.061s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 4.801s
ok github.com/novox/mesh-controller/internal/inventory 84.934s
ok github.com/novox/mesh-controller/internal/lease 17.707s
ok github.com/novox/mesh-controller/internal/licences 4.366s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.057s
ok github.com/novox/mesh-controller/internal/link 53.283s
ok github.com/novox/mesh-controller/internal/lint 2.232s
ok github.com/novox/mesh-controller/internal/outward 1.091s
ok github.com/novox/mesh-controller/internal/overlay 1.068s
ok github.com/novox/mesh-controller/internal/secrets 1.556s
ok github.com/novox/mesh-controller/internal/store 3.494s
ok github.com/novox/mesh-controller/internal/testbus 1.257s
ok github.com/novox/mesh-controller/internal/token 1.018s
**Merge check** at `0c828fbf`
- `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-1791542327523676804` (`builds --log build-1791542327523676804`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 53 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-09T08:07:39Z 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-09T08:07:39Z
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.036s
ok github.com/novox/mesh-controller/cmd/mesh-controller 198.051s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.059s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.063s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.039s
ok github.com/novox/mesh-controller/examples/route-proxy 1.239s
ok github.com/novox/mesh-controller/internal/artifacts 1.093s
ok github.com/novox/mesh-controller/internal/broker 2.784s
ok github.com/novox/mesh-controller/internal/builder 1.960s
ok github.com/novox/mesh-controller/internal/catalogue 5.009s
ok github.com/novox/mesh-controller/internal/conditions 2.516s
ok github.com/novox/mesh-controller/internal/envfile 1.061s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 4.801s
ok github.com/novox/mesh-controller/internal/inventory 84.934s
ok github.com/novox/mesh-controller/internal/lease 17.707s
ok github.com/novox/mesh-controller/internal/licences 4.366s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.057s
ok github.com/novox/mesh-controller/internal/link 53.283s
ok github.com/novox/mesh-controller/internal/lint 2.232s
ok github.com/novox/mesh-controller/internal/outward 1.091s
ok github.com/novox/mesh-controller/internal/overlay 1.068s
ok github.com/novox/mesh-controller/internal/secrets 1.556s
ok github.com/novox/mesh-controller/internal/store 3.494s
ok github.com/novox/mesh-controller/internal/testbus 1.257s
ok github.com/novox/mesh-controller/internal/token 1.018s
```
The control-node withholds execute through its holder's setting since ADR 0268, so probe D-root read a
closed path as open. It now counts the verb as served while the holder's setting for that machine is
serve, or the bus hears execute answered there, or the bus could not be asked: a withheld value not yet
pushed, or a holder answering against its setting, is never taken for closed.
A machine where the router or a verified channel runs and the sudo module is absent or does not answer
made the probe fail to run, which raises nothing the router reads, so it went on approving there. Each
such machine now raises the same urgent condition, saying it was not measured.
The agent-root probe read the sudo module's answer, given in the machine's runtime as the very account
an agent could become, and took a missing account, a missing answer or no accounts as a pass. One
judgement now decides: the machine names an agent account its node-engine judged unable to become
root within 15 minutes (agentConfined, mesh-controller #164), and the login shell's execute is not
served there; anything not read is not free. The probe raises agent-root on it, the new root-free
verb answers it live for the router, and a push composes verified-sender for a kind only while its
machine and the router's pass it.
The router's contract names the machines as a JSON array. A verb's argument declared a list now takes
an array of names (or one text separated by commas), and refuses anything else in it.
The confirmation review asked who may answer root-free on the bus. Composed from the controller's own
manifest, the module principal of the machine running the controller and that machine's runtime were
granted the controller seat's tool subjects too: either could answer root-free, and the runtime's
credential is one an agent on that machine may hold. The controller's seat is now served by the
controller principal alone, in grants and memberships; TestOnlyTheServingControllerMayAnswerRootFree
failed before (3 answerers) and passes. And a machine waiting for its first setuid search is not
root-free, whatever ADR 0266's quiet window does to the self-check.
A private kind is where the router shows a link's code, and the code makes an account the operator's.
Registration refused a verified-sender holder on the machine's runtime and let a private one stand;
it now refuses both (the confirmation review of 2026-10-09, low).
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…
The confirmation review of 2026-10-09 found D-root and DA writing one key, machine.<m>.agent-root, from
two probes with different words, so it flapped every run; D-root is now root-not-free. D-root raised the
urgent condition after every node-engine restart while the first setuid search ran; it now keeps the
same quiet window as DA, and the root-free verb still answers that machine not free. agentConfined
takes the judging clock.
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 ace as build-1791550186197558366 (builds --log build-1791550186197558366).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 53 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-09T12:43:20Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-09T12:43:20Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 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.031s
ok github.com/novox/mesh-controller/cmd/mesh-controller 182.998s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.011s
ok github.com/novox/mesh-controller/examples/route-proxy 1.099s
ok github.com/novox/mesh-controller/internal/artifacts 1.032s
ok github.com/novox/mesh-controller/internal/broker 2.582s
ok github.com/novox/mesh-controller/internal/builder 1.856s
ok github.com/novox/mesh-controller/internal/catalogue 4.453s
ok github.com/novox/mesh-controller/internal/conditions 2.427s
ok github.com/novox/mesh-controller/internal/envfile 1.067s
ok github.com/novox/mesh-controller/internal/facts 1.069s
ok github.com/novox/mesh-controller/internal/identity 4.159s
ok github.com/novox/mesh-controller/internal/inventory 71.206s
ok github.com/novox/mesh-controller/internal/lease 17.765s
ok github.com/novox/mesh-controller/internal/licences 3.792s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.115s
ok github.com/novox/mesh-controller/internal/link 51.218s
ok github.com/novox/mesh-controller/internal/lint 2.086s
ok github.com/novox/mesh-controller/internal/outward 1.136s
ok github.com/novox/mesh-controller/internal/overlay 1.077s
ok github.com/novox/mesh-controller/internal/secrets 1.442s
ok github.com/novox/mesh-controller/internal/store 3.327s
ok github.com/novox/mesh-controller/internal/testbus 1.293s
ok github.com/novox/mesh-controller/internal/token 1.019s
**Merge check** at `c544c2a1`
- `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 ace as `build-1791550186197558366` (`builds --log build-1791550186197558366`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 53 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-09T12:43:20Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-09T12:43:20Z
modules the change moves:
- mesh-controller (changed)
machines:
- a machine (f35): composes
- holds mesh-dns-resolver (idt): composes
- holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
- a machine (yvbpsm): composes
a merge would rebuild 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.031s
ok github.com/novox/mesh-controller/cmd/mesh-controller 182.998s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.011s
ok github.com/novox/mesh-controller/examples/route-proxy 1.099s
ok github.com/novox/mesh-controller/internal/artifacts 1.032s
ok github.com/novox/mesh-controller/internal/broker 2.582s
ok github.com/novox/mesh-controller/internal/builder 1.856s
ok github.com/novox/mesh-controller/internal/catalogue 4.453s
ok github.com/novox/mesh-controller/internal/conditions 2.427s
ok github.com/novox/mesh-controller/internal/envfile 1.067s
ok github.com/novox/mesh-controller/internal/facts 1.069s
ok github.com/novox/mesh-controller/internal/identity 4.159s
ok github.com/novox/mesh-controller/internal/inventory 71.206s
ok github.com/novox/mesh-controller/internal/lease 17.765s
ok github.com/novox/mesh-controller/internal/licences 3.792s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.115s
ok github.com/novox/mesh-controller/internal/link 51.218s
ok github.com/novox/mesh-controller/internal/lint 2.086s
ok github.com/novox/mesh-controller/internal/outward 1.136s
ok github.com/novox/mesh-controller/internal/overlay 1.077s
ok github.com/novox/mesh-controller/internal/secrets 1.442s
ok github.com/novox/mesh-controller/internal/store 3.327s
ok github.com/novox/mesh-controller/internal/testbus 1.293s
ok github.com/novox/mesh-controller/internal/token 1.019s
```
Confirmation-review round (2026-10-09), rebased on main 63e85b2 (ADR 0266 #164/#174/#175/#177, #176, #178). New on top:
root-free is answered by the serving controller alone: the controller's own seat verbs are no longer granted (or put in memberships) to a module principal or runtime carrying the controller's module. TestOnlyTheServingControllerMayAnswerRootFree failed before (3 answerers), passes.
#175's quiet window does not make root-free free (TestAMachineWaitingForItsFirstSetuidSearchIsNotRootFree); D-root keeps the same quiet window and is now keyed root-not-free, apart from DA's agent-root (TestRootNotFreeIsQuietWhileTheFirstSearchRunsAndKeyedApartFromDA); agentConfined takes the clock.
a private kind's holder must run as its own account (registration), test failed before.
merge-check.sh passed locally on the head (= merge result, rebased on main), with mesh-host main beside it.
**Confirmation-review round (2026-10-09), rebased on main 63e85b2 (ADR 0266 #164/#174/#175/#177, #176, #178).** New on top:
- root-free is answered by the serving controller alone: the controller's own seat verbs are no longer granted (or put in memberships) to a module principal or runtime carrying the controller's module. `TestOnlyTheServingControllerMayAnswerRootFree` failed before (3 answerers), passes.
- #175's quiet window does not make root-free free (`TestAMachineWaitingForItsFirstSetuidSearchIsNotRootFree`); D-root keeps the same quiet window and is now keyed `root-not-free`, apart from DA's `agent-root` (`TestRootNotFreeIsQuietWhileTheFirstSearchRunsAndKeyedApartFromDA`); agentConfined takes the clock.
- a `private` kind's holder must run as its own account (registration), test failed before.
merge-check.sh passed locally on the head (= merge result, rebased on main), with mesh-host main beside it.
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.
Step 1 of hq ADR 0259 (hq #211; §8 as revised and accepted on 2026-10-08). The bus enforces who submits an ask and which channel answers. The controller refuses to place a trusted holder where an agent can reach it. Nothing in the controller knows Telegram.
Kinded benches, verbs named by their caller, proofs, records (as before)
kinded(channel and intake only),by-caller,proofsandrecords. A claim gainskindandcapabilities(fromchannel-capabilities/1). There is one holder per kind, and resolution treats each kind as its own holder.Changed after the security and correctness reviews of 2026-10-08
runs-as(new manifest field). A module running as its own account is served by a runtime of its own: the machine's runtime program, run as that account, serving that module alone, on the module's own bus credential. The machine's runtime never carries it and is given none of its words.verified-sender. Registration refuses it otherwise, and composing the machine's runtime refuses carrying it.verified-senderreaches the router only from a holder that runs as its own account. It is stripped from the membership otherwise.Only the bench's declarer (the router) puts work on a kind's queue and answers its proofs. Before, every user and every watcher could.
Probe D-root (self-check). On every machine where a module of its own account runs, it asks the sudo module's new
sudo_escalation(mesh-catalog #133) whether either of these can become root without a person:agent_account, or the operator's account while it names none;While either can, it raises the urgent condition
agent-root, in plain words. It fails today (agents run as the operator's account, which has passwordless sudo). It still fails after the agent-account change alone, because the login shell'sexecuteruns any command as the operator's account. It passes once both are closed (ADR 0259 §8, rule 3).Queues: a kinded or caller-named seat's queue is created at registration, held or not. Its workers have no delivery limit (the runtime backs off). A failed queue assertion is collected rather than ending the raise early.
seat --to/--addis refused on a kinded bench, because holdings have no kind column.Tests
internal/broker/seattraffic_test.go: as before, plus: only the router answers proofs and submits work; the machine's runtime never carries a trusted holder (and the runtime still composes); verified-sender is believed only from a holder of its own account.internal/catalogue/kinded_test.go: a trusted holder must run as its own account;runs-asrefusals.internal/catalogue/runtime_test.go: a module of its own account is served by its own runtime (its user, its credential, only itself), and is refused without the runtime program.cmd/mesh-controller/probe_agent_root_test.go: today fails; agents moved but the login shell still the runtime's fails; both closed passes; no agents and no login shell passes; the words are plain.cmd/mesh-controller/seats_test.go: a kinded bench is not handed over.sh merge-check.shpasses locally (the full suite with -race).Merge order: mesh-sdk #12 (tagged), then mesh-tools #23, then this, then mesh-controller #157 with mesh-host #59, then mesh-catalog #133 and #134 together. Do not merge without review.
Delivery
novox/mesh-controller@c544c2a17bef— superseded since 2026-10-09T14:30:56ZCovered: delivered after its walk was superseded: the walk plan-1791556256698631508, which took its walk plan-1791555486251741995 over, ended done
Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Group
feat/asks-answered-on-any-channel: novox/mesh-controller@c544c2a17b, novox/mesh-sdk@16984aafc6, novox/mesh-tools@127047edd6Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
85d6aa3fmesh/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: FAIL — its merge-check.sh failed: --- FAIL: TestEveryCatalogueManifestParses (0.21s)Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791469681714627413(builds --log build-1791469681714627413).Merge check at
3690c4ddmesh/merge-gate: ERROR — the merge gate could not judge the change: mesh-controller: the snapshot's i3status-rust is not a manifest: json: unknown field "renders" (modules: build-agent, mesh-controller, route-proxy)mesh/repo-check: FAIL — its merge-check.sh failed: --- FAIL: TestEveryCatalogueManifestParses (0.27s)Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on shanks as
build-1791470241386973335(builds --log build-1791470241386973335).3690c4dd9bto48412767efMerge check at
48412767mesh/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 ace as
build-1791471643275203044(builds --log build-1791471643275203044).48412767eftoa1b7be8896Merge check at
a1b7be88mesh/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 g14 as
build-1791477104098811484(builds --log build-1791477104098811484).a1b7be8896to5ef52011c9Merge check at
5ef52011mesh/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 novox as
build-1791536952486526139(builds --log build-1791536952486526139).5ef52011c9to0c828fbf96This PR now merges after mesh-controller #164, because it is rebased onto it at
926dbd7. The review of 2026-10-09 is addressed at head0c828fb:probe_agent_root.go). A machine is root-free only when all three hold:agentConfined);Anything not read fails. The sudo module's measure is no longer used for the pass, because it ran as the very account an agent could become.
agent-rootprobe raises a condition on it; a new in-process verbroot-free({"machines":[...]}) gives it live to the router; and a push composesverified-senderfor a kind only while that kind's machine and the router's both pass (broker.Records.RootFree). Memberships are composed only at a push, so the router's live call is the check that holds between pushes.Merge check at
0c828fbfmesh/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-1791542327523676804(builds --log build-1791542327523676804).0c828fbf96toc544c2a17bMerge check at
c544c2a1mesh/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 ace as
build-1791550186197558366(builds --log build-1791550186197558366).Confirmation-review round (2026-10-09), rebased on main
63e85b2(ADR 0266 #164/#174/#175/#177, #176, #178). New on top:TestOnlyTheServingControllerMayAnswerRootFreefailed before (3 answerers), passes.TestAMachineWaitingForItsFirstSetuidSearchIsNotRootFree); D-root keeps the same quiet window and is now keyedroot-not-free, apart from DA'sagent-root(TestRootNotFreeIsQuietWhileTheFirstSearchRunsAndKeyedApartFromDA); agentConfined takes the clock.privatekind's holder must run as its own account (registration), test failed before.merge-check.sh passed locally on the head (= merge result, rebased on main), with mesh-host main beside it.