Write a module that leaves a node as removed in its have key, so a reader can tell it stopped (issue 1369) #121

Merged
mesh-tools merged 2 commits from fix/r3e-before-the-gate into main 2026-10-20 06:02:00 +00:00
Member

Fixes issue 1369; half of the delivery group fix/r3e-before-the-gate with mesh-sdk (issue 1370), delivered before design 47's release R3e.

When the node-engine applies a declaration that no longer holds a module it reported, it writes that module's have key once with phase removed (compare-and-set at the revision read; never deletes, ADR 0408 §4). Candidates are the modules this process wrote, the previous applied declaration's modules (report.Before, read from the kept declaration before it is replaced, so a restart loses nothing), and the last noted ones, minus the new declaration; a key that does not exist is never created. Why: ADR 0450 ¦ (as corrected) has the gate hold the seat only once every have key of today's mesh-delivery says removed; until now such a key stayed running for ever (R3e review finding G1b).

Pins mesh-sdk v0.1.14-0.20261020011849-ba684e54976b (this group's mesh-sdk head, for PhaseRemoved).

Tests: internal/link have_test.go (AC1-AC3, a refused removal retried, and TestARestartedNodeEngineWritesTheRemovalFromTheReportsBefore). Tries build-1792459399854697279 (6a2fb63b) and build-1792459609321068487 (150fadfe) passed; an earlier try failed only on the known flake issue 604.

Hardening found in review, not here: issue 1372.

Reviewed-by: review-r3e-pre@shanks at 150fadfe8b

Fixes issue 1369; half of the delivery group fix/r3e-before-the-gate with mesh-sdk (issue 1370), delivered before design 47's release R3e. When the node-engine applies a declaration that no longer holds a module it reported, it writes that module's have key once with phase `removed` (compare-and-set at the revision read; never deletes, ADR 0408 §4). Candidates are the modules this process wrote, the previous applied declaration's modules (`report.Before`, read from the kept declaration before it is replaced, so a restart loses nothing), and the last noted ones, minus the new declaration; a key that does not exist is never created. Why: ADR 0450 ¦ (as corrected) has the gate hold the seat only once every have key of today's mesh-delivery says removed; until now such a key stayed `running` for ever (R3e review finding G1b). Pins mesh-sdk v0.1.14-0.20261020011849-ba684e54976b (this group's mesh-sdk head, for PhaseRemoved). Tests: internal/link have_test.go (AC1-AC3, a refused removal retried, and TestARestartedNodeEngineWritesTheRemovalFromTheReportsBefore). Tries build-1792459399854697279 (6a2fb63b) and build-1792459609321068487 (150fadfe) passed; an earlier try failed only on the known flake issue 604. Hardening found in review, not here: issue 1372. Reviewed-by: review-r3e-pre@shanks at 150fadfe8bed4765cc83beeb9ed83f4acfc5f62d
mesh-tools added 2 commits 2026-10-20 01:28:55 +00:00
A module that left a node kept its have key at running for ever, so nothing could tell it stopped and the gate would never take the seat. The key is written once with the phase removed over the revision read, never deleted. Pins mesh-sdk to the commit that adds the phase.
Write a removal after a restart from the declaration the apply replaced (issue 1369)
mesh/repo-check head 150fadfe8bed merged into trunk 619e14aa8e57 — pass: its merge-check.sh passed
mesh/merge-gate head 150fadfe8bed merged into trunk 619e14aa8e57 — pass: group fix/r3e-before-the-gate composed: every machine composes with the change as …
mesh/delivery delivered
mesh/delivery-group group fix/r3e-before-the-gate delivered: every member is delivered
150fadfe8b
The set of modules this process wrote lives in memory, so a node-engine restarted before the apply that drops a module never wrote that module's removal. The report now names the modules the kept declaration held before, and they are removal candidates.
Author
Member

Delivery novox/mesh-host@150fadfe8bed — delivered since 2026-10-20T06:30:25Z

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

  • tier 0: mesh-host
  • ace: receives mesh-host
  • g14: receives mesh-host
  • novox: receives mesh-host
  • shanks: receives mesh-host
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine

Group fix/r3e-before-the-gate: novox/mesh-host@150fadfe8b, novox/mesh-sdk@ba684e5497

  • composed together: pass — every machine composes with the change as it did without (4 of 4 compose)

Machines

  • mesh-host on every machine running it: sent
  • mesh-sdk on every machine running it: sent
  • mesh-tools on every machine running it: sent
  • audit-logger on every machine running it: sent
  • confluence on every machine running it: sent
  • gitlab on every machine running it: sent
  • jira on every machine running it: sent
  • mesh-catalog on every machine running it: sent
  • model-usage on every machine running it: sent
  • openai-consumer on every machine running it: sent
  • route-adapter on every machine running it: sent
  • showcase on every machine running it: sent

Transitions

  • 2026-10-20 01:28 (new) → proposed (announced): novox/mesh-host#121's head announced
  • 2026-10-20 01:29 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-20 01:29 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-20 01:34 ready → proposed (recheck): Exception (issue 1373): its check passed at 01:29:46, but a second check asked 01:29:08 while the first ran ended in error at 01:30:13 (artifact store novox:5100 refused for a moment) and overwrote the passing mesh/merge-gate and mesh/repo-check with error on the forge; the delivery counts it ready while the forge says error, so its group fix/r3e-before-the-gate is never asked and nothing asks this check again. lead-47@shanks
  • 2026-10-20 01:36 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-20 01:36 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-20 05:57 ready → proposed (trunk moved): out of date: judged against trunk 2474bf2833, the trunk is now 619e14aa8e57; judged again on a recheck or when it is merged
  • 2026-10-20 05:58 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-20 05:58 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-20 06:03 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-20 06:03 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-20 06:30 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-host@150fadfe8bed` — **delivered** since 2026-10-20T06:30:25Z **Delivery plan** — builds mesh-host → ace, g14, novox, shanks; no bus step - tier 0: mesh-host - ace: receives mesh-host - g14: receives mesh-host - novox: receives mesh-host - shanks: receives mesh-host - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine **Group** `fix/r3e-before-the-gate`: novox/mesh-host@150fadfe8bed, novox/mesh-sdk@ba684e54976b - composed together: pass — every machine composes with the change as it did without (4 of 4 compose) **Machines** - mesh-host on every machine running it: sent - mesh-sdk on every machine running it: sent - mesh-tools on every machine running it: sent - audit-logger on every machine running it: sent - confluence on every machine running it: sent - gitlab on every machine running it: sent - jira on every machine running it: sent - mesh-catalog on every machine running it: sent - model-usage on every machine running it: sent - openai-consumer on every machine running it: sent - route-adapter on every machine running it: sent - showcase on every machine running it: sent **Transitions** - 2026-10-20 01:28 (new) → proposed (announced): novox/mesh-host#121's head announced - 2026-10-20 01:29 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-20 01:29 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-20 01:34 ready → proposed (recheck): Exception (issue 1373): its check passed at 01:29:46, but a second check asked 01:29:08 while the first ran ended in error at 01:30:13 (artifact store novox:5100 refused for a moment) and overwrote the passing mesh/merge-gate and mesh/repo-check with error on the forge; the delivery counts it ready while the forge says error, so its group fix/r3e-before-the-gate is never asked and nothing asks this check again. lead-47@shanks - 2026-10-20 01:36 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-20 01:36 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-20 05:57 ready → proposed (trunk moved): out of date: judged against trunk 2474bf28330f, the trunk is now 619e14aa8e57; judged again on a recheck or when it is merged - 2026-10-20 05:58 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-20 05:58 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-20 06:03 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-20 06:03 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-20 06:30 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`.
Author
Member

Merge check at 150fadfe

  • mesh/merge-gate: ERROR — the check could not run: the facts snapshot cannot be read, and a check without it judges nothing: cannot reach the artifact store at novox.internal:5100: Get "http://novox.internal:5100/v2/facts/manifests/latest": dial tcp 10.10.0.1:5100: connect: connection refused
  • mesh/repo-check: ERROR — the check could not run: the facts snapshot cannot be read, and a check without it judges nothing: cannot reach the artifact store at novox.internal:5100: Get "http://novox.internal:5100/v2/facts/manifests/latest": dial tcp 10.10.0.1:5100: connect: connection refused

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

  • tier 0: mesh-host
  • ace: receives mesh-host
  • g14: receives mesh-host
  • novox: receives mesh-host
  • shanks: receives mesh-host
  • grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine
  • read by no module's build: internal/link/have_test.go

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

**Merge check** at `150fadfe` - `mesh/merge-gate`: **ERROR** — the check could not run: the facts snapshot cannot be read, and a check without it judges nothing: cannot reach the artifact store at novox.internal:5100: Get "http://novox.internal:5100/v2/facts/manifests/latest": dial tcp 10.10.0.1:5100: connect: connection refused - `mesh/repo-check`: **ERROR** — the check could not run: the facts snapshot cannot be read, and a check without it judges nothing: cannot reach the artifact store at novox.internal:5100: Get "http://novox.internal:5100/v2/facts/manifests/latest": dial tcp 10.10.0.1:5100: connect: connection refused **Delivery plan** — builds mesh-host → ace, g14, novox, shanks; no bus step - tier 0: mesh-host - ace: receives mesh-host - g14: receives mesh-host - novox: receives mesh-host - shanks: receives mesh-host - grants step: if this changes what the bus's user list says (a new tool, subject or user), novox is sent that list alone, every build there kept, before mesh-host is judged on its first machine - read by no module's build: internal/link/have_test.go Run by the build seat on ace as `build-1792459746942960332` (`builds --log build-1792459746942960332`).
mesh-tools merged commit 454be9b269 into main 2026-10-20 06:02:00 +00:00
mesh-tools deleted branch fix/r3e-before-the-gate 2026-10-20 06:02:00 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-host#121