Reconcile: adopt initialization's consolidated HQ as canonical, re-home this session's new work #24

Merged
jschoubben merged 177 commits from reconcile-init-into-main into main 2026-09-05 10:27:11 +00:00
2 changed files with 20 additions and 4 deletions
Showing only changes of commit c557f99cba - Show all commits
@@ -89,9 +89,24 @@ broken one.
host ships as a package from the mesh's own repository
([ADR 0058](0058-delivery-ends-in-a-declaration.md)), and a `.pkg.tar.zst` is an Arch artifact.
A per-OS binary is consistent with what was already decided rather than an addition to it.
- **The container runtime is left unresolved on purpose**, because it is not an OS split: Arch
runs docker or podman. Per-OS hosts answer the service and package managers and leave the
runtime a genuine choice *within* a host. That is a separate decision.
- **The container runtime is a choice within a host, not an OS split** — Arch runs docker or
podman — and it is **detected, not declared**, because adoption keeps what the machine already
has. Two are supported.
This is the opposite answer to the one above, for a reason rather than by preference.
Abstracting service managers is *lossy*: systemd and OpenRC are different models, and
`LoadState` has no equivalent. Container runtimes deliberately converged on one CLI, so almost
nothing is lost — checked against podman 6.1.0, `run`, `rm -f` and docker's own template
syntax for reading state and labels all work unchanged. **Only the probe differs**
(`{{.ServerVersion}}` against `{{.Version.Version}}`), which makes it a two-entry lookup
rather than an interface.
**One difference is not in the CLI and would have shipped silently.** Podman accepts
`--restart unless-stopped` and records it, and has no daemon to act on it: containers do not
come back after a reboot unless `podman-restart.service` is enabled, which it is not by
default. Every command reports success and the effect does not happen. That belongs in the
**declaration** — a node using podman is told to enable that unit — rather than in the host,
which keeps the host dumb and puts the difference where a person can read it.
- **A second operating system is now additive rather than a redesign** — write two appliers, ship
a package. And it will be designed against a real machine rather than a guess, which is the
point of not building the abstraction now.
+2 -1
View File
@@ -272,7 +272,8 @@ Raising the substrate needs six shapes in the host's vocabulary, and **all six a
| | | |
|---|---|---|
| `directory`, `file`, `service` | **built** | the first three |
| `directory`, `file` | **built** | no machine dependency at all |
| `service` | **built** | running/stopped **and** enabled/disabled at boot — a unit started but not enabled stops being true at the next reboot |
| `package` | **built** | present, never upgraded, and **never uninstalled** — the host cannot know what else needs it, so dropping one is *forgotten*, not *removed* |
| `container` | **built** | pinned by digest ([ADR 0046](../../02-DECISIONS/0046-the-installer-fetches-what-it-pins.md)); identified by a label carrying a digest of the declaration that made it, because a runtime normalises what it is given and that is indistinguishable from drift |
| `action` | **built** | bundle-only ([ADR 0047](../../02-DECISIONS/0047-the-bundle-may-carry-actions-the-link-may-not.md)); verify is mandatory and is the idempotency check as well as the read-back |