From f709e8e0fb38c9e107e3eeea0b507f0c6519d895 Mon Sep 17 00:00:00 2001 From: jochen Date: Sat, 26 Sep 2026 17:21:14 +0200 Subject: [PATCH] Issues 119 and 122: what a host path is, and what a node's layout would replace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not every host path names this machine. A system file the mesh owns is at that path on every machine of the kind — the path is the fact. The operator's shared data is already answered as an access. A path inside a container is the software's contract. What is left, and what a node's default layout would replace, is 514: a module's own data, and what the mesh writes for that module. Documents the reservation model as the records already have it — a root per node, one directory per assignment, a placement for adopted data — and the three things nothing states: where the root comes from, what sits beneath it, and the order the 514 are retired in. Stops there deliberately. Changing where a definition looks without moving the data does not fail: the mesh creates the directory, the container starts, the service comes up empty. Retiring these is a data migration with a verification step, module by module, and belongs with whoever can see the machine. --- .../00-report.md | 51 +++++++++++++++++++ .../00-report.md | 7 ++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/04-ISSUES/119-a-module-definition-decides-where-its-files-live/00-report.md b/04-ISSUES/119-a-module-definition-decides-where-its-files-live/00-report.md index ec7cd08..d7272c0 100644 --- a/04-ISSUES/119-a-module-definition-decides-where-its-files-live/00-report.md +++ b/04-ISSUES/119-a-module-definition-decides-where-its-files-live/00-report.md @@ -32,6 +32,57 @@ mount a path its module never declared ([ADR 0091](../../02-DECISIONS/0091-a-mou Nothing checks the same path where it is retyped as a value: an environment variable, an env-file line, a literal in module code. +## 2026-09-26 — counted by what the path *is*, and what a node's layout would replace + +The count above treats every host path the same. They are not the same, and only one of the +categories is this issue's subject. Recounted by role across the 71 definitions: + +| What the path is | Count | Does a definition naming it name *this* machine? | +|---|---|---| +| A module's own data, `/var/lib//…` | 289 | **Yes** — this issue | +| What the mesh writes for a module, `/var/lib/mesh//…` | 225 | **Yes** — this issue | +| The operator's shared data, `/services/…` | 166 | Separately answered: an `access`, never created or owned by the mesh ([ADR 0051](../../02-DECISIONS/0051-shared-data-is-the-operators.md)); *where* it is belongs on the assignment | +| A system file the mesh owns, `/etc/…` and a few under `/var/` | 18 | **No.** The path is the fact — that file is at that path on every machine of the kind. Naming it says nothing about this installation | +| A path inside a container | 236 | **No.** The software's own contract, true in any mesh that runs the image | + +So the category a node's default layout would replace is **514**, not 789 and not 698: a module's own +data, and what the mesh writes for that module. The rest is either already answered or was never the +problem. + +## What the design already says, and what it does not + +[ADR 0112](../../02-DECISIONS/0112-a-module-definition-names-no-node-mesh-or-path.md) (proposed) +makes a directory a host provision whose contract is the owner and mode the module needs, and says +where it lands on the machine is the assignment's. +[To-be 27](../../03-DESIGN/01-to-be/27-a-module-requires-the-mesh-resolves.md) (proposed) resolves +that two ways: **a node's default layout — a root per node with one directory per assignment beneath +it** — used when the assignment says nothing, and **a placement** when the assignment puts one +directory elsewhere, such as where an adopted machine's data already is. + +That is the reservation model: assigning a module to a node gives it a directory, and the definition +never names one. Three things are not written anywhere: + +1. **Where the root comes from.** Nothing says it is a node setting, fixed when the node is installed, + and nothing says what a node that states none falls back to. +2. **What sits beneath it.** To-be 27's own open list ends at exactly this: the layout beneath the + root, beyond one directory per assignment. The catalogue currently keeps two subtrees per module — + its data, and what the mesh writes for it — so this decides whether an assignment's directory holds + both, or the mesh keeps its own. +3. **The order the existing 514 are retired in**, which 0112 also leaves open. + +## Why this is not a manifest edit + +Every one of those 514 paths names a directory that holds data a service is using. A definition that +changes where it looks, without the data moving with it, does not fail: the mesh creates the new +directory with the right owner and mode, the container starts, and the service comes up **empty**. +The loudest case in this mesh is an object store consumer whose bucket holds 174.9 GiB; a mail spool +and the mesh's own store are the same shape. + +So the retirement of these paths is a **data migration with a verification step**, module by module, +not a change to a definition. That is the reason this section documents and stops: the count and the +categories are what someone needs to plan it, and the planning belongs with whoever can see the +machine. + ### Where that has already gone wrong - **A provider that would provision nobody, silently.** One DNS provider mounts its grants diff --git a/04-ISSUES/122-a-module-cannot-ask-for-its-own-public-name/00-report.md b/04-ISSUES/122-a-module-cannot-ask-for-its-own-public-name/00-report.md index 7ce8422..9986fcc 100644 --- a/04-ISSUES/122-a-module-cannot-ask-for-its-own-public-name/00-report.md +++ b/04-ISSUES/122-a-module-cannot-ask-for-its-own-public-name/00-report.md @@ -38,7 +38,7 @@ definitions, for values that could only be true of one installation: | A public domain, or a name under one | 49 | 26 | | The node's own name | 58 | 19 | | A routable IP address | 12 | 1 | -| A **host** path — where a file sits on the machine | 698 | 70 | +| A host path for a module's own files — the node's to decide | 514 | 70 | | An email address | 0 | 0 | The path row is [issue 119](../119-a-module-definition-decides-where-its-files-live/00-report.md), @@ -48,7 +48,10 @@ data in are the software's own contract, true in any mesh that runs it; only the names where it landed. The first sweep matched path-shaped strings and so counted both halves of every mount and every in-container location a value mentioned. Counted by role instead — directory and file resources, the host side of mounts, accesses, and the targets of binds, grants, receives and secrets — -it is 698 across 70 definitions. Issue 119's own figure is role-counted already and close to this; it +it is 698 across 70 definitions — of which **514** are the category at issue. The rest are a system +file the mesh owns (`/etc/…`, where the path is the fact and is the same on every machine) and the +operator's shared data, which ADR 0051 already answers as an access. Issue 119 carries that breakdown +and what a node's default layout would replace. Issue 119's own figure is role-counted already and close to this; it additionally counts paths written into environment values, a few of which are container-side. The rest of the table is this issue. **Thirty of the seventy-one definitions name this -- 2.54.0