Keep every refused build by its id, so a plan never settles a refused build built and sends the old version (issue 1713) #446

Merged
mesh-tools merged 1 commits from fix/1713-keep-every-refusal into main 2026-10-23 10:58:09 +00:00
Member

Issue 1713, met a second time on 2026-10-23: plan-1792748906937927069 (mesh-catalog #459) reported done while mesh-build-go, mesh-build-node, mosquitto and ssh-client were refused registration (ADR 0266) and the machines were sent their old builds. The refusals arrived while the plan was already failed, so nothing kept them; the Retry settled the four from their build records as built.

  • main.go's 'heard and recorded, and not registered' case calls takeRefused: the refusal is kept by build id always (RecordRefused and in process), whatever the plans' state.
  • With a module it reaches planBuilt with the refusal; without a readable manifest it fails the asking plan by id (planFailedBuild, moduleAskedAs).
  • A Retry's records overlay now fails these records, so the module is asked again under a new id.

Tests (1713/AC1-AC3, issue note 5), red before the fix: TestARefusalWhileThePlanIsFailedIsKeptAndRetried, TestARefusalWithoutAModuleFailsItsPlanByIDAndIsRetried, TestAPlanNeverSettlesARefusedBuildBuilt.

Try: try-1792751015229339669 passed (unit 1759, integration 3037).

Reviewed-by: review-1713@shanks at 149f89e8f9

Issue 1713, met a second time on 2026-10-23: plan-1792748906937927069 (mesh-catalog #459) reported done while mesh-build-go, mesh-build-node, mosquitto and ssh-client were refused registration (ADR 0266) and the machines were sent their old builds. The refusals arrived while the plan was already failed, so nothing kept them; the Retry settled the four from their build records as built. - main.go's 'heard and recorded, and not registered' case calls takeRefused: the refusal is kept by build id always (RecordRefused and in process), whatever the plans' state. - With a module it reaches planBuilt with the refusal; without a readable manifest it fails the asking plan by id (planFailedBuild, moduleAskedAs). - A Retry's records overlay now fails these records, so the module is asked again under a new id. Tests (1713/AC1-AC3, issue note 5), red before the fix: TestARefusalWhileThePlanIsFailedIsKeptAndRetried, TestARefusalWithoutAModuleFailsItsPlanByIDAndIsRetried, TestAPlanNeverSettlesARefusedBuildBuilt. Try: try-1792751015229339669 passed (unit 1759, integration 3037). Reviewed-by: review-1713@shanks at 149f89e8f9bfd2dbac28d652295374abad16db83
mesh-tools added 1 commit 2026-10-23 10:49:02 +00:00
Keep every refused registration by its build id, so a Retry never settles it built
mesh/delivery covered after its failure: a later walk that contains it was delivered: plan-1792753090890815254 (novox/mesh-controller at c834e4f8 into ma…
mesh/check pass 149f89e8f9bf on 0173d9c70e59 | unit 1759 run, 0 kept, 4 skipped | integration 3037 run, 0 kept, 16 skipped | over bound: integration (…
149f89e8f9
A build heard and recorded and not registered kept its refusal only when a
plan was open or the plans were held. A tier's first failure fails its plan,
so later refusals were lost; a Retry then settled those builds built from
their records, sent the modules' old versions and reported the plan done.
A build without a readable manifest never reached its plan at all.

Keep the refusal in the store and the process whatever the plans' state, and
fail the asking plan by the build's id when the module is not known.

Issue 1713.
Author
Member

Delivery novox/mesh-controller@149f89e8f9bf — failed since 2026-10-23T10:59:33Z

Covered: covered after its failure: a later walk that contains it was delivered: plan-1792753090890815254 (novox/mesh-controller at c834e4f8 into main, done, contains its merge c834e4f8)

Delivery plan — builds mesh-controller → novox; no bus step

  • tier 0: mesh-controller
  • novox: receives mesh-controller

Machines

  • mesh-controller on every machine running it: sent

Transitions

  • 2026-10-23 10:49 (new) → proposed (announced): novox/mesh-controller#446's head announced
  • 2026-10-23 10:55 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-23 10:55 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-23 10:58 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-23 10:58 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-23 10:59 delivering → failed (failed): its walk failed, carrying its own commit: a gate on a first machine (what it carried put back), a build, a machine

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

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@149f89e8f9bf` — **failed** since 2026-10-23T10:59:33Z **Covered**: covered after its failure: a later walk that contains it was delivered: plan-1792753090890815254 (novox/mesh-controller at c834e4f8 into main, done, contains its merge c834e4f8) **Delivery plan** — builds mesh-controller → novox; no bus step - tier 0: mesh-controller - novox: receives mesh-controller **Machines** - mesh-controller on every machine running it: sent **Transitions** - 2026-10-23 10:49 (new) → proposed (announced): novox/mesh-controller#446's head announced - 2026-10-23 10:55 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-23 10:55 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-23 10:58 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-23 10:58 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-23 10:59 delivering → failed (failed): its walk failed, carrying its own commit: a gate on a first machine (what it carried put back), a build, a machine The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
mesh-tools merged commit c834e4f821 into main 2026-10-23 10:58:09 +00:00
mesh-tools deleted branch fix/1713-keep-every-refusal 2026-10-23 10:58:09 +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-controller#446