From 6b482ee7dc9a0dde71792b9c4fc6275256628cc2 Mon Sep 17 00:00:00 2001 From: jochen Date: Mon, 14 Sep 2026 22:26:04 +0200 Subject: [PATCH] Assigning networking is not being on the network MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit N1 assigned the module and stopped, and the mesh wrote a names file with no names in it. That is correct behaviour, not a bug: a node with no address on the network has no name, because a name resolving to nothing is worse than no name — a connection to an address that does not answer hangs, where a name that does not resolve fails at once and says so. The missing act is placement. Assigning installs the module that answers how machines reach each other; placing says where this machine is on the resulting network. The four-machine test did both and this one did neither, which is how the distinction stayed invisible. Claude-Session: https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx --- one-node-mesh-report.json | 56 ++++++++++++++++---------- test/integration/one-node-mesh.test.ts | 7 ++++ 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/one-node-mesh-report.json b/one-node-mesh-report.json index 462d8b2..c14987c 100644 --- a/one-node-mesh-report.json +++ b/one-node-mesh-report.json @@ -1,7 +1,7 @@ { "scenario": "one-node-mesh", - "established": 14, - "of": 18, + "established": 11, + "of": 20, "steps": [ { "code": "R1", @@ -56,71 +56,85 @@ "code": "P1", "title": "the mesh builds the shared base from source", "status": "pass", - "seconds": 84, + "seconds": 78, "why": "" }, { "code": "P2", "title": "the mesh builds and runs a store of its own", "status": "pass", - "seconds": 40, + "seconds": 50, "why": "" }, { "code": "P3", "title": "the mesh builds and runs its own catalogue", "status": "pass", - "seconds": 34, + "seconds": 25, "why": "" }, { "code": "P4", "title": "the mesh rebuilds its own control plane from source", "status": "pass", - "seconds": 36, + "seconds": 37, "why": "" }, + { + "code": "N1", + "title": "the mesh puts itself on a private network, and its machine has a name", + "status": "fail", + "seconds": 125, + "why": "networking is assigned and no machine has a name:\n# Generated by the mesh. Do not edit — this file is replaced whenever a node\n# joins or leaves, and an edit would survive until then and vanish.\n\n127.0.0.1\tlocalhost\n::1\t\tlocalhost ip6-localhost ip6-loopback\n127.0.1.1\tanchor\n" + }, { "code": "U1", "title": "the mesh builds a module standing on that base", - "status": "pass", - "seconds": 14, - "why": "" + "status": "skip", + "seconds": 0, + "why": "not attempted — N1 (the mesh puts itself on a private network, and its machine has a name) did not succeed" }, { "code": "U2", "title": "the mesh runs a broker for that module to talk to", - "status": "pass", - "seconds": 24, - "why": "" + "status": "skip", + "seconds": 0, + "why": "not attempted — U1 (the mesh builds a module standing on that base) did not succeed" }, { "code": "U3", "title": "the anchor runs the module the mesh built", - "status": "pass", - "seconds": 6, - "why": "" + "status": "skip", + "seconds": 0, + "why": "not attempted — U2 (the mesh runs a broker for that module to talk to) did not succeed" }, { "code": "V1", - "title": "the mesh can describe itself, and what it says is true", - "status": "fail", - "seconds": 2, - "why": "the catalogue does not know about mesh-tools:\n{\"modules\":[{\"module\":\"amqp-ping\",\"commit\":\"af1e3afa495bac11e74c2d76cb2cf7a78167f2f6\",\"repository\":\"https://git.novox.be/novox/mesh-catalog.git\",\"path\":\"modules/amqp-ping\"},{\"module\":\"lavinmq\",\"commit\":\"af1e3afa495bac11e74c2d76cb2cf7a78167f2f6\",\"repository\":\"https://git.novox.be/novox/mesh-catalog.git\",\"path\":\"modules/lavinmq\"},{\"module\":\"mesh-control\",\"commit\":\"5062c36fc9efe159aa9706c0ca2c873351ef1ce0\",\"repository\":\"https://git.novox.be/novox/mesh-control.git\",\"path\":\"\"}]}\n" + "title": "the control plane can describe the mesh, and what it says is true", + "status": "skip", + "seconds": 0, + "why": "not attempted — U3 (the anchor runs the module the mesh built) did not succeed" }, { "code": "V2", + "title": "the catalogue holds every module this mesh built", + "status": "skip", + "seconds": 0, + "why": "not attempted — V1 (the control plane can describe the mesh, and what it says is true) did not succeed" + }, + { + "code": "V3", "title": "the machine's networking is what the modules asked for", "status": "skip", "seconds": 0, - "why": "not attempted — V1 (the mesh can describe itself, and what it says is true) did not succeed" + "why": "not attempted — V1 (the control plane can describe the mesh, and what it says is true) did not succeed" }, { "code": "E1", "title": "a change to a module's source reaches the machine on its own", "status": "skip", "seconds": 0, - "why": "not attempted — V2 (the machine's networking is what the modules asked for) did not succeed" + "why": "not attempted — V3 (the machine's networking is what the modules asked for) did not succeed" }, { "code": "E2", diff --git a/test/integration/one-node-mesh.test.ts b/test/integration/one-node-mesh.test.ts index a79713a..fcb6d57 100644 --- a/test/integration/one-node-mesh.test.ts +++ b/test/integration/one-node-mesh.test.ts @@ -600,6 +600,13 @@ before(async () => { // want. await step("N1", NETWORKED, CONTROL_REBUILT, async () => { await mesh(`assign ${CONTROL} ${NETWORK_MODULE}`); + // **Assigned is not placed, and they are two different acts.** Assigning installs the module + // that answers "how do machines reach each other"; placing says where THIS machine is on the + // resulting network. Without the second the module runs and writes a names file with no names + // in it — deliberately, because "a node with no address on the network has no name here", and a + // name resolving to nothing is worse than no name: a connection to an address that does not + // answer hangs, where a name that does not resolve fails at once and says so. + await mesh(`overlay place ${CONTROL} --hub --endpoint ${ANCHOR}:51820 --site hosting`); await mesh(`push ${CONTROL}`, 600_000); // What it was assigned for. A machine on a private network with no name on it has had the // harder half done and the visible half not.