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.
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
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.
mesh/check failed: integration: mesh-vault/cmd/mesh-vault.TestTheVaultWholeMintsOnTheBusWhoeverHoldsTheLease: never: the account minted under the cont…
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.
Deliverynovox/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.
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`.
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 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
portthe 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-sdkbb01a656, 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
bb01a656d0route-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.Delivery
novox/mesh-sdk@bb01a656d024— merged since 2026-10-31T12:56:50ZSource — source.main moved to novox/mesh-sdk@fea48f19ce. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Group
fix/route-ports: novox/mesh-catalog@841fd26a2a, novox/mesh-controller@0e9c4c8299, novox/mesh-sdk@bb01a656d0Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.