A reconcile that took the apply lock just before a delivery arrived queued its report (about the kept, older declaration) in the outbox while the delivery's apply waited. The link then published the apply's report and then the reconcile's, so the mesh's last word named the older declaration and the release plan waited.
The serve loop now remembers the declaration it last applied (or re-sent from unsaid) and sets aside an unasked report naming a different one, calling Done(false) so the next reconcile says anything still news.
Not caused by #29: no saying again line in the journal, unsaid.json absent, and the same doubled report shows in the controller log before #29 existed.
Tests: TestAReconcileReportOlderThanTheApplyIsNotSaidAfterIt (fails without the fix), TestAReconcileReportAboutTheAppliedDeclarationIsSaid, TestOvertaken. gofmt, go vet, go test ./... clean.
Pairs with novox/mesh-controller (same branch name); hq issue 267.
A reconcile that took the apply lock just before a delivery arrived queued its report (about the kept, older declaration) in the outbox while the delivery's apply waited. The link then published the apply's report and *then* the reconcile's, so the mesh's last word named the older declaration and the release plan waited.
The serve loop now remembers the declaration it last applied (or re-sent from `unsaid`) and sets aside an unasked report naming a different one, calling `Done(false)` so the next reconcile says anything still news.
Not caused by #29: no `saying again` line in the journal, `unsaid.json` absent, and the same doubled report shows in the controller log before #29 existed.
Tests: `TestAReconcileReportOlderThanTheApplyIsNotSaidAfterIt` (fails without the fix), `TestAReconcileReportAboutTheAppliedDeclarationIsSaid`, `TestOvertaken`. gofmt, go vet, go test ./... clean.
Pairs with novox/mesh-controller (same branch name); hq issue 267.
A reconcile that held the machine to the kept declaration just before a
delivery arrived queued its report while the delivery's apply waited for
it; the link published the apply's report and then the reconcile's, so the
mesh's last word from the machine named the older declaration and the
release plan waited on a report it had already been given. The link now
sets aside an unasked report about a declaration other than the one it
has applied since.
Deliverynovox/mesh-host@7f98478d6d9a — 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#30 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@7f98478d6d9a` — **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#30 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.
A reconcile that took the apply lock just before a delivery arrived queued its report (about the kept, older declaration) in the outbox while the delivery's apply waited. The link then published the apply's report and then the reconcile's, so the mesh's last word named the older declaration and the release plan waited.
The serve loop now remembers the declaration it last applied (or re-sent from
unsaid) and sets aside an unasked report naming a different one, callingDone(false)so the next reconcile says anything still news.Not caused by #29: no
saying againline in the journal,unsaid.jsonabsent, and the same doubled report shows in the controller log before #29 existed.Tests:
TestAReconcileReportOlderThanTheApplyIsNotSaidAfterIt(fails without the fix),TestAReconcileReportAboutTheAppliedDeclarationIsSaid,TestOvertaken. gofmt, go vet, go test ./... clean.Pairs with novox/mesh-controller (same branch name); hq issue 267.
Delivery
novox/mesh-host@7f98478d6d9a— 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 mesh-host → ace, g14, novox, shanks; no bus step
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.