From 3f58a0a08f1f24385592b6c37a5303f9e8383098 Mon Sep 17 00:00:00 2001 From: jochen Date: Fri, 11 Sep 2026 22:05:18 +0200 Subject: [PATCH] The provider remap moves a port; it does not bind it to loopback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit postgres and lavinmq carried 127.0.0.1: in their remap, and it broke a consumer on a node that has no substrate to collide with. A module is told to reach its provider at .internal, that name is the node's overlay address, and a provider listening only on loopback refuses it — letta on ace failed with 'is the server running on that host and accepting TCP/IP connections?' while postgres sat healthy beside it. The collision needed a different port, which is what every other entry here does. The address was never part of it, and it made the provider unreachable by the one name the mesh hands its consumers. Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF --- test/integration/whole-mesh-full.test.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/test/integration/whole-mesh-full.test.ts b/test/integration/whole-mesh-full.test.ts index 1d12af0..875f521 100644 --- a/test/integration/whole-mesh-full.test.ts +++ b/test/integration/whole-mesh-full.test.ts @@ -270,8 +270,17 @@ const PLAN: { node: string; mods: Mod[]; core: Set; gaps: Set }[ * runs. The rest break the novox web/app host-port collisions (route-proxy fronts 80/443). */ const REMAP: Record> = { - postgres: { "5432": "127.0.0.1:15432:5432" }, - lavinmq: { "5672": "127.0.0.1:15673:5672" }, + // Moved, NOT bound to loopback. These two carried `127.0.0.1:` and it broke a consumer on a node + // with no substrate at all: a module is told to reach its provider at `.internal`, that + // name resolves to the node's overlay address, and a provider listening only on loopback refuses + // it. letta on ace died of exactly this — "is the server running on that host and accepting + // TCP/IP connections?" — while postgres sat healthy beside it. + // + // The collision needed a different PORT, which is all the other entries here do. The address was + // never part of it, and adding it made the provider unreachable by the one name the mesh hands + // its consumers. + postgres: { "5432": "15432:5432" }, + lavinmq: { "5672": "15673:5672" }, nextcloud: { "80": "8090:80" }, umami: { "3000": "3090:3000" }, invoicing: { "80": "8091:80", "9000": "9091:9000" }, -- 2.54.0