A held module composes only as what runs of it, so its hold no longer spreads to the modules that use it (issue 1126) #128

Merged
mesh-tools merged 1 commits from fix/1126-held-as-runs into main 2026-10-29 00:07:03 +00:00
Member

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 c2999a4e13

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
mesh-tools added 1 commit 2026-10-28 23:59:25 +00:00
A held module is no dependence of its neighbours: its hold stops spreading (issue 1126)
mesh/delivery merged: source.main moved to novox/mesh-sdk@394fec8a63c1
mesh/delivery-group group fix/1126-held-as-runs merged: every member is merged
mesh/check pass c2999a4e13cc on d4c61ee8ffd0 | unit 3054 run, 234 kept, 36 skipped | integration 3075 run, 266 kept, 29 skipped | over bound: unit (sl…
c2999a4e13
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.
Author
Member

Delivery novox/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.

Group fix/1126-held-as-runs: novox/mesh-host@a6c70803ab, novox/mesh-sdk@c2999a4e13

  • 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`.
mesh-tools merged commit 394fec8a63 into main 2026-10-29 00:07:03 +00:00
mesh-tools deleted branch fix/1126-held-as-runs 2026-10-29 00:07:04 +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-sdk#128