From a54b1eaab9fc1fc4739d9069368ac02834df73f1 Mon Sep 17 00:00:00 2001 From: jochen Date: Tue, 13 Oct 2026 16:40:09 +0200 Subject: [PATCH] Give ADR 0346 a home in design 27: a provider may serve its own composed names (issue 624) --- .../27-a-module-requires-the-mesh-resolves.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md b/03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md index 8550f27f..8187bbe3 100644 --- a/03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md +++ b/03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md @@ -2,8 +2,9 @@ layer: to-be status: in-progress code: [mesh-controller internal/catalogue] -updated: 2026-10-12 +updated: 2026-10-13 decisions: + - "ADR 0346" - "ADR 0312" - "ADR 0319" - "ADR 0309" @@ -278,6 +279,20 @@ rather than recomputing it. A consumer that writes the derived value into its ow of asking for it is refused, naming the placeholder to use. *How it is checked:* the unit tests in ADR 0202's "how this is checked", each run against the unchanged controller first. +*A provider may serve its own composed names (2026-10-13, ADR 0346, issue 624):* a served value may +also name what the mesh composed for the **provider** through a requirement it contributes to, in the +same words its own files use: `${bound::name}`, `internal-name`, and `name-` or +`internal-name-` for a contribution under a local name. The forge serves the package registry's +public root as `https://${bound:route:name-web}/api/packages/novox/npm/`, so a consumer learns the +registry's public name from its binding rather than from a second copy kept by hand. The mesh fills it +from the provider machine's own composition on both paths, a provider on another machine and one on +the consumer's own, so the binding and the proxy name one host. Where the provider's machine composes +no such name (it has no public domain, or the endpoint is not reached publicly), the key is left out of +what the consumer is told, and `plan` says so on the provider's machine and under the consumer's need. +*How it is checked:* the module check refuses a served value naming a requirement the module does not +contribute to or a fact other than those names; the controller's unit tests for both paths and for the +left-out key, each run against the unchanged controller first. + ## How a definition reads what was resolved **One form, naming a requirement and a field of its contract.** A definition that needs the database's