The provisioner composes route contributions with the machine port (issue 774) #581

Merged
mesh-tools merged 2 commits from fix/route-ports into main 2026-10-31 12:56:52 +00:00
Member

Issue 774 (L3 of design 47), research 072 row 34: route-proxy served from the provisioner's plans.

The fault (2026-10-31 12:32-12:36, rolled back): route-proxy 27928972 dialled each route at the software's own port, e.g. git.novox.be at 127.0.0.1:3000 instead of 127.0.0.1:20000, and public sites answered 502. A route contribution carried the endpoint's software port; until now the controller turned it into the machine's port when it wrote the routes file.

The fix: mesh-sdk's one composition of a contribution gives port the machine port the declaration publishes (machinePort: a port given in settings, then the placement's assigned port, then the software's own number when none is assigned), the same number ${port:N} gives the module (ADR 0038). The only refusal left, in planning, is a port the module does not listen on. The provisioner is pinned to it; route-proxy is pinned to it, its dial code unchanged (loopback on its own machine, the module's machine name otherwise).

Checked against the live routes: all 82 dial targets of the 79 routes the old version serves come out at the same port (gitea, grafana, influxdb's bare 8086, mailu's fixed 7080:80, photos' fixed mappings, home-assistant on the host network among them). Seven novox modules move from novox.internal to 127.0.0.1 at the same port; their ports listen on 0.0.0.0 and :: (read 13:28).

Quick fix vs thorough fix: the thorough fix was chosen: the port is filled in the one composition every reader shares, not translated again in route-proxy.

Delivery group: mesh-sdk bb01a656, mesh-catalog 841fd26a, mesh-controller 0e9c4c82 (hand pins on mesh-sdk bb01a656, one last time; issue 1585). After the merge route-proxy stays held on ace and novox and is released ace first, comparing every route's target with the old version before novox.

Tests: table rows for an assigned port, a port given in settings, a bare published port with no assignment, a fixed mapping, a port the module does not listen on, and a module on the proxy's machine and on another; seen failing without the fix. gofmt, go vet (with and without -tags integration) and go test pass in mesh-sdk/go, route-proxy, route-proxy/contract and mesh-provisioner. Route-proxy's test count is unchanged.

Reviewed-by: rev-routeports@shanks at 841fd26a2a

Issue 774 (L3 of design 47), research 072 row 34: route-proxy served from the provisioner's plans. **The fault (2026-10-31 12:32-12:36, rolled back):** route-proxy 27928972 dialled each route at the software's own port, e.g. git.novox.be at 127.0.0.1:3000 instead of 127.0.0.1:20000, and public sites answered 502. A route contribution carried the endpoint's software port; until now the controller turned it into the machine's port when it wrote the routes file. **The fix:** mesh-sdk's one composition of a contribution gives `port` the machine port the declaration publishes (`machinePort`: a port given in settings, then the placement's assigned port, then the software's own number when none is assigned), the same number `${port:N}` gives the module (ADR 0038). The only refusal left, in planning, is a port the module does not listen on. The provisioner is pinned to it; route-proxy is pinned to it, its dial code unchanged (loopback on its own machine, the module's machine name otherwise). **Checked against the live routes:** all 82 dial targets of the 79 routes the old version serves come out at the same port (gitea, grafana, influxdb's bare 8086, mailu's fixed 7080:80, photos' fixed mappings, home-assistant on the host network among them). Seven novox modules move from novox.internal to 127.0.0.1 at the same port; their ports listen on 0.0.0.0 and :: (read 13:28). **Quick fix vs thorough fix:** the thorough fix was chosen: the port is filled in the one composition every reader shares, not translated again in route-proxy. **Delivery group:** mesh-sdk bb01a656, mesh-catalog 841fd26a, mesh-controller 0e9c4c82 (hand pins on mesh-sdk bb01a656, one last time; issue 1585). After the merge route-proxy stays held on ace and novox and is released ace first, comparing every route's target with the old version before novox. **Tests:** table rows for an assigned port, a port given in settings, a bare published port with no assignment, a fixed mapping, a port the module does not listen on, and a module on the proxy's machine and on another; seen failing without the fix. gofmt, go vet (with and without -tags integration) and go test pass in mesh-sdk/go, route-proxy, route-proxy/contract and mesh-provisioner. Route-proxy's test count is unchanged. Reviewed-by: rev-routeports@shanks at 841fd26a2a0952ea55f4ceb1c9e6884791927fad
mesh-tools added 2 commits 2026-10-31 12:28:35 +00:00
Hand pin to fix/route-ports in mesh-sdk, for this group one last time (ADR 0573, issue 1585).
Pin mesh-provisioner to the mesh-sdk that carries an unassigned bare port as the machine publishes it, so influxdb's and unifi's plans are not held (issue 774, research 072 row 34)
mesh/delivery merged: source.main moved to novox/mesh-catalog@3d7830cfdc4f
mesh/delivery-group group fix/route-ports merged: every member is merged
mesh/check failed: integration: mesh-vault/cmd/mesh-vault.TestTheVaultWholeMintsOnTheBusWhoeverHoldsTheLease: never: the account minted under the cont…
841fd26a2a
Author
Member

Delivery novox/mesh-catalog@841fd26a2a09 — merged since 2026-10-31T12:56:53Z

Source — source.main moved to novox/mesh-catalog@3d7830cfdc. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/route-ports: novox/mesh-catalog@841fd26a2a, novox/mesh-controller@0e9c4c8299, novox/mesh-sdk@bb01a656d0

  • composed together: fail — the checker's verdict at the members' heads (54971344f15e): integration: mesh-vault/cmd/mesh-vault.TestTheVaultWholeMintsOnTheBusWhoeverHoldsTheLease

Transitions

  • 2026-10-31 12:28 (new) → proposed (announced): novox/mesh-catalog#581's head announced
  • 2026-10-31 12:28 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-31 12:56 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-catalog@841fd26a2a09` — **merged** since 2026-10-31T12:56:53Z **Source** — source.main moved to novox/mesh-catalog@3d7830cfdc4f. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/route-ports`: novox/mesh-catalog@841fd26a2a09, novox/mesh-controller@0e9c4c8299cc, novox/mesh-sdk@bb01a656d024 - composed together: fail — the checker's verdict at the members' heads (54971344f15e): integration: mesh-vault/cmd/mesh-vault.TestTheVaultWholeMintsOnTheBusWhoeverHoldsTheLease **Transitions** - 2026-10-31 12:28 (new) → proposed (announced): novox/mesh-catalog#581's head announced - 2026-10-31 12:28 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-31 12:56 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 3d7830cfdc into main 2026-10-31 12:56:52 +00:00
mesh-tools deleted branch fix/route-ports 2026-10-31 12:56:52 +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-catalog#581