From b6bf31d4e6968223c31d4e443feefe26234b76c7 Mon Sep 17 00:00:00 2001 From: jochen Date: Thu, 17 Sep 2026 01:34:22 +0200 Subject: [PATCH] The cross-node bed is green: push the provider node after adding the remote consumer A provision secret is minted as a side-effect of composing the CONSUMER's plan, and the provider's grant list is a pure read of secrets already issued from it. So a cross-node consumer's grant exists only after its node is pushed, and the provider's provisioner mints the vhost only when the provider node is composed again. Push anchor once more after node2, and the bed passes: amqp-ping on node2 reaches mesh-broker on anchor over the overlay, its binding names anchor.internal, and its vhost is minted. Proves both halves of issue 055. https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx --- test/integration/adopted-store-cross-node.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/integration/adopted-store-cross-node.test.ts b/test/integration/adopted-store-cross-node.test.ts index 8a23bbb..522d6bf 100644 --- a/test/integration/adopted-store-cross-node.test.ts +++ b/test/integration/adopted-store-cross-node.test.ts @@ -155,6 +155,12 @@ test("a consumer on a joined node opens the adopted broker on the control-node o await install("amqp-ping", NODE); await mesh(`push ${NODE}`, 900_000); + // The consumer minted its grant against anchor's broker only when node2 was composed + // (a provision secret is a side-effect of composing the CONSUMER). anchor's provisioner + // learns of a cross-node consumer only when anchor is composed again, so push it once more to + // mint the vhost. Adding a cross-node consumer means pushing the provider node too (issue 055). + await mesh(`push anchor`, 600_000); + // amqp-ping's container comes up and stays up (a broker it could not reach would crash-loop it). const psName = async () => (await on(NODE, `docker ps -a --format '{{.Names}}\t{{.Status}}'`)).out; const deadline = Date.now() + 600_000;