Merges are assembled in a rolling window, and each batch is walked once (hq ADR 0276, issue 362) #197

Merged
mesh-admin merged 6 commits from fix/362-a-walk-answers-every-merge-it-contains into main 2026-10-10 12:26:20 +00:00
Contributor

hq ADR 0276 (merges are assembled in a rolling window, and each batch is delivered by one walk), issue 362 (two merges seconds apart left their delivery waiting for a person). The controller's side; mesh-delivery's side is novox/mesh-catalog#171, whose wire this follows.

What changes

  • The merge window. A merge into a branch a module follows joins the open batch instead of opening a walk. Each merge restarts the window; it closes when no merge came for merge-window (90 s) or at merge-window-at-most (10 min) after the batch's first merge. The settings are the controller's (module.json declares both, written to ${dir:mesh-state}/merge-window.json, read at every look, so a change needs no restart).
  • Kept in the store. Migration 0089 adds batched_merge (every merge heard, its times, the forge's announcement, the batch or walk answering it; keyed by repository and commit, so a merge is never doubled) and release_plan.commits. The batch itself is a plan record in the state assembling or queued; cut, it keeps its id and is building. A restarted controller resumes the window where it stood. The controller has no consolidated schema file: a fresh install runs the numbered migrations, so the migration is both.
  • One walk per batch. Per repository the latest merge of its branch, planned with every file the batch's merges of it changed; one plan across repositories, Commits naming each repository's commit, built at the branch, which holds them. ADR 0267's build sources work per repository unchanged (movesOfMerge is the old merge handler's body).
  • One walk at a time. A batch is cut only when no started walk is open; merges during a walk join the next batch (queued, batch.behind). A started walk is never superseded. A walk still waiting for mesh-delivery's word is folded into the next batch's walk (superseded, delivery.taken_over_by), its unbuilt modules planned there. ADR 0218 decision 3's supersession and the issue 349 rule are gone (supersededBy, laterOnTheBranch).
  • The controller's own path (decided during the build, 2026-10-10): a merge touching a module whose walk waits for nobody's word never shares a batch with one that waits for mesh-delivery's. It gets a batch of its own (batch.own) with its own window; the catalogue batch cuts by the normal rules and queues behind the own-path walk. An own-path walk being cut folds no waiting catalogue walk: its merges are batched again behind the own-path walk (rebatchWaiting), the waiting walk naming that batch in taken_over_by. No catalogue delivery skips its turn.
  • A late merge (heard after a later merge of its branch was put in a walk) is answered by that walk when it builds everything the merge moves: the batch of its kind, the open walk, or a done walk, which then names it at once. Otherwise it joins the next batch (a narrowing of decision 4: a done walk that never built a module the late merge moved does not cover it).
  • A failed walk marks nothing delivered; each merge it carried in a later commit is walked alone on its own commit (delivery.alone), newest first, one walk each; the first done answers the older ones (covered). A stopped walk, or one stopped or closed by hand, starts no search.
  • A delivery group inside a walk. Merges of two repositories or more from one head branch name are a group; orderOf (ADR 0249, unchanged) gives the pairs, read with the after: lines from the merge's body (link.SourceMoved gains number and body); each pair becomes group-order edges, which order tiers and gate as built-by does.
  • Shown. plans lists the batches first: assembling: 13 s left (at the latest 00:31:09); grouped: novox/mesh-catalog@48bda475 (answers 553b7191), novox/mesh-controller@a6bc0931; plan not yet calculated, or queued behind plan-…; an own-path batch says (on the controller's own path). Every save is plan-moved; delivery-walks answers the batches too.
  • Bounds. S18: a batch still assembling a minute past its maximum with no walk open. S19: a batch queued behind an open walk past that walk's bound (its repository's tier bound times its tiers), naming the walk. S16 now names every merge a waiting walk answers, not the commit a supersession may have ended. The catch-up of missed merges skips a merge already kept in a batch.

