Establish the repo for the completed Phase 0-3 build

Settles the design repository now that the self-upgrade build is on main:
- Records the two decisions that shipped without a record — ADR 0077 (the
  controller/foundation/node vocabulary) and ADR 0078 (the store and broker are
  ordinary modules); accepts ADR 0075 and 0076, which shipped work rests on.
- Fills issue 051's amended-design and wires ADR 0078 into 07-the-foundation.
- Sweeps the repo rename (mesh-control -> mesh-controller) into the mutable docs
  now that the forge repo is renamed; updates the glossary note and repos.md.
- Fixes the six broken links from the design-doc renames, indexes the glossary,
  regenerates the decisions reading order.

Both checks (records.py, index.py) are green. Statuses stay honest: the build is
on main and lab-proven but not deployed as the production mesh, so the to-be docs
remain in-progress and the as-is layer (the hal mesh) is unchanged — graduation
to implemented + as-is belongs to deployment, not merge.

https://claude.ai/code/session_01D6qtiYU3P9jk3pnAXyAFyx
This commit is contained in:
2026-09-17 00:04:58 +02:00
parent 0073e52881
commit 1111bd84d7
33 changed files with 188 additions and 54 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
layer: to-be
status: in-progress
code:
- mesh-control
- mesh-controller
updated: 2026-08-31
decisions:
- 02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md
+6 -1
View File
@@ -4,10 +4,15 @@ status: in-progress
code:
- mesh-host examples/foundation-first-node.lock
- mesh-host internal/apply
- mesh-host internal/bootstrap/phase3.go
- mesh-catalog modules/postgres
- mesh-catalog modules/lavinmq
- mesh-lab test/integration/mesh.test.ts (a bare machine becomes a mesh)
updated: 2026-08-31
updated: 2026-09-16
decisions:
- 02-DECISIONS/0004-a-node-and-how-it-joins.md
- 02-DECISIONS/0078-the-store-and-broker-are-modules.md
- 02-DECISIONS/0077-the-controller-and-the-foundation.md
- 02-DECISIONS/0005-the-node-host.md
- 02-DECISIONS/0006-the-substrate-and-the-control-plane.md
- 02-DECISIONS/0007-connectivity.md
+3 -3
View File
@@ -2,9 +2,9 @@
layer: to-be
status: in-progress
code:
- mesh-control internal/catalogue/filtering.go
- mesh-control examples/route-proxy
- mesh-control internal/identity/authority.go
- mesh-controller internal/catalogue/filtering.go
- mesh-controller examples/route-proxy
- mesh-controller internal/identity/authority.go
- mesh-host internal/identity/serving.go
- mesh-host internal/apply (the service that reflects a rule set)
updated: 2026-09-09
+6 -6
View File
@@ -6,8 +6,8 @@ code:
- mesh-host internal/link/enrol.go
- mesh-host packaging/nox-mesh-host-resume.service
- mesh-host packaging/nox-mesh-host-network.sh
- mesh-control internal/token
- mesh-control internal/inventory/nodes.go
- mesh-controller internal/token
- mesh-controller internal/inventory/nodes.go
updated: 2026-08-31
decisions:
- 02-DECISIONS/0004-a-node-and-how-it-joins.md
@@ -223,7 +223,7 @@ The same path, with the mesh built in the middle of it.
nox-mesh-host reconcile
# 2 — the controller now exists, and issues the first token
mesh-control token issue
mesh-controller token issue
# 3 — the machine joins the mesh it just raised
nox-mesh-host enrol --token <token>
@@ -548,8 +548,8 @@ rather than left to be worked out.
**A token is issued *for* a node record**, and that is where a re-enrolment is decided.
```
mesh-control token issue --node workstation # this machine is that node again
mesh-control token issue --new # a machine the mesh has not seen
mesh-controller token issue --node workstation # this machine is that node again
mesh-controller token issue --new # a machine the mesh has not seen
```
The host does not need to know which it is. It presents a token and receives an identity; what
@@ -629,7 +629,7 @@ keeps cataloguing.
### Where the enrolment token comes from
**`mesh-control token issue` prints it once**, to the person running it. Single-use, and it
**`mesh-controller token issue` prints it once**, to the person running it. Single-use, and it
expires whether used or not ([ADR 0004](../../02-DECISIONS/0004-a-node-and-how-it-joins.md)).
It is carried by hand — read off a screen, pasted into a terminal. That is the design rather than
+3 -3
View File
@@ -2,9 +2,9 @@
layer: to-be
status: in-progress
code:
- mesh-control internal/builder
- mesh-control cmd/mesh-control (build, build --behind, push, status)
- mesh-control internal/inventory/builds.go
- mesh-controller internal/builder
- mesh-controller cmd/mesh-controller (build, build --behind, push, status)
- mesh-controller internal/inventory/builds.go
updated: 2026-08-31
decisions:
- 02-DECISIONS/0010-delivery.md
+2 -2
View File
@@ -2,8 +2,8 @@
layer: to-be
status: in-progress
code:
- mesh-control cmd/mesh-control/board.go
- mesh-control cmd/mesh-control/readable.go
- mesh-controller cmd/mesh-controller/board.go
- mesh-controller cmd/mesh-controller/readable.go
updated: 2026-08-31
decisions:
- 02-DECISIONS/0008-a-context-owns-its-store.md
+4 -4
View File
@@ -3,10 +3,10 @@ layer: to-be
status: in-progress
code:
- mesh-catalog modules/builder
- mesh-control internal/builder
- mesh-control internal/catalogue/build.go
- mesh-control internal/inventory/secrets.go
- mesh-control cmd/mesh-builder
- mesh-controller internal/builder
- mesh-controller internal/catalogue/build.go
- mesh-controller internal/inventory/secrets.go
- mesh-controller cmd/mesh-builder
updated: 2026-09-12
decisions:
- 02-DECISIONS/0069-a-module-is-a-repository-and-a-path.md
@@ -2,9 +2,9 @@
layer: to-be
status: in-progress
code:
- mesh-control internal/inventory/secrets.go
- mesh-control cmd/mesh-control/rotate.go
- mesh-control examples/postgres-provisioner
- mesh-controller internal/inventory/secrets.go
- mesh-controller cmd/mesh-controller/rotate.go
- mesh-controller examples/postgres-provisioner
updated: 2026-09-01
decisions:
- 02-DECISIONS/0001-mesh-brokers-nodes-host-agents-think.md
+2 -2
View File
@@ -2,8 +2,8 @@
layer: to-be
status: in-progress
code:
- mesh-control internal/licences
- mesh-control cmd/mesh-control/licence.go
- mesh-controller internal/licences
- mesh-controller cmd/mesh-controller/licence.go
updated: 2026-09-05
decisions:
- 02-DECISIONS/0024-model-access-is-a-provision.md
+1 -1
View File
@@ -1,7 +1,7 @@
---
layer: to-be
status: designed
code: [mesh-control, mesh-host]
code: [mesh-controller, mesh-host]
updated: 2026-08-31
decisions:
- 02-DECISIONS/0004-a-node-and-how-it-joins.md
+2 -2
View File
@@ -2,8 +2,8 @@
layer: to-be
status: proposed
code:
- mesh-control cmd/mesh-builder
- mesh-control internal/builder
- mesh-controller cmd/mesh-builder
- mesh-controller internal/builder
- mesh-catalog modules/builder
updated: 2026-09-15
decisions:
+1 -1
View File
@@ -4,7 +4,7 @@ status: proposed
code:
- mesh-sdk src
- mesh-tools src/broker-amqp.ts
- mesh-control internal/link
- mesh-controller internal/link
updated: 2026-09-15
decisions:
- 02-DECISIONS/0074-the-wire-is-specified-not-the-types.md
+1 -1
View File
@@ -3,7 +3,7 @@ layer: to-be
status: proposed
code:
- mesh-catalog modules/showcase
- mesh-control internal/builder
- mesh-controller internal/builder
- mesh-sdk src
updated: 2026-09-15
decisions:
@@ -131,7 +131,7 @@ two.
|---|---|---|---|
| 1 | `postgres` | `postgres-database` | **the controller's own records and every module's.** One server, not two |
| 2 | `lavinmq` | `amqp` | the broker every node dials, and what modules are granted vhosts on |
| 3 | `mesh-control` | *claims* `the-controller` | decides what runs where |
| 3 | `mesh-controller` | *claims* `the-controller` | decides what runs where |
| 4 | `distribution` | `artifact-store` | what the mesh built, pinned by digest — the module is the software (Distribution), the provision is the job |
| 5 | `builder` | — | turns source into artifacts |
| 6 | `mesh-tools` | build inputs | the base everything with code compiles against. **Runs nowhere** |