Say an apply's report even when the apply ends the link (hq issue 264) #29

Merged
mesh-admin merged 1 commits from fix/report-lost-at-self-update into main 2026-10-05 22:31:47 +00:00
Contributor

A host that delivered its own successor stood aside before the report of that apply was published: applied, and could not tell the mesh: reporting: context canceled, and the controller's release plan waited for a report that never came (seen on the anchor 2026-10-06).

  • Reports of an apply (and of set-aside declarations) are published on context.WithoutCancel(ctx), still bounded by the timeout, before the link is closed. Nothing further is applied once the context is done.
  • The last apply's report is kept beside the state (unsaid.json) until the broker takes it, and re-said first thing on the next link, exactly as made (same digest, same outcome). A report naming no declaration clears it; nothing is re-said when nothing was lost.
  • Run split into Run + serve(link) so this is testable without a broker; HoldRoused/Run take an Unsaid.

Tests: TestAnApplyThatEndsTheLinkIsStillReported, TestAReportLostAfterTheApplyIsSaidOnTheNextLink (both fail without the fix), TestNothingIsSaidAgainWhenNothingWasLost, TestTheKeptReportSurvivesTheHost, TestNothingKeptWhenNothingWasApplied. gofmt, go vet, go test ./... clean.

Rollout: the engine is record policy, so it is rolled out with push --behind. The first delivery of this version still stands aside under the old code, so its own report can be lost one last time.

A host that delivered its own successor stood aside before the report of that apply was published: `applied, and could not tell the mesh: reporting: context canceled`, and the controller's release plan waited for a report that never came (seen on the anchor 2026-10-06). - Reports of an apply (and of set-aside declarations) are published on `context.WithoutCancel(ctx)`, still bounded by the timeout, before the link is closed. Nothing further is applied once the context is done. - The last apply's report is kept beside the state (`unsaid.json`) until the broker takes it, and re-said first thing on the next link, exactly as made (same digest, same outcome). A report naming no declaration clears it; nothing is re-said when nothing was lost. - `Run` split into `Run` + `serve(link)` so this is testable without a broker; `HoldRoused`/`Run` take an `Unsaid`. Tests: `TestAnApplyThatEndsTheLinkIsStillReported`, `TestAReportLostAfterTheApplyIsSaidOnTheNextLink` (both fail without the fix), `TestNothingIsSaidAgainWhenNothingWasLost`, `TestTheKeptReportSurvivesTheHost`, `TestNothingKeptWhenNothingWasApplied`. gofmt, go vet, go test ./... clean. Rollout: the engine is `record` policy, so it is rolled out with `push --behind`. The first delivery of this version still stands aside under the old code, so its own report can be lost one last time.
mesh-admin added 1 commit 2026-10-05 22:30:54 +00:00
A host that delivered its own successor stood aside before the report of
that apply was published, so it failed with 'context canceled' and the
release plan waited for a report that never came (novox/hq issue 264).
Reports are now published on a context the stand-aside does not cancel,
and the last apply's report is kept until the broker takes it and said
again on the next link, so a crash between apply and report is covered too.
mesh-admin merged commit 64defd47c7 into main 2026-10-05 22:31:47 +00:00
mesh-admin deleted branch fix/report-lost-at-self-update 2026-10-05 22:31:47 +00:00
Author
Contributor

Delivery novox/mesh-host@64defd47c7d9 — 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 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

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-host#29 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-host@64defd47c7d9` — **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 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 **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-host#29 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`.
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#29