Wire (with mesh-catalog#171)

Inside the walk record's delivery object:

  • merges: [{"repository","commit","carried"?}], every merge the walk or batch answers; carried is the later commit of its repository that carries it, omitted for the walk's own commit.
  • taken_over_by: on a walk folded before it started; its note also begins superseded at tier N by plan-X (, as the PR's fallback reads. It can name a batch (state queued/assembling), which keeps its id when cut.
  • batch: {"closes_at","at_most","behind"?,"own"?} while the record is a batch (state assembling or queued).
  • alone: on a walk of one merge on its own commit after a failed walk.
  • Top level: commits [{"repository","branch","commit","merged"}]; repository/commit keep the newest merge's.

A mesh-delivery that predates this reads the top-level repository/commit as before and ignores the rest: an earlier merge of a repository is not linked and is held after ten minutes, and it would read a record in assembling as a walk of unknown state. Roll out mesh-delivery (#171) first. It is merged as d2af46b and is the build of mesh-delivery the mesh holds on novox.

Tests

batches_test.go: two merges 18 s apart → one walk at the later commit naming both, built at the branch; three repositories in one window → one walk; a merge at second 80 restarts the window; the maximum closes a busy one; plans and plan-moved show the assembling batch; a merge during a walk joins the next batch and the started walk is never superseded; a waiting walk is folded, and not let go beside a started one; a late merge answered by the later walk, or the next batch when that walk never built what it moves, in a one-module repository too; the catch-up keeps what a cut made history; a failed walk walks its earlier merges alone at their own commits, stops at the first delivered, refuses a retry, and a stopped one starts no search; a group's order becomes tiers (none without a group); the batch survives a restart and a redelivered merge is not doubled; the window settings; a removed file is the last merge's word; a controller merge and catalogue merges in one window are two batches, the catalogue's walk waits for its word and is batched again behind the controller's walk, and no catalogue module is asked without the word; S16 names the merges. S18 and S19 are in the signals table, raised past their bounds and not before.

Mutation pass (each part removed, a named test fails): no path union, every merge a new batch, the window from the first merge, no maximum, no one-at-a-time, no fold, no search, no covering, no group edges, batch not listed, stopped walk searched, done walk answers nothing, answered despite unbuilt modules, S16 naming one commit, latest by arrival, folded walk left open, no stored batch, late merge read as history, cut reading history, letGo beside a started walk, retry after the search, removed by any merge, nothing owed, catch-up ignoring the record, a walk alone at the branch, a batch walk pinned, own path never, own batch folding the waiting walk, one batch for both kinds — all killed. Returning false for the late merge's batch case is equivalent (the open batch is the one it joins anyway).

After review

An independent review found two blockers, now fixed:

  • A late merge was dropped. A merge heard after a later merge of its branch was cut read as history: the cut marks its modules seen. hearMerge and the catch-up now judge it by the record. A merge that touches a held module, on a branch the controller keeps merges of, made since its first kept merge on that branch (less mergeGrace), is kept (owedLate, owedToTheRecord).
  • What gets built. A batch's walk builds at the branch, which holds every commit it carries. Only a walk alone is built on its own commit, as decision 3 says. A walk alone therefore records no build source, because the builder records one only at the trunk head.

Also fixed after review: deliver refuses while another started walk is open; plans retry refuses while any walk is open and once a failed walk's merges were moved to the search; Plan.CommitOn matches repository and branch; a batch queues behind a walk waiting for its word while the search runs; removal is decided by the last merge that changed the file; every merge of a batch is planned as news. The mixed-batch gap the review raised is closed by the own-path rule above.

Left as is:

  • Readers that use one repository. Tier bounds and some log lines read Plan.Repository, the newest merge's repository.
  • One-time window after rollout. Merges of a branch made in the ten minutes before its first kept merge may be acted on once more by the catch-up, and reported as missed (S5).

Not here

  • mesh-delivery's side: novox/mesh-catalog#171 (merged).
  • hq: ADR 0276's own-path note and progressive insight, to-be 45's S18/S19, issue 362 resolved: novox/hq, branch issues/362-resolved.
  • The lab's replay R362 (mesh-lab#75, merged).
hq ADR 0276 (merges are assembled in a rolling window, and each batch is delivered by one walk), issue 362 (two merges seconds apart left their delivery waiting for a person). The controller's side; mesh-delivery's side is novox/mesh-catalog#171, whose wire this follows. ## What changes - **The merge window.** A merge into a branch a module follows joins the open **batch** instead of opening a walk. Each merge restarts the window; it closes when no merge came for `merge-window` (90 s) or at `merge-window-at-most` (10 min) after the batch's first merge. The settings are the controller's (module.json declares both, written to `${dir:mesh-state}/merge-window.json`, read at every look, so a change needs no restart). - **Kept in the store.** Migration 0089 adds `batched_merge` (every merge heard, its times, the forge's announcement, the batch or walk answering it; keyed by repository and commit, so a merge is never doubled) and `release_plan.commits`. The batch itself is a plan record in the state `assembling` or `queued`; cut, it keeps its id and is `building`. A restarted controller resumes the window where it stood. The controller has no consolidated schema file: a fresh install runs the numbered migrations, so the migration is both. - **One walk per batch.** Per repository the latest merge of its branch, planned with every file the batch's merges of it changed; one plan across repositories, `Commits` naming each repository's commit, built at the branch, which holds them. ADR 0267's build sources work per repository unchanged (`movesOfMerge` is the old merge handler's body). - **One walk at a time.** A batch is cut only when no started walk is open; merges during a walk join the next batch (`queued`, `batch.behind`). A started walk is never superseded. A walk still waiting for mesh-delivery's word is folded into the next batch's walk (`superseded`, `delivery.taken_over_by`), its unbuilt modules planned there. ADR 0218 decision 3's supersession and the issue 349 rule are gone (`supersededBy`, `laterOnTheBranch`). - **The controller's own path** (decided during the build, 2026-10-10): a merge touching a module whose walk waits for nobody's word never shares a batch with one that waits for mesh-delivery's. It gets a batch of its own (`batch.own`) with its own window; the catalogue batch cuts by the normal rules and queues behind the own-path walk. An own-path walk being cut folds no waiting catalogue walk: its merges are batched again behind the own-path walk (`rebatchWaiting`), the waiting walk naming that batch in `taken_over_by`. No catalogue delivery skips its turn. - **A late merge** (heard after a later merge of its branch was put in a walk) is answered by that walk when it builds everything the merge moves: the batch of its kind, the open walk, or a done walk, which then names it at once. Otherwise it joins the next batch (a narrowing of decision 4: a done walk that never built a module the late merge moved does not cover it). - **A failed walk** marks nothing delivered; each merge it carried in a later commit is walked alone on its own commit (`delivery.alone`), newest first, one walk each; the first done answers the older ones (`covered`). A stopped walk, or one stopped or closed by hand, starts no search. - **A delivery group inside a walk.** Merges of two repositories or more from one head branch name are a group; `orderOf` (ADR 0249, unchanged) gives the pairs, read with the `after:` lines from the merge's body (`link.SourceMoved` gains `number` and `body`); each pair becomes `group-order` edges, which order tiers and gate as built-by does. - **Shown.** `plans` lists the batches first: `assembling: 13 s left (at the latest 00:31:09); grouped: novox/mesh-catalog@48bda475 (answers 553b7191), novox/mesh-controller@a6bc0931; plan not yet calculated`, or `queued behind plan-…`; an own-path batch says `(on the controller's own path)`. Every save is `plan-moved`; `delivery-walks` answers the batches too. - **Bounds.** S18: a batch still assembling a minute past its maximum with no walk open. S19: a batch queued behind an open walk past that walk's bound (its repository's tier bound times its tiers), naming the walk. S16 now names every merge a waiting walk answers, not the commit a supersession may have ended. The catch-up of missed merges skips a merge already kept in a batch. ## Wire (with mesh-catalog#171) Inside the walk record's `delivery` object: - `merges`: `[{"repository","commit","carried"?}]`, every merge the walk or batch answers; `carried` is the later commit of its repository that carries it, omitted for the walk's own commit. - `taken_over_by`: on a walk folded before it started; its note also begins `superseded at tier N by plan-X (`, as the PR's fallback reads. It can name a batch (state `queued`/`assembling`), which keeps its id when cut. - `batch`: `{"closes_at","at_most","behind"?,"own"?}` while the record is a batch (`state` `assembling` or `queued`). - `alone`: on a walk of one merge on its own commit after a failed walk. - Top level: `commits` `[{"repository","branch","commit","merged"}]`; `repository`/`commit` keep the newest merge's. **A mesh-delivery that predates this** reads the top-level `repository`/`commit` as before and ignores the rest: an earlier merge of a repository is not linked and is held after ten minutes, and it would read a record in `assembling` as a walk of unknown state. **Roll out mesh-delivery (#171) first.** It is merged as d2af46b and is the build of mesh-delivery the mesh holds on novox. ## Tests `batches_test.go`: two merges 18 s apart → one walk at the later commit naming both, built at the branch; three repositories in one window → one walk; a merge at second 80 restarts the window; the maximum closes a busy one; `plans` and `plan-moved` show the assembling batch; a merge during a walk joins the next batch and the started walk is never superseded; a waiting walk is folded, and not let go beside a started one; a late merge answered by the later walk, or the next batch when that walk never built what it moves, in a one-module repository too; the catch-up keeps what a cut made history; a failed walk walks its earlier merges alone at their own commits, stops at the first delivered, refuses a retry, and a stopped one starts no search; a group's order becomes tiers (none without a group); the batch survives a restart and a redelivered merge is not doubled; the window settings; a removed file is the last merge's word; a controller merge and catalogue merges in one window are two batches, the catalogue's walk waits for its word and is batched again behind the controller's walk, and no catalogue module is asked without the word; S16 names the merges. S18 and S19 are in the signals table, raised past their bounds and not before. Mutation pass (each part removed, a named test fails): no path union, every merge a new batch, the window from the first merge, no maximum, no one-at-a-time, no fold, no search, no covering, no group edges, batch not listed, stopped walk searched, done walk answers nothing, answered despite unbuilt modules, S16 naming one commit, latest by arrival, folded walk left open, no stored batch, late merge read as history, cut reading history, letGo beside a started walk, retry after the search, removed by any merge, nothing owed, catch-up ignoring the record, a walk alone at the branch, a batch walk pinned, own path never, own batch folding the waiting walk, one batch for both kinds — all killed. Returning `false` for the late merge's batch case is equivalent (the open batch is the one it joins anyway). ## After review An independent review found two blockers, now fixed: - **A late merge was dropped.** A merge heard after a later merge of its branch was cut read as history: the cut marks its modules seen. hearMerge and the catch-up now judge it by the record. A merge that touches a held module, on a branch the controller keeps merges of, made since its first kept merge on that branch (less mergeGrace), is kept (`owedLate`, `owedToTheRecord`). - **What gets built.** A batch's walk builds at the branch, which holds every commit it carries. Only a walk alone is built on its own commit, as decision 3 says. A walk alone therefore records no build source, because the builder records one only at the trunk head. Also fixed after review: `deliver` refuses while another started walk is open; `plans retry` refuses while any walk is open and once a failed walk's merges were moved to the search; `Plan.CommitOn` matches repository and branch; a batch queues behind a walk waiting for its word while the search runs; removal is decided by the last merge that changed the file; every merge of a batch is planned as news. The mixed-batch gap the review raised is closed by the own-path rule above. Left as is: - **Readers that use one repository.** Tier bounds and some log lines read `Plan.Repository`, the newest merge's repository. - **One-time window after rollout.** Merges of a branch made in the ten minutes before its first kept merge may be acted on once more by the catch-up, and reported as missed (S5). ## Not here - mesh-delivery's side: novox/mesh-catalog#171 (merged). - hq: ADR 0276's own-path note and progressive insight, to-be 45's S18/S19, issue 362 resolved: novox/hq, branch issues/362-resolved. - The lab's replay R362 (mesh-lab#75, merged).
Author
Contributor

Delivery novox/mesh-controller@3ced96fc6f8a — delivered since 2026-10-10T12:35:44Z

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves

Machines

  • mesh-controller on novox: passed — healthy 3 times over 3m38s
  • mesh-controller on the rest running it: sent
  • build-agent on ace: passed — healthy 3 times over 3m32s
  • build-agent on the rest running it: sent

Transitions

  • 2026-10-10 12:14 (new) → proposed (announced): novox/mesh-controller#197's head announced
  • 2026-10-10 12:22 proposed → checked (checked): the verdict names this commit
  • 2026-10-10 12:22 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-10 12:26 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-10 12:26 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
  • 2026-10-10 12:35 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@3ced96fc6f8a` — **delivered** since 2026-10-10T12:35:44Z **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves **Machines** - mesh-controller on novox: passed — healthy 3 times over 3m38s - mesh-controller on the rest running it: sent - build-agent on ace: passed — healthy 3 times over 3m32s - build-agent on the rest running it: sent **Transitions** - 2026-10-10 12:14 (new) → proposed (announced): novox/mesh-controller#197's head announced - 2026-10-10 12:22 proposed → checked (checked): the verdict names this commit - 2026-10-10 12:22 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-10 12:26 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-10 12:26 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit - 2026-10-10 12:35 delivering → delivered (done): its walk is done, carrying its own commit: every machine of its deploy plan passed, or was left as its policy says The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
jschoubben added 1 commit 2026-10-10 11:21:41 +00:00
Assemble merges in a rolling window and walk each batch once (hq ADR 0276, issue 362)
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery superseded: a newer head of the same pull request
96fc4209d3
Every merge opened a walk and the next merge of the branch superseded it: two
catalogue merges 18 s apart left a walk no delivery held, and the operator
started it by hand 58 minutes later. A merge now joins the open batch, kept in
the store (migration 0089), which is cut into one walk when no merge came for
merge-window (90 s) or at merge-window-at-most (10 min): one commit per
repository, the latest of its branch, with every file the batch's merges
changed. One walk at a time; a started walk is never superseded, a waiting one
is folded into the next. The walk names every merge it answers on the wire
(delivery.merges, taken_over_by, batch). A failed walk walks its earlier merges
alone, newest first, until one is delivered. A delivery group's order becomes
tier edges inside the walk. plans shows the batch assembling; S18 and S19
bound its waits; S16 names the merges a waiting walk answers.
jschoubben force-pushed fix/362-a-walk-answers-every-merge-it-contains from 066b1e8559 to 96fc4209d3 2026-10-10 11:21:41 +00:00 Compare
Author
Contributor

Merge check at 066b1e85

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

Run by the build seat on g14 as build-1791631189368305284 (builds --log build-1791631189368305284).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:15:18Z 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-10T11:15:18Z

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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window)
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.034s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	216.609s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.014s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.041s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.015s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.215s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.059s
ok  	github.com/novox/mesh-controller/internal/broker	2.739s
ok  	github.com/novox/mesh-controller/internal/builder	2.665s
ok  	github.com/novox/mesh-controller/internal/catalogue	4.676s
ok  	github.com/novox/mesh-controller/internal/conditions	2.462s
ok  	github.com/novox/mesh-controller/internal/envfile	1.036s
ok  	github.com/novox/mesh-controller/internal/facts	1.036s
ok  	github.com/novox/mesh-controller/internal/identity	4.380s
ok  	github.com/novox/mesh-controller/internal/inventory	76.689s
ok  	github.com/novox/mesh-controller/internal/lease	17.699s
ok  	github.com/novox/mesh-controller/internal/licences	4.001s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.012s
ok  	github.com/novox/mesh-controller/internal/link	51.393s
ok  	github.com/novox/mesh-controller/internal/lint	2.117s
ok  	github.com/novox/mesh-controller/internal/outward	1.042s
ok  	github.com/novox/mesh-controller/internal/overlay	1.028s
ok  	github.com/novox/mesh-controller/internal/secrets	1.474s
ok  	github.com/novox/mesh-controller/internal/store	3.344s
ok  	github.com/novox/mesh-controller/internal/testbus	1.174s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
**Merge check** at `066b1e85` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on g14 as `build-1791631189368305284` (`builds --log build-1791631189368305284`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:15:18Z 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-10T11:15:18Z 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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window) - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/build_source_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.034s ok github.com/novox/mesh-controller/cmd/mesh-controller 216.609s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.041s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.015s ok github.com/novox/mesh-controller/examples/route-proxy 1.215s ok github.com/novox/mesh-controller/internal/artifacts 1.059s ok github.com/novox/mesh-controller/internal/broker 2.739s ok github.com/novox/mesh-controller/internal/builder 2.665s ok github.com/novox/mesh-controller/internal/catalogue 4.676s ok github.com/novox/mesh-controller/internal/conditions 2.462s ok github.com/novox/mesh-controller/internal/envfile 1.036s ok github.com/novox/mesh-controller/internal/facts 1.036s ok github.com/novox/mesh-controller/internal/identity 4.380s ok github.com/novox/mesh-controller/internal/inventory 76.689s ok github.com/novox/mesh-controller/internal/lease 17.699s ok github.com/novox/mesh-controller/internal/licences 4.001s ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s ok github.com/novox/mesh-controller/internal/link 51.393s ok github.com/novox/mesh-controller/internal/lint 2.117s ok github.com/novox/mesh-controller/internal/outward 1.042s ok github.com/novox/mesh-controller/internal/overlay 1.028s ok github.com/novox/mesh-controller/internal/secrets 1.474s ok github.com/novox/mesh-controller/internal/store 3.344s ok github.com/novox/mesh-controller/internal/testbus 1.174s ok github.com/novox/mesh-controller/internal/token 1.017s ```
Author
Contributor

Merge check at 96fc4209

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

Run by the build seat on novox as build-1791631310746926892 (builds --log build-1791631310746926892).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:15:18Z 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-10T11:15:18Z

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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window)
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.050s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	256.617s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.019s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.028s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.129s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.059s
ok  	github.com/novox/mesh-controller/internal/broker	3.437s
ok  	github.com/novox/mesh-controller/internal/builder	7.320s
ok  	github.com/novox/mesh-controller/internal/catalogue	5.106s
ok  	github.com/novox/mesh-controller/internal/conditions	2.596s
ok  	github.com/novox/mesh-controller/internal/envfile	1.036s
ok  	github.com/novox/mesh-controller/internal/facts	1.036s
ok  	github.com/novox/mesh-controller/internal/identity	7.246s
ok  	github.com/novox/mesh-controller/internal/inventory	100.116s
ok  	github.com/novox/mesh-controller/internal/lease	17.744s
ok  	github.com/novox/mesh-controller/internal/licences	6.925s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.014s
ok  	github.com/novox/mesh-controller/internal/link	55.753s
ok  	github.com/novox/mesh-controller/internal/lint	2.192s
ok  	github.com/novox/mesh-controller/internal/outward	1.033s
ok  	github.com/novox/mesh-controller/internal/overlay	1.022s
ok  	github.com/novox/mesh-controller/internal/secrets	1.433s
ok  	github.com/novox/mesh-controller/internal/store	4.574s
ok  	github.com/novox/mesh-controller/internal/testbus	1.197s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
**Merge check** at `96fc4209` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on novox as `build-1791631310746926892` (`builds --log build-1791631310746926892`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:15:18Z 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-10T11:15:18Z 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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window) - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.050s ok github.com/novox/mesh-controller/cmd/mesh-controller 256.617s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.019s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.028s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.020s ok github.com/novox/mesh-controller/examples/route-proxy 1.129s ok github.com/novox/mesh-controller/internal/artifacts 1.059s ok github.com/novox/mesh-controller/internal/broker 3.437s ok github.com/novox/mesh-controller/internal/builder 7.320s ok github.com/novox/mesh-controller/internal/catalogue 5.106s ok github.com/novox/mesh-controller/internal/conditions 2.596s ok github.com/novox/mesh-controller/internal/envfile 1.036s ok github.com/novox/mesh-controller/internal/facts 1.036s ok github.com/novox/mesh-controller/internal/identity 7.246s ok github.com/novox/mesh-controller/internal/inventory 100.116s ok github.com/novox/mesh-controller/internal/lease 17.744s ok github.com/novox/mesh-controller/internal/licences 6.925s ok github.com/novox/mesh-controller/internal/licences/adapters 1.014s ok github.com/novox/mesh-controller/internal/link 55.753s ok github.com/novox/mesh-controller/internal/lint 2.192s ok github.com/novox/mesh-controller/internal/outward 1.033s ok github.com/novox/mesh-controller/internal/overlay 1.022s ok github.com/novox/mesh-controller/internal/secrets 1.433s ok github.com/novox/mesh-controller/internal/store 4.574s ok github.com/novox/mesh-controller/internal/testbus 1.197s ok github.com/novox/mesh-controller/internal/token 1.017s ```
jschoubben added 2 commits 2026-10-10 11:41:56 +00:00
Walk the earlier merges of a failed walk as news (hq ADR 0276 review)
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
mesh/repo-check fail: its merge-check.sh failed: FAIL github.com/novox/mesh-controller/cmd/mesh-controller 256.824s
mesh/delivery superseded: a newer head of the same pull request
2887691414
Author
Contributor

Merge check at 28876914

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: FAIL github.com/novox/mesh-controller/cmd/mesh-controller 256.824s

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

Run by the build seat on novox as build-1791632522039225859 (builds --log build-1791632522039225859).

build-1791629305883334560: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before
build-1791629365883334560: 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-1791629305883334560 was: registered with its artifacts, no move
build-1791629425883334560: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before
build-1791629485883334560: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before
build-1791629306419237761: nats is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-1791629306419237761: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791629366419237761: 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-1791629306419237761 was: registered with its artifacts, no move
every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade
build-1791629426419237761: 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
notes on laptop:
  + places.data.owner
  + places.data.path
  + x
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
notes on laptop:
  ~ x
  the layer it replaced is kept: settings show notes --node laptop --history
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
{
  "places": {
    "data": {
      "owner": "1001:1001",
      "path": "/srv/notes"
    }
  },
  "x": 1
}
keycloak on anchor:
  + issuer
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
power on anchor:
  + lid
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
keycloak on anchor:
  ~ x
  the layer it replaced is kept: settings show keycloak --node anchor --history
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
claude-code on laptop:
  + managed_settings.permissions.allow
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
claude-code on the whole mesh:
  + mcp_servers.listener.type
  + mcp_servers.listener.url
  run `push --behind` to send it to the machines running it
{
  "managed_settings": {
    "permissions": {
      "allow": [
        "Bash"
      ]
    }
  }
}
keycloak on anchor:
  + url
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
{
  "url": "https://id.example"
}
notifier on anchor:
  + font
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
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 passed on its own and is kept; 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: plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (node-tools, app1), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer
plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts
plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; node-tools was put back when it broke; passed on their own and kept: app1; none reported left as it was
plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (app1, node-tools), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer
plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts
plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; app1 passed on its own and is kept; none reported left as it was
FAIL
FAIL	github.com/novox/mesh-controller/cmd/mesh-controller	256.824s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.021s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.027s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.015s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.137s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.064s
ok  	github.com/novox/mesh-controller/internal/broker	2.931s
ok  	github.com/novox/mesh-controller/internal/builder	3.619s
ok  	github.com/novox/mesh-controller/internal/catalogue	5.498s
ok  	github.com/novox/mesh-controller/internal/conditions	2.555s
ok  	github.com/novox/mesh-controller/internal/envfile	1.032s
ok  	github.com/novox/mesh-controller/internal/facts	1.031s
ok  	github.com/novox/mesh-controller/internal/identity	5.625s
ok  	github.com/novox/mesh-controller/internal/inventory	100.252s
ok  	github.com/novox/mesh-controller/internal/lease	17.687s
ok  	github.com/novox/mesh-controller/internal/licences	5.232s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.009s
ok  	github.com/novox/mesh-controller/internal/link	56.479s
ok  	github.com/novox/mesh-controller/internal/lint	2.341s
ok  	github.com/novox/mesh-controller/internal/outward	1.043s
ok  	github.com/novox/mesh-controller/internal/overlay	1.022s
ok  	github.com/novox/mesh-controller/internal/secrets	1.490s
ok  	github.com/novox/mesh-controller/internal/store	3.479s
ok  	github.com/novox/mesh-controller/internal/testbus	1.189s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
FAIL
**Merge check** at `28876914` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: FAIL github.com/novox/mesh-controller/cmd/mesh-controller 256.824s **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on novox as `build-1791632522039225859` (`builds --log build-1791632522039225859`). ``` build-1791629305883334560: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before build-1791629365883334560: 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-1791629305883334560 was: registered with its artifacts, no move build-1791629425883334560: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before build-1791629485883334560: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before build-1791629306419237761: nats is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal build-1791629306419237761: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before build-1791629366419237761: 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-1791629306419237761 was: registered with its artifacts, no move every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade build-1791629426419237761: 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 notes on laptop: + places.data.owner + places.data.path + x run `plan laptop --diff` to see what it changes, `push laptop` to send it notes on laptop: ~ x the layer it replaced is kept: settings show notes --node laptop --history run `plan laptop --diff` to see what it changes, `push laptop` to send it { "places": { "data": { "owner": "1001:1001", "path": "/srv/notes" } }, "x": 1 } keycloak on anchor: + issuer + x run `plan anchor --diff` to see what it changes, `push anchor` to send it power on anchor: + lid + x run `plan anchor --diff` to see what it changes, `push anchor` to send it keycloak on anchor: ~ x the layer it replaced is kept: settings show keycloak --node anchor --history run `plan anchor --diff` to see what it changes, `push anchor` to send it claude-code on laptop: + managed_settings.permissions.allow run `plan laptop --diff` to see what it changes, `push laptop` to send it claude-code on the whole mesh: + mcp_servers.listener.type + mcp_servers.listener.url run `push --behind` to send it to the machines running it { "managed_settings": { "permissions": { "allow": [ "Bash" ] } } } keycloak on anchor: + url run `plan anchor --diff` to see what it changes, `push anchor` to send it { "url": "https://id.example" } notifier on anchor: + font run `plan anchor --diff` to see what it changes, `push anchor` to send it 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 passed on its own and is kept; 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: plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (node-tools, app1), the rest once its gate passes node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; node-tools was put back when it broke; passed on their own and kept: app1; none reported left as it was plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (app1, node-tools), the rest once its gate passes node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; app1 passed on its own and is kept; none reported left as it was FAIL FAIL github.com/novox/mesh-controller/cmd/mesh-controller 256.824s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.021s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.027s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.015s ok github.com/novox/mesh-controller/examples/route-proxy 1.137s ok github.com/novox/mesh-controller/internal/artifacts 1.064s ok github.com/novox/mesh-controller/internal/broker 2.931s ok github.com/novox/mesh-controller/internal/builder 3.619s ok github.com/novox/mesh-controller/internal/catalogue 5.498s ok github.com/novox/mesh-controller/internal/conditions 2.555s ok github.com/novox/mesh-controller/internal/envfile 1.032s ok github.com/novox/mesh-controller/internal/facts 1.031s ok github.com/novox/mesh-controller/internal/identity 5.625s ok github.com/novox/mesh-controller/internal/inventory 100.252s ok github.com/novox/mesh-controller/internal/lease 17.687s ok github.com/novox/mesh-controller/internal/licences 5.232s ok github.com/novox/mesh-controller/internal/licences/adapters 1.009s ok github.com/novox/mesh-controller/internal/link 56.479s ok github.com/novox/mesh-controller/internal/lint 2.341s ok github.com/novox/mesh-controller/internal/outward 1.043s ok github.com/novox/mesh-controller/internal/overlay 1.022s ok github.com/novox/mesh-controller/internal/secrets 1.490s ok github.com/novox/mesh-controller/internal/store 3.479s ok github.com/novox/mesh-controller/internal/testbus 1.189s ok github.com/novox/mesh-controller/internal/token 1.017s FAIL ```
jschoubben added 1 commit 2026-10-10 11:50:37 +00:00
Keep a merge a cut made history, and build a batch's walk at the branch (hq ADR 0276 review)
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
mesh/repo-check pass: its merge-check.sh passed
0e0e143055
jschoubben added 1 commit 2026-10-10 11:54:42 +00:00
Owe a merge to the record from its branch's first kept merge (hq ADR 0276 review)
mesh/delivery superseded: a newer head of the same pull request
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
mesh/repo-check pass: its merge-check.sh passed
065cfa0d1d
Author
Contributor

Merge check at 0e0e1430

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

Run by the build seat on g14 as build-1791633042015855120 (builds --log build-1791633042015855120).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:45:18Z 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-10T11:45:18Z

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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window)
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.033s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	221.276s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.025s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.017s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.196s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.045s
ok  	github.com/novox/mesh-controller/internal/broker	2.709s
ok  	github.com/novox/mesh-controller/internal/builder	2.643s
ok  	github.com/novox/mesh-controller/internal/catalogue	4.670s
ok  	github.com/novox/mesh-controller/internal/conditions	2.398s
ok  	github.com/novox/mesh-controller/internal/envfile	1.023s
ok  	github.com/novox/mesh-controller/internal/facts	1.027s
ok  	github.com/novox/mesh-controller/internal/identity	4.317s
ok  	github.com/novox/mesh-controller/internal/inventory	78.932s
ok  	github.com/novox/mesh-controller/internal/lease	17.675s
ok  	github.com/novox/mesh-controller/internal/licences	3.913s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.011s
ok  	github.com/novox/mesh-controller/internal/link	52.005s
ok  	github.com/novox/mesh-controller/internal/lint	2.044s
ok  	github.com/novox/mesh-controller/internal/outward	1.041s
ok  	github.com/novox/mesh-controller/internal/overlay	1.028s
ok  	github.com/novox/mesh-controller/internal/secrets	1.463s
ok  	github.com/novox/mesh-controller/internal/store	3.201s
ok  	github.com/novox/mesh-controller/internal/testbus	1.176s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
**Merge check** at `0e0e1430` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on g14 as `build-1791633042015855120` (`builds --log build-1791633042015855120`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:45:18Z 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-10T11:45:18Z 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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window) - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.033s ok github.com/novox/mesh-controller/cmd/mesh-controller 221.276s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.020s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.025s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s ok github.com/novox/mesh-controller/examples/route-proxy 1.196s ok github.com/novox/mesh-controller/internal/artifacts 1.045s ok github.com/novox/mesh-controller/internal/broker 2.709s ok github.com/novox/mesh-controller/internal/builder 2.643s ok github.com/novox/mesh-controller/internal/catalogue 4.670s ok github.com/novox/mesh-controller/internal/conditions 2.398s ok github.com/novox/mesh-controller/internal/envfile 1.023s ok github.com/novox/mesh-controller/internal/facts 1.027s ok github.com/novox/mesh-controller/internal/identity 4.317s ok github.com/novox/mesh-controller/internal/inventory 78.932s ok github.com/novox/mesh-controller/internal/lease 17.675s ok github.com/novox/mesh-controller/internal/licences 3.913s ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s ok github.com/novox/mesh-controller/internal/link 52.005s ok github.com/novox/mesh-controller/internal/lint 2.044s ok github.com/novox/mesh-controller/internal/outward 1.041s ok github.com/novox/mesh-controller/internal/overlay 1.028s ok github.com/novox/mesh-controller/internal/secrets 1.463s ok github.com/novox/mesh-controller/internal/store 3.201s ok github.com/novox/mesh-controller/internal/testbus 1.176s ok github.com/novox/mesh-controller/internal/token 1.017s ```
Author
Contributor

Merge check at 065cfa0d

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

Run by the build seat on ace as build-1791633286314485292 (builds --log build-1791633286314485292).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:45:18Z 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-10T11:45:18Z

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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window)
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.033s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	197.299s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.025s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.038s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.023s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.129s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.073s
ok  	github.com/novox/mesh-controller/internal/broker	2.605s
ok  	github.com/novox/mesh-controller/internal/builder	2.457s
ok  	github.com/novox/mesh-controller/internal/catalogue	4.458s
ok  	github.com/novox/mesh-controller/internal/conditions	2.451s
ok  	github.com/novox/mesh-controller/internal/envfile	1.033s
ok  	github.com/novox/mesh-controller/internal/facts	1.036s
ok  	github.com/novox/mesh-controller/internal/identity	4.068s
ok  	github.com/novox/mesh-controller/internal/inventory	74.245s
ok  	github.com/novox/mesh-controller/internal/lease	17.678s
ok  	github.com/novox/mesh-controller/internal/licences	3.711s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.024s
ok  	github.com/novox/mesh-controller/internal/link	51.248s
ok  	github.com/novox/mesh-controller/internal/lint	2.053s
ok  	github.com/novox/mesh-controller/internal/outward	1.084s
ok  	github.com/novox/mesh-controller/internal/overlay	1.071s
ok  	github.com/novox/mesh-controller/internal/secrets	1.423s
ok  	github.com/novox/mesh-controller/internal/store	3.244s
ok  	github.com/novox/mesh-controller/internal/testbus	1.231s
ok  	github.com/novox/mesh-controller/internal/token	1.016s
**Merge check** at `065cfa0d` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on ace as `build-1791633286314485292` (`builds --log build-1791633286314485292`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:45:18Z 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-10T11:45:18Z 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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window) - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.033s ok github.com/novox/mesh-controller/cmd/mesh-controller 197.299s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.025s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.038s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.023s ok github.com/novox/mesh-controller/examples/route-proxy 1.129s ok github.com/novox/mesh-controller/internal/artifacts 1.073s ok github.com/novox/mesh-controller/internal/broker 2.605s ok github.com/novox/mesh-controller/internal/builder 2.457s ok github.com/novox/mesh-controller/internal/catalogue 4.458s ok github.com/novox/mesh-controller/internal/conditions 2.451s ok github.com/novox/mesh-controller/internal/envfile 1.033s ok github.com/novox/mesh-controller/internal/facts 1.036s ok github.com/novox/mesh-controller/internal/identity 4.068s ok github.com/novox/mesh-controller/internal/inventory 74.245s ok github.com/novox/mesh-controller/internal/lease 17.678s ok github.com/novox/mesh-controller/internal/licences 3.711s ok github.com/novox/mesh-controller/internal/licences/adapters 1.024s ok github.com/novox/mesh-controller/internal/link 51.248s ok github.com/novox/mesh-controller/internal/lint 2.053s ok github.com/novox/mesh-controller/internal/outward 1.084s ok github.com/novox/mesh-controller/internal/overlay 1.071s ok github.com/novox/mesh-controller/internal/secrets 1.423s ok github.com/novox/mesh-controller/internal/store 3.244s ok github.com/novox/mesh-controller/internal/testbus 1.231s ok github.com/novox/mesh-controller/internal/token 1.016s ```
jschoubben added 1 commit 2026-10-10 12:14:08 +00:00
A merge on the controller's own path never shares a batch with one that waits for the delivery's word (hq ADR 0276, decided during the build)
mesh/merge-gate pass: builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without …
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered
3ced96fc6f
jschoubben force-pushed fix/362-a-walk-answers-every-merge-it-contains from d0c9b9b4bc to 3ced96fc6f 2026-10-10 12:14:08 +00:00 Compare
Author
Contributor

Merge check at d0c9b9b4

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: FAIL — its merge-check.sh failed: FAIL github.com/novox/mesh-controller/cmd/mesh-controller 226.280s

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

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

build-1791630991979045383: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before
build-1791631051979045383: 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-1791630991979045383 was: registered with its artifacts, no move
build-1791631111979045383: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before
build-1791631171979045383: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before
build-1791630992463233009: nats is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal
build-1791630992463233009: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before
build-1791631052463233009: 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-1791630992463233009 was: registered with its artifacts, no move
every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade
build-1791631112463233009: 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
notes on laptop:
  + places.data.owner
  + places.data.path
  + x
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
notes on laptop:
  ~ x
  the layer it replaced is kept: settings show notes --node laptop --history
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
{
  "places": {
    "data": {
      "owner": "1001:1001",
      "path": "/srv/notes"
    }
  },
  "x": 1
}
keycloak on anchor:
  + issuer
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
power on anchor:
  + lid
  + x
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
keycloak on anchor:
  ~ x
  the layer it replaced is kept: settings show keycloak --node anchor --history
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
claude-code on laptop:
  + managed_settings.permissions.allow
  run `plan laptop --diff` to see what it changes, `push laptop` to send it
claude-code on the whole mesh:
  + mcp_servers.listener.type
  + mcp_servers.listener.url
  run `push --behind` to send it to the machines running it
{
  "managed_settings": {
    "permissions": {
      "allow": [
        "Bash"
      ]
    }
  }
}
keycloak on anchor:
  + url
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
{
  "url": "https://id.example"
}
notifier on anchor:
  + font
  run `plan anchor --diff` to see what it changes, `push anchor` to send it
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 passed on its own and is kept; 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: plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (node-tools, app1), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer
plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts
plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; node-tools was put back when it broke; passed on their own and kept: app1; none reported left as it was
plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (app1, node-tools), the rest once its gate passes
node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer
plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts
plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; app1 passed on its own and is kept; none reported left as it was
FAIL
FAIL	github.com/novox/mesh-controller/cmd/mesh-controller	226.280s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.010s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.035s
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.082s
ok  	github.com/novox/mesh-controller/internal/broker	2.833s
ok  	github.com/novox/mesh-controller/internal/builder	2.746s
ok  	github.com/novox/mesh-controller/internal/catalogue	5.148s
ok  	github.com/novox/mesh-controller/internal/conditions	2.588s
ok  	github.com/novox/mesh-controller/internal/envfile	1.046s
ok  	github.com/novox/mesh-controller/internal/facts	1.056s
ok  	github.com/novox/mesh-controller/internal/identity	4.763s
ok  	github.com/novox/mesh-controller/internal/inventory	88.370s
ok  	github.com/novox/mesh-controller/internal/lease	17.696s
ok  	github.com/novox/mesh-controller/internal/licences	4.332s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.037s
ok  	github.com/novox/mesh-controller/internal/link	54.074s
ok  	github.com/novox/mesh-controller/internal/lint	2.296s
ok  	github.com/novox/mesh-controller/internal/outward	1.083s
ok  	github.com/novox/mesh-controller/internal/overlay	1.073s
ok  	github.com/novox/mesh-controller/internal/secrets	1.529s
ok  	github.com/novox/mesh-controller/internal/store	3.485s
ok  	github.com/novox/mesh-controller/internal/testbus	1.242s
ok  	github.com/novox/mesh-controller/internal/token	1.015s
FAIL
**Merge check** at `d0c9b9b4` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **FAIL** — its merge-check.sh failed: FAIL github.com/novox/mesh-controller/cmd/mesh-controller 226.280s **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on shanks as `build-1791634260735600549` (`builds --log build-1791634260735600549`). ``` build-1791630991979045383: the build seat did not say whether c1aaaaaa is on its repository's trunk (it predates ADR 0238); registered as before build-1791631051979045383: 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-1791630991979045383 was: registered with its artifacts, no move build-1791631111979045383: the build seat did not say whether c3cccccc is on its repository's trunk (it predates ADR 0238); registered as before build-1791631171979045383: the build seat did not say whether c4dddddd is on its repository's trunk (it predates ADR 0238); registered as before build-1791630992463233009: nats is new to the catalogue, and novox/mesh-catalog on the git seat is no repository the catalogue builds a module from — registered, as asked at the controller's terminal build-1791630992463233009: the build seat did not say whether n1111111 is on its repository's trunk (it predates ADR 0238); registered as before build-1791631052463233009: 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-1791630992463233009 was: registered with its artifacts, no move every machine running nats runs the build the mesh holds (n2222222): nothing to upgrade build-1791631112463233009: 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 notes on laptop: + places.data.owner + places.data.path + x run `plan laptop --diff` to see what it changes, `push laptop` to send it notes on laptop: ~ x the layer it replaced is kept: settings show notes --node laptop --history run `plan laptop --diff` to see what it changes, `push laptop` to send it { "places": { "data": { "owner": "1001:1001", "path": "/srv/notes" } }, "x": 1 } keycloak on anchor: + issuer + x run `plan anchor --diff` to see what it changes, `push anchor` to send it power on anchor: + lid + x run `plan anchor --diff` to see what it changes, `push anchor` to send it keycloak on anchor: ~ x the layer it replaced is kept: settings show keycloak --node anchor --history run `plan anchor --diff` to see what it changes, `push anchor` to send it claude-code on laptop: + managed_settings.permissions.allow run `plan laptop --diff` to see what it changes, `push laptop` to send it claude-code on the whole mesh: + mcp_servers.listener.type + mcp_servers.listener.url run `push --behind` to send it to the machines running it { "managed_settings": { "permissions": { "allow": [ "Bash" ] } } } keycloak on anchor: + url run `plan anchor --diff` to see what it changes, `push anchor` to send it { "url": "https://id.example" } notifier on anchor: + font run `plan anchor --diff` to see what it changes, `push anchor` to send it 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 passed on its own and is kept; 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: plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (node-tools, app1), the rest once its gate passes node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; node-tools was put back when it broke; passed on their own and kept: app1; none reported left as it was plan-tier: tier 0 built; sent 2 module(s) to anchor first in one send (app1, node-tools), the rest once its gate passes node-tools's build c2 failed its gate on anchor and was put back to c1: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer plan-tier: put back at once: node-tools (the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer); the rest of the send judged to their own verdicts plan-tier: the send to anchor in tier 0 failed its gate: the witness on anchor judged the node-tools c2 and rolled-back: the node tools did not answer; app1 passed on its own and is kept; none reported left as it was FAIL FAIL github.com/novox/mesh-controller/cmd/mesh-controller 226.280s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.010s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.035s 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.082s ok github.com/novox/mesh-controller/internal/broker 2.833s ok github.com/novox/mesh-controller/internal/builder 2.746s ok github.com/novox/mesh-controller/internal/catalogue 5.148s ok github.com/novox/mesh-controller/internal/conditions 2.588s ok github.com/novox/mesh-controller/internal/envfile 1.046s ok github.com/novox/mesh-controller/internal/facts 1.056s ok github.com/novox/mesh-controller/internal/identity 4.763s ok github.com/novox/mesh-controller/internal/inventory 88.370s ok github.com/novox/mesh-controller/internal/lease 17.696s ok github.com/novox/mesh-controller/internal/licences 4.332s ok github.com/novox/mesh-controller/internal/licences/adapters 1.037s ok github.com/novox/mesh-controller/internal/link 54.074s ok github.com/novox/mesh-controller/internal/lint 2.296s ok github.com/novox/mesh-controller/internal/outward 1.083s ok github.com/novox/mesh-controller/internal/overlay 1.073s ok github.com/novox/mesh-controller/internal/secrets 1.529s ok github.com/novox/mesh-controller/internal/store 3.485s ok github.com/novox/mesh-controller/internal/testbus 1.242s ok github.com/novox/mesh-controller/internal/token 1.015s FAIL ```
Author
Contributor

Merge check at 3ced96fc

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller)
  • mesh/repo-check: PASS — its merge-check.sh passed

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

  • tier 0: mesh-controller
  • tier 1: build-agent
  • ace: receives build-agent
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go

Run by the build seat on novox as build-1791634476100154670 (builds --log build-1791634476100154670).

--- the gate: build-agent, mesh-controller
mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
files asking for a setting without saying whether it is trusted: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:55:18Z 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-10T11:55:18Z

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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window)
  - a machine (yvbpsm): composes

a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller

notes:
  - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280)
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.037s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	261.569s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.557s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.916s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.558s
ok  	github.com/novox/mesh-controller/examples/route-proxy	2.011s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.590s
ok  	github.com/novox/mesh-controller/internal/broker	7.023s
ok  	github.com/novox/mesh-controller/internal/builder	9.908s
ok  	github.com/novox/mesh-controller/internal/catalogue	6.006s
ok  	github.com/novox/mesh-controller/internal/conditions	4.207s
ok  	github.com/novox/mesh-controller/internal/envfile	1.018s
ok  	github.com/novox/mesh-controller/internal/facts	1.564s
ok  	github.com/novox/mesh-controller/internal/identity	8.811s
ok  	github.com/novox/mesh-controller/internal/inventory	100.951s
ok  	github.com/novox/mesh-controller/internal/lease	17.618s
ok  	github.com/novox/mesh-controller/internal/licences	8.098s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.009s
ok  	github.com/novox/mesh-controller/internal/link	57.400s
ok  	github.com/novox/mesh-controller/internal/lint	2.220s
ok  	github.com/novox/mesh-controller/internal/outward	1.042s
ok  	github.com/novox/mesh-controller/internal/overlay	1.023s
ok  	github.com/novox/mesh-controller/internal/secrets	1.418s
ok  	github.com/novox/mesh-controller/internal/store	4.609s
ok  	github.com/novox/mesh-controller/internal/testbus	1.180s
ok  	github.com/novox/mesh-controller/internal/token	1.016s
**Merge check** at `3ced96fc` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - ace: receives build-agent - g14: receives build-agent - novox: receives mesh-controller, build-agent - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - read by no module's build: cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go, cmd/mesh-controller/supersede_test.go Run by the build seat on novox as `build-1791634476100154670` (`builds --log build-1791634476100154670`). ``` --- the gate: build-agent, mesh-controller mesh-controller: ok, 55 tool(s); WARNING: merge-window ask(s) for a setting and do(es) not say whether it is trusted, so it counts as trusted: set at the terminal alone; say "trusted" false where nothing trusts it (novox/hq issue 339); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 files asking for a setting without saying whether it is trusted: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-10T11:55:18Z 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-10T11:55:18Z 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; the change adds 1 resource(s) and removes 0 (+file:mesh-controller.merge-window) - a machine (yvbpsm): composes a merge would rebuild 2 module(s) in 2 tier(s): build-agent, mesh-controller notes: - cmd/mesh-controller/batches_test.go, cmd/mesh-controller/delivery_test.go, cmd/mesh-controller/issue349_test.go, cmd/mesh-controller/queue_test.go, cmd/mesh-controller/signals_test.go and cmd/mesh-controller/supersede_test.go read by no module's build, and rebuild nothing (issue 280) --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.037s ok github.com/novox/mesh-controller/cmd/mesh-controller 261.569s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.557s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.916s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.558s ok github.com/novox/mesh-controller/examples/route-proxy 2.011s ok github.com/novox/mesh-controller/internal/artifacts 1.590s ok github.com/novox/mesh-controller/internal/broker 7.023s ok github.com/novox/mesh-controller/internal/builder 9.908s ok github.com/novox/mesh-controller/internal/catalogue 6.006s ok github.com/novox/mesh-controller/internal/conditions 4.207s ok github.com/novox/mesh-controller/internal/envfile 1.018s ok github.com/novox/mesh-controller/internal/facts 1.564s ok github.com/novox/mesh-controller/internal/identity 8.811s ok github.com/novox/mesh-controller/internal/inventory 100.951s ok github.com/novox/mesh-controller/internal/lease 17.618s ok github.com/novox/mesh-controller/internal/licences 8.098s ok github.com/novox/mesh-controller/internal/licences/adapters 1.009s ok github.com/novox/mesh-controller/internal/link 57.400s ok github.com/novox/mesh-controller/internal/lint 2.220s ok github.com/novox/mesh-controller/internal/outward 1.042s ok github.com/novox/mesh-controller/internal/overlay 1.023s ok github.com/novox/mesh-controller/internal/secrets 1.418s ok github.com/novox/mesh-controller/internal/store 4.609s ok github.com/novox/mesh-controller/internal/testbus 1.180s ok github.com/novox/mesh-controller/internal/token 1.016s ```
mesh-admin merged commit b9ceeace41 into main 2026-10-10 12:26:20 +00:00
mesh-admin deleted branch fix/362-a-walk-answers-every-merge-it-contains 2026-10-10 12:26:20 +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#197