A contribution carries the machine port of its endpoint, so a provider serving from plans dials what the module binds (issue 774) #149

Merged
mesh-tools merged 2 commits from fix/route-ports into main 2026-10-31 12:56:48 +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 bb01a656d0

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 bb01a656d0249d5a0c97b19669bb83fa0dc60881
mesh-tools added 2 commits 2026-10-31 12:28:35 +00:00
route-proxy served every route at the software's own port (gitea's 3000, published at 20000;
grafana's 3000 on another machine, published at 20012) and public sites answered 502. The plan's
contribution now carries the port the placement assigned, the number ${port:N} gives the module,
and a composition for plans refuses a port none assigned by module, node and port.
Carry an unassigned port as the declaration publishes it, refusing only a port a module does not listen on (issue 774, research 072 row 34)
mesh/delivery merged: source.main moved to novox/mesh-sdk@fea48f19cea5
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…
bb01a656d0
influxdb and unifi publish bare ports that mesh-placement assigns none: the machine runs them at
the software's own number, so a plan refusing them held their whole plan for a route that works.
Author
Member

Delivery novox/mesh-sdk@bb01a656d024 — merged since 2026-10-31T12:56:50Z

Source — source.main moved to novox/mesh-sdk@fea48f19ce. 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-sdk#149'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-sdk@bb01a656d024` — **merged** since 2026-10-31T12:56:50Z **Source** — source.main moved to novox/mesh-sdk@fea48f19cea5. 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-sdk#149'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 fea48f19ce into main 2026-10-31 12:56:48 +00:00
mesh-tools deleted branch fix/route-ports 2026-10-31 12:56:49 +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#149