Tell a module where a mesh seat's holder is reached: ${seat:<seat>:reach} (hq ADR 0222, issue 190 — 1 of 3) #62

Merged
mesh-admin merged 1 commits from fix/190-seat-reach into main 2026-10-05 20:31:32 +00:00
Contributor

hq issue 190: the controller's private network writes insecure-registries into /etc/docker/daemon.json, a file the docker module (holder of node-container-runtime) owns. Rule: the controller never writes a file a seat's holder owns; it tells the owner.

This PR only adds the way to tell it:

  • ${seat:<mesh-seat>:reach} = host:port where this machine reaches the holder of a mesh-scope seat. No requirement, no grant, no credential; the value is the one the mesh already composes into every built reference (artifactStoreAddress).
  • Rendering.SeatReach, filled in renderingFor. Only mesh-artifact-store is answered; any other seat is refused by name.
  • Empty answer (no store on the network yet): in an into: json file the empty member is dropped, and a list left empty is dropped, so the runtime is never told to trust "".

Tests (seat_into_test.go): filled in a file and in an env value, empty dropped (other members kept), unknown seat refused, composed through Declaration.

Merge order (issue 190):

  1. this PR (controller: placeholder only; safe alone, nothing uses it yet)
  2. mesh-catalog: docker states insecure-registries with the placeholder (only once this controller is deployed; an older controller would send the placeholder through literally)
  3. mesh-controller: the overlay stops generating registry-trust/registry-trust-reload, and generated resources go through the collision check (only after 2; otherwise the docker module would lose the member, and with 2 in place the check would refuse the overlap if it ran first)

mesh-host PR (a unit still held by another declared service is not given back when one of its records goes) should be deployed before 3.

gofmt/vet clean; go test ./... passes against mesh-catalog main and against the catalogue branch, except internal/broker TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose, which fails on main as well (it reads mesh-host's genesis template beside it).

hq issue 190: the controller's private network writes `insecure-registries` into `/etc/docker/daemon.json`, a file the docker module (holder of `node-container-runtime`) owns. Rule: the controller never writes a file a seat's holder owns; it tells the owner. This PR only adds the way to tell it: - `${seat:<mesh-seat>:reach}` = host:port where this machine reaches the holder of a mesh-scope seat. No requirement, no grant, no credential; the value is the one the mesh already composes into every built reference (`artifactStoreAddress`). - `Rendering.SeatReach`, filled in `renderingFor`. Only `mesh-artifact-store` is answered; any other seat is refused by name. - Empty answer (no store on the network yet): in an `into: json` file the empty member is dropped, and a list left empty is dropped, so the runtime is never told to trust "". Tests (`seat_into_test.go`): filled in a file and in an env value, empty dropped (other members kept), unknown seat refused, composed through `Declaration`. **Merge order (issue 190):** 1. **this PR** (controller: placeholder only; safe alone, nothing uses it yet) 2. mesh-catalog: docker states `insecure-registries` with the placeholder (only once this controller is deployed; an older controller would send the placeholder through literally) 3. mesh-controller: the overlay stops generating `registry-trust`/`registry-trust-reload`, and generated resources go through the collision check (only after 2; otherwise the docker module would lose the member, and with 2 in place the check would refuse the overlap if it ran first) mesh-host PR (a unit still held by another declared service is not given back when one of its records goes) should be deployed before 3. gofmt/vet clean; `go test ./...` passes against mesh-catalog main and against the catalogue branch, except `internal/broker TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose`, which fails on main as well (it reads mesh-host's genesis template beside it).
mesh-admin added 1 commit 2026-10-05 20:22:33 +00:00
The container runtime's module must state the mesh's registry to the runtime it owns, so the
controller can stop writing that into the runtime's file (hq issue 190). ${seat:<seat>:reach}
answers host:port without a binding: nothing required, granted or minted, and the address is
one the mesh already composes into every reference it built. Only mesh-artifact-store is
answered; another seat is refused by name. Unanswered in a file written into as JSON, the empty
member is dropped, so the runtime is never told to trust "".
mesh-admin merged commit d84c9699b3 into main 2026-10-05 20:31:32 +00:00
mesh-admin deleted branch fix/190-seat-reach 2026-10-05 20:31:32 +00:00
Author
Contributor

Delivery novox/mesh-controller@d84c9699b3b1 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-controller#62 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@d84c9699b3b1` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-controller#62 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
This repo is archived. You cannot comment on pull requests.
No Reviewers
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#62