The seed p-20261028t231141-ec84b4 failed on novox: de-spiegel (held: old-form build) held mailu, which held postgres, nftables and route-proxy, which held every postgres consumer ("what it composes of ..., held, is not what runs of them"), and the node refused "gitea: its credential of postgres-database is handed to the provisioner and the module is not: nothing would fill it". Third round of one kind: a held module still took part in composition.
compose.Stub marks the module (catalogue.Manifest.Stubbed, never on the wire); declaration.go carries a stubbed module's handed credential and own-secret files as they run instead of refusing. A module that is not a stub is refused as before.
frombus composeEach drops dependsOnHeld, withoutHeld and the node-own refusal: a consumer or collector of a held module composes against what runs of it (compose.Carried). A real difference is still a named difference; a module's own refusal still refuses.
Kept on purpose: 'held behind' for the provider whose own files take a held module's contributions (the proxy) and the filter where it listens, since the held module's new manifest may differ from the build that runs.
Quick vs thorough: quick (treat this wording as held behind, carry the credential) would patch a third symptom; thorough (a held module composes only as what runs) chosen, as the kind was met twice.
Known limit, unchanged from before: a held provider's new serves/offer credential/answered-by still reach consumers from the new manifest (needs the running build's manifest); noted on issue 1126.
Group fix/1126-held-as-runs with mesh-host (pins this head exactly). Tests: rows added to existing tables (held provider with a consumer; held feeder and held routes contributor; held moved module with a handed credential and own secret), each failing before; gofmt, go vet (+integration), go test pass.
Issue 1126 (L2 take-over seed), ADR 0569 §1.
The seed p-20261028t231141-ec84b4 failed on novox: de-spiegel (held: old-form build) held mailu, which held postgres, nftables and route-proxy, which held every postgres consumer ("what it composes of ..., held, is not what runs of them"), and the node refused "gitea: its credential of postgres-database is handed to the provisioner and the module is not: nothing would fill it". Third round of one kind: a held module still took part in composition.
- compose.Stub marks the module (catalogue.Manifest.Stubbed, never on the wire); declaration.go carries a stubbed module's handed credential and own-secret files as they run instead of refusing. A module that is not a stub is refused as before.
- frombus composeEach drops dependsOnHeld, withoutHeld and the node-own refusal: a consumer or collector of a held module composes against what runs of it (compose.Carried). A real difference is still a named difference; a module's own refusal still refuses.
- Kept on purpose: 'held behind' for the provider whose own files take a held module's contributions (the proxy) and the filter where it listens, since the held module's new manifest may differ from the build that runs.
Quick vs thorough: quick (treat this wording as held behind, carry the credential) would patch a third symptom; thorough (a held module composes only as what runs) chosen, as the kind was met twice.
Known limit, unchanged from before: a held provider's new serves/offer credential/answered-by still reach consumers from the new manifest (needs the running build's manifest); noted on issue 1126.
Group fix/1126-held-as-runs with mesh-host (pins this head exactly). Tests: rows added to existing tables (held provider with a consumer; held feeder and held routes contributor; held moved module with a handed credential and own secret), each failing before; gofmt, go vet (+integration), go test pass.
Reviewed-by: rev-held@shanks at c2999a4e13cc68bd65cd5f4be1ed02f9870c19c0
novox's seed p-20261028t231141-ec84b4 refused 11 modules "what it composes of ..., held, is not what runs of them":
de-spiegel's hold spread through mailu to postgres, nftables and route-proxy, and from postgres to every consumer, and
gitea, held so, refused the node: "its credential of postgres-database is handed to the provisioner and the module is
not: nothing would fill it". Three rounds each moved the error. The kind: a held module still took part in the
composition as a dependence, so its hold spread.
- The quick fix: let heldAsToday also follow dependsOnHeld's words, and skip the handed refusal for gitea. It moves the
error once more and leaves every node's applying path holding consumers.
- The thorough fix, chosen: a held module composes only as what runs of it. composeEach no longer compares the
composition with each held module as its stub (dependsOnHeld removed): a consumer or collector composes against what
runs of the held module like any other module, and a real difference is still a named difference in the answer, a
module's own refusal still its refusal. A stub (compose.Stub, catalogue.Manifest.Stubbed) leaves the credentials and
own secrets it would hand the provisioner out of its plan as they run, never refused for want of a plan. Only what a
held module's new manifest says to others in their own files is still held behind it (dependents: the provider of
what it contributes to, the filter where it listens), which heldAsToday already follows.
Tests: rows added to existing tests (a held provider with a binding consumer, which the old code held in the seed's
words; a held feeder of a collector; a held module with a handed credential and own secret). No new test function.
Deliverynovox/mesh-sdk@c2999a4e13cc — merged since 2026-10-29T00:07:06Z
Source — source.main moved to novox/mesh-sdk@394fec8a63. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
composed together: pass — the checker's verdict at the members' heads (2a001396cf18)
Transitions
2026-10-28 23:59 (new) → proposed (announced): novox/mesh-sdk#128's head announced
2026-10-28 23:59 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-10-29 00:07 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-sdk@c2999a4e13cc` — **merged** since 2026-10-29T00:07:06Z
**Source** — source.main moved to novox/mesh-sdk@394fec8a63c1. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Group** `fix/1126-held-as-runs`: novox/mesh-host@a6c70803ab72, novox/mesh-sdk@c2999a4e13cc
- composed together: pass — the checker's verdict at the members' heads (2a001396cf18)
**Transitions**
- 2026-10-28 23:59 (new) → proposed (announced): novox/mesh-sdk#128's head announced
- 2026-10-28 23:59 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-10-29 00:07 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`.
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 1126 (L2 take-over seed), ADR 0569 §1.
The seed p-20261028t231141-ec84b4 failed on novox: de-spiegel (held: old-form build) held mailu, which held postgres, nftables and route-proxy, which held every postgres consumer ("what it composes of ..., held, is not what runs of them"), and the node refused "gitea: its credential of postgres-database is handed to the provisioner and the module is not: nothing would fill it". Third round of one kind: a held module still took part in composition.
Quick vs thorough: quick (treat this wording as held behind, carry the credential) would patch a third symptom; thorough (a held module composes only as what runs) chosen, as the kind was met twice.
Known limit, unchanged from before: a held provider's new serves/offer credential/answered-by still reach consumers from the new manifest (needs the running build's manifest); noted on issue 1126.
Group fix/1126-held-as-runs with mesh-host (pins this head exactly). Tests: rows added to existing tables (held provider with a consumer; held feeder and held routes contributor; held moved module with a handed credential and own secret), each failing before; gofmt, go vet (+integration), go test pass.
Reviewed-by: rev-held@shanks at
c2999a4e13Delivery
novox/mesh-sdk@c2999a4e13cc— merged since 2026-10-29T00:07:06ZSource — source.main moved to novox/mesh-sdk@394fec8a63. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/1126-held-as-runs: novox/mesh-host@a6c70803ab, novox/mesh-sdk@c2999a4e13Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.