Kinded benches, verbs named by their caller, proofs and records (hq ADR 0259 §3) #154

Merged
mesh-admin merged 11 commits from feat/asks-answered-on-any-channel into main 2026-10-09 14:17:43 +00:00
Contributor

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.
Author
Contributor

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@c544c2a17b, novox/mesh-sdk@16984aafc6, novox/mesh-tools@127047edd6

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.

<!-- 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`.
Author
Contributor

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
**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 ```
Author
Contributor

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
**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 ```
jschoubben force-pushed feat/asks-answered-on-any-channel from 3690c4dd9b to 48412767ef 2026-10-08 15:00:13 +00:00 Compare
Author
Contributor

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
**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 ```
jschoubben force-pushed feat/asks-answered-on-any-channel from 48412767ef to a1b7be8896 2026-10-08 16:31:34 +00:00 Compare
Author
Contributor

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
**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 ```
jschoubben force-pushed feat/asks-answered-on-any-channel from a1b7be8896 to 5ef52011c9 2026-10-09 09:09:06 +00:00 Compare
Author
Contributor

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
**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 ```
jschoubben force-pushed feat/asks-answered-on-any-channel from 5ef52011c9 to 0c828fbf96 2026-10-09 10:38:18 +00:00 Compare
Author
Contributor

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.
Author
Contributor

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
**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 ```
jschoubben added 11 commits 2026-10-09 12:49:39 +00:00
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).
Key root-not-free apart from DA, keep ADR 0266's quiet window there, and judge at one clock (hq ADR 0259 §8)
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…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery superseded: a newer delivery to the same trunk took over its walk
mesh/delivery-group group feat/asks-answered-on-any-channel closed: a member was closed before the group merged
c544c2a17b
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.
jschoubben force-pushed feat/asks-answered-on-any-channel from 0c828fbf96 to c544c2a17b 2026-10-09 12:49:39 +00:00 Compare
Author
Contributor

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
**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 ```
Author
Contributor

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.
mesh-admin merged commit 2913c54c29 into main 2026-10-09 14:17:43 +00:00
mesh-admin deleted branch feat/asks-answered-on-any-channel 2026-10-09 14:17:44 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#154