Issue 1966; design 47 fix-unpublished-placed-module U1 and U8 (hq design/47-unpublished-placed-module), ADR 0593 §6. Group with mesh-catalog fix/1966-unpublished-placed-module.
Live: mesh-provisioner on novox is unhealthy (urgent condition, since at least 2026-11-09): provisioner_health waits on ace, g14, novox and shanks for "the composition of mesh-wireguard at src2:333ffa2f… is not published by the node-engine". mesh-wireguard's build is failed ("refused kind: package of language "go""), and the node-engine publishes a placed module only at a done build, a want or what runs; the assigner holds every new provisioner build on that health.
Fix: newestFPs also returns placed modules whose newest build is failed; composedValues writes .. with Refused set to the build's error, unless a composition is already there; a queued or running build stays unpublished; takeBuildDone starts the pass on such a failed build (U8). The provisioner already reads a refused key as a hold that is not counted.
Tests: a case in TestTheNodePublishesItsCompositions (fails without either change); no new test function (the module is over its unit budget already). vet, vet -tags integration, unit pass.
Reviewed-by: mesh-code-reviewer@shanks at 8e993c759a (round 2)
Pushed-by: fix-1965@shanks
Issue 1966; design 47 fix-unpublished-placed-module U1 and U8 (hq design/47-unpublished-placed-module), ADR 0593 §6. Group with mesh-catalog fix/1966-unpublished-placed-module.
Live: mesh-provisioner on novox is unhealthy (urgent condition, since at least 2026-11-09): provisioner_health waits on ace, g14, novox and shanks for "the composition of mesh-wireguard at src2:333ffa2f… is not published by the node-engine". mesh-wireguard's build is failed ("refused kind: package of language \"go\""), and the node-engine publishes a placed module only at a done build, a want or what runs; the assigner holds every new provisioner build on that health.
Fix: newestFPs also returns placed modules whose newest build is failed; composedValues writes <node>.<module>.<fp> with Refused set to the build's error, unless a composition is already there; a queued or running build stays unpublished; takeBuildDone starts the pass on such a failed build (U8). The provisioner already reads a refused key as a hold that is not counted.
Tests: a case in TestTheNodePublishesItsCompositions (fails without either change); no new test function (the module is over its unit budget already). vet, vet -tags integration, unit pass.
Reviewed-by: mesh-code-reviewer@shanks at 8e993c759a5c563d4f0cf43727d2e7db61938810 (round 2)
Pushed-by: fix-1965@shanks
The node-engine writes a refused key, with the build's own error, at the indexer's
fingerprint in composed-<node> for a placed module whose newest build the builder
holds failed; a build queued or running stays unpublished (U1). A failed build of a
placed module's newest fingerprint also moves the pass (takeBuildDone), so the key is
written when it lands (U8).
Builds: design 47 fix-unpublished-placed-module U1, U8, ADR 0593 §6
Deliverynovox/mesh-host@8e993c759a5c — merged since 2026-11-12T15:34:25Z
Source — source.main moved to novox/mesh-host@df1412081b. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
2026-11-12 15:03 (new) → proposed (announced): novox/mesh-host#224's head announced
2026-11-12 15:03 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
2026-11-12 15:34 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-host@8e993c759a5c` — **merged** since 2026-11-12T15:34:25Z
**Source** — source.main moved to novox/mesh-host@df1412081bed. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1966-unpublished-placed-module`: novox/mesh-catalog@3bb8ace833d1, novox/mesh-host@8e993c759a5c
**Transitions**
- 2026-11-12 15:03 (new) → proposed (announced): novox/mesh-host#224's head announced
- 2026-11-12 15:03 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
- 2026-11-12 15:34 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
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.
Issue 1966; design 47 fix-unpublished-placed-module U1 and U8 (hq design/47-unpublished-placed-module), ADR 0593 §6. Group with mesh-catalog fix/1966-unpublished-placed-module.
Live: mesh-provisioner on novox is unhealthy (urgent condition, since at least 2026-11-09): provisioner_health waits on ace, g14, novox and shanks for "the composition of mesh-wireguard at src2:333ffa2f… is not published by the node-engine". mesh-wireguard's build is failed ("refused kind: package of language "go""), and the node-engine publishes a placed module only at a done build, a want or what runs; the assigner holds every new provisioner build on that health.
Fix: newestFPs also returns placed modules whose newest build is failed; composedValues writes .. with Refused set to the build's error, unless a composition is already there; a queued or running build stays unpublished; takeBuildDone starts the pass on such a failed build (U8). The provisioner already reads a refused key as a hold that is not counted.
Tests: a case in TestTheNodePublishesItsCompositions (fails without either change); no new test function (the module is over its unit budget already). vet, vet -tags integration, unit pass.
Reviewed-by: mesh-code-reviewer@shanks at
8e993c759a(round 2)Pushed-by: fix-1965@shanks
Delivery
novox/mesh-host@8e993c759a5c— merged since 2026-11-12T15:34:25ZSource — source.main moved to novox/mesh-host@df1412081b. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1966-unpublished-placed-module: novox/mesh-catalog@3bb8ace833, novox/mesh-host@8e993c759aTransitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.