node_report is one row per node, last write wins, and it decides whether a release plan moves on. A report carrying machine facts (outward links, held, firewall...) skips the design-25 staleness check in reported, so a reconcile report about an older declaration that arrived after the newer apply's report replaced it.
Enrolment.Heard now records the machine-facts half of any report as before, but when the report names a declaration other than node.sent it does not replace the stored account (RecordDoing) or owned list; it logs that it kept the facts and not the account. DoingOf now returns Declared.
Tests (need MESH_TEST_POSTGRES / make check): TestAnAccountOfAnOlderDeclarationDoesNotReplaceTheNewer (fails without the fix), TestAnAccountOfTheSentDeclarationReplacesTheKeptOne. gofmt, go vet, go test -p 1 ./... with postgres clean.
Pairs with novox/mesh-host (same branch name); hq issue 267.
`node_report` is one row per node, last write wins, and it decides whether a release plan moves on. A report carrying machine facts (outward links, held, firewall...) skips the design-25 staleness check in `reported`, so a reconcile report about an older declaration that arrived after the newer apply's report replaced it.
`Enrolment.Heard` now records the machine-facts half of any report as before, but when the report names a declaration other than `node.sent` it does not replace the stored account (`RecordDoing`) or owned list; it logs that it kept the facts and not the account. `DoingOf` now returns `Declared`.
Tests (need MESH_TEST_POSTGRES / `make check`): `TestAnAccountOfAnOlderDeclarationDoesNotReplaceTheNewer` (fails without the fix), `TestAnAccountOfTheSentDeclarationReplacesTheKeptOne`. gofmt, go vet, go test -p 1 ./... with postgres clean.
Pairs with novox/mesh-host (same branch name); hq issue 267.
The last report stored per node decides whether a release plan moves on,
and it was whichever arrived last. A report about a declaration the mesh
has moved past now records what it says about the machine but leaves the
account of the apply alone, so arrival order cannot undo the newer.
build-agent keeps data (ADR 0233): what it holds is backed up before it moves
route-proxy provides route: its consumers are sent again after it
route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-controller#74 merged; its head was not heard by this owner, so it is made from the forge's word
2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@e096b4595a23` — **held** since 2026-10-06T23:05:28Z
Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on.
**Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
- tier 0: mesh-controller
- tier 1: build-agent
- tier 2: route-proxy
- ace: receives build-agent, route-proxy
- g14: receives build-agent
- novox: receives mesh-controller, build-agent, route-proxy
- shanks: receives build-agent
- build-agent keeps data (ADR 0233): what it holds is backed up before it moves
- route-proxy provides route: its consumers are sent again after it
- route-proxy keeps data (ADR 0233): what it holds is backed up before it moves
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-controller#74 merged; its head was not heard by this owner, so it is made from the forge's word
- 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
node_reportis one row per node, last write wins, and it decides whether a release plan moves on. A report carrying machine facts (outward links, held, firewall...) skips the design-25 staleness check inreported, so a reconcile report about an older declaration that arrived after the newer apply's report replaced it.Enrolment.Heardnow records the machine-facts half of any report as before, but when the report names a declaration other thannode.sentit does not replace the stored account (RecordDoing) or owned list; it logs that it kept the facts and not the account.DoingOfnow returnsDeclared.Tests (need MESH_TEST_POSTGRES /
make check):TestAnAccountOfAnOlderDeclarationDoesNotReplaceTheNewer(fails without the fix),TestAnAccountOfTheSentDeclarationReplacesTheKeptOne. gofmt, go vet, go test -p 1 ./... with postgres clean.Pairs with novox/mesh-host (same branch name); hq issue 267.
Delivery
novox/mesh-controller@e096b4595a23— held since 2026-10-06T23:05:28ZHeld for a person: merged without a passing check: only a person decides that it goes on —
mesh-delivery.releasewith why lets it go on.Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.