--- status: active initiated: 2026-08-23 touches: - 02-DECISIONS/0015-mesh-brokers-nodes-host-agents-think.md - 02-DECISIONS/0017-modules-outside-the-core-are-grouped-by-domain.md - 03-DESIGN/00-as-is/00-overview.md - 03-DESIGN/01-to-be/00-work-breakdown.md became: [] --- # 006 — The mesh designed from nothing ## What is being investigated What the mesh would look like if it were laid out today, with the requirements known and none of the accumulated shape — expressed as a **skeleton**: repositories at the root, modules inside them, and whatever turns out to be the right leaf unit below that. The deliverable is [`skeleton.md`](skeleton.md). ## Why Every structural decision so far has been a **correction**: eight contexts replacing thirty-three modules ([ADR 0015](../../02-DECISIONS/0015-mesh-brokers-nodes-host-agents-think.md)), domains replacing single-function modules ([ADR 0017](../../02-DECISIONS/0017-modules-outside-the-core-are-grouped-by-domain.md)). A correction inherits the frame of the thing it corrects, and two of the mesh's oldest problems look unsolvable from inside that frame: - **The bootstrap circularity.** The mesh needs a database, a bus, a registry and an identity provider. Those are modules the mesh installs. The mesh cannot install them before it exists. This has been worked around repeatedly and never designed away. - **Participation requires privilege.** Everything assumes root on a machine whose packages and services the mesh owns. A phone cannot participate on those terms, and neither can a machine someone else administers. Designing from nothing is a way to find out which parts of the current shape are requirements and which are residue. ## The requirements this is designed against Stated by the operator, recorded here so the skeleton can be checked against them rather than against taste: 1. The mesh manages multiple computers — **full control**, through modules installed to nodes. 2. Mesh state lives in a **database**: which modules on which nodes, logs, configuration. 3. Configuration has **several touchpoints** — tool surface, web interface, others — all hosted by the mesh itself. 4. **Connectivity** is core: every node reachable from every other over a shared overlay, some nodes publicly exposed, firewalls configured. 5. The mesh **hosts applications** — and requires some of them itself. This is the circularity. 6. **Arch Linux only for now**; ideally any device, including phones, on lighter terms. 7. The end goal is to **operate an IT company** on it — development, design, deployment, full circle, self-hosted. Personal cloud infrastructure. 8. **Agents make it self-improving and self-healing.** 9. It is **end-to-end testable on one machine** ([ADR 0016](../../02-DECISIONS/0016-a-lab-node-is-a-virtual-machine.md)). ## Status A first skeleton exists, with four design moves that the current shape does not have. It is `active` because two of them are unproven and one contradicts a record that is already accepted. **Finding worth stating up front:** [ADR 0015](../../02-DECISIONS/0015-mesh-brokers-nodes-host-agents-think.md) names nine bounded contexts and **none of them owns connectivity** — no overlay, no resolution, no firewall, no ingress. Requirement 4 has no home in the accepted decomposition, while [research 005](../005-domain-grouping/analysis.md) found reachability to be the *only* part of the catalogue where modules genuinely change together under one intent. The skeleton adds it. ## Open questions | Question | Why it is open | |---|---| | Does the record — the event log contexts integrate through — belong to the substrate or the control plane? | It is infrastructure by shape and domain by content. Placing it wrong reintroduces a circularity. | | One repository per tier, or per context? | Already open from ADR 0015 as "catalogue destination — one repository or many". The skeleton assumes per tier and does not settle it. | | Does an unprivileged node earn a place in the inventory, or only a presence? | Decides whether "node" means one thing or two. | | Does `feature` survive? | The skeleton splits it in two and argues the conflation is what makes the delivery pipeline hard to reason about. Unproven. |