diff --git a/03-DESIGN/01-to-be/42-the-machines-modules-in-order.md b/03-DESIGN/01-to-be/42-the-machines-modules-in-order.md new file mode 100644 index 0000000..7708391 --- /dev/null +++ b/03-DESIGN/01-to-be/42-the-machines-modules-in-order.md @@ -0,0 +1,98 @@ +--- +layer: to-be +status: in-progress +code: [mesh-catalog, mesh-controller, mesh-host] +updated: 2026-10-04 +decisions: + - 02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md + - 02-DECISIONS/0040-what-a-module-is.md + - 02-DECISIONS/0112-a-module-definition-names-no-node-mesh-or-path.md + - 02-DECISIONS/0175-one-tool-runtime-per-node-serves-every-modules-tools-on-the-host-side.md + - 02-DECISIONS/0182-inside-a-home-the-mesh-owns-what-it-places-and-holds-the-rest-as-found.md + - 02-DECISIONS/0198-a-modules-long-running-code-is-launched-by-the-node-runtime-and-reaches-the-bus-through-it.md + - 02-DECISIONS/0203-the-accounts-environment-is-one-modules-and-every-module-contributes-to-it.md + - 02-DECISIONS/0204-a-module-contributes-shell-code-to-the-login-shell-in-named-slots.md + - 02-DECISIONS/0205-software-the-distribution-does-not-package-ships-as-a-pinned-archive-of-the-module.md +--- + +# 42. The machines' modules, in order + +The order in which the modules of [research 026](../../01-RESEARCH/026-the-graphical-session-as-modules/00-overview.md) +and [research 027](../../01-RESEARCH/027-the-system-layer-as-modules/00-overview.md) are built and rolled +out, as the operator set it on 2026-10-04. + +Three phases, in order, each built from the bottom up (the most core module first): + +1. the modules every machine shares; +2. those both workstations share; +3. those of one machine model. + +The shell came first ([to-be 41](41-the-shell-and-the-accounts-environment.md)). Each module's +definition, improvements and tools follow the research. A position that needs a new mechanism (a new +seat, a gated assignment, generalised contributions) gets its record when its first module needs it, +not before. Modules that need none go ahead now. + +## How every module moves + +1. Written in the catalogue, with its tools and their tests, and checked by the controller's catalogue + check. +2. Merged, which builds it. +3. Assigned to **the first workstation, the proving machine**, and pushed. Its tools and files are + proven there. +4. Then assigned to every other machine it applies to, and pushed. + +The operator delegated the go-ahead for each step on 2026-10-04 ("non-important decisions, easily +reversed"). Each step is reported. + +**Adopting is also improving** (research 026, 027 overviews): every module lists what it fixes over +today, and leaves no predecessor copy of what it now owns. + +## Phase 1 — every machine + +In order: + +| | module | owns | improves | +|---|---|---|---| +| 1 | `sudo` | the operator account's escalation, as a drop-in it owns | declares what three modules' tools assume and nothing stated | +| 2 | `localization` | locale, time zone, console keymap | one machine on another zone and keymap | +| 3 | `time-sync` | timesyncd and its servers | two different daemons across four machines | +| 4 | `pacman` | the package manager's configuration, mirrors and their refresh, cache cleaning | mirrors generated once and never again; caches never cleaned | +| 5 | `logrotate` | the timer and base configuration | rotation running on one machine of four | +| 6 | `avahi` | the daemon | on all four, owned by none | +| 7 | `systemd` | the service manager's tools (to-be 41 WP4) | built, assigned nowhere | +| 8 | `docker` | the runtime's packages, base configuration, group | four configurations, one owner on one machine | +| 9 | `ssh-client` | everything under `~/.ssh` (research 027/03) | a predecessor's entries winning over the mesh's; stale keys | +| 10 | scripts | the operator's own scripts, shared and per role (research 027/03) | under no version control, copied by hand | +| 11 | `kernel` | kernel, microcode, boot entries | two machines without microcode | + +`kernel` is last because a mistake in it costs a boot. `docker` stays a module without the runtime seat +until ADRs 0165 and 0166 are accepted. + +## Phase 2 — both workstations + +In order: + +1. `fonts`; +2. `xorg` with autorandr; +3. `lemurs`; +4. `i3`; +5. `xterm`; +6. the theme module; +7. `picom`, `rofi`, `dmenu`, `dunst`, the lock module, `xclip`, the clipboard manager, `feh` and + `i3status-rust`; +8. `gnome-keyring`; +9. `docker-compose`, `snapd`, `flatpak`, `cups`, `bluetooth`. + +The seats, gating and session-start questions of research 026 §2–§5 are recorded when `xorg` and `i3` +need them. + +## Phase 3 — one machine model + +The laptop's hardware module (vendor daemon, GPU mode, charge limit, logind, brightness and vendor keys) +and `memory-pressure` (research 027/03). + +## How it is checked + +Each module's own tests and the catalogue check, at merge. On the proving machine, each tool answered +through the mesh and each owned file checked in place, before any other machine is assigned. This +document's tables are updated as each module lands. diff --git a/03-DESIGN/01-to-be/README.md b/03-DESIGN/01-to-be/README.md index 125651c..ab52764 100644 --- a/03-DESIGN/01-to-be/README.md +++ b/03-DESIGN/01-to-be/README.md @@ -44,6 +44,7 @@ document is written and this one's status becomes `implemented`. | [`37-the-operators-machine.md`](37-the-operators-machine.md) | **In progress.** Every configurable thing on a node is a module, the home included; one default per module varied by settings or kept regions; roles a machine has once as seats with tool contracts; one tool runtime per node on the host side | [ADR 0173](../../02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md), [0174](../../02-DECISIONS/0174-a-node-varies-a-module-through-settings-and-kept-regions-never-an-edit.md), [0175](../../02-DECISIONS/0175-one-tool-runtime-per-node-serves-every-modules-tools-on-the-host-side.md), [0176](../../02-DECISIONS/0176-the-login-shell-is-a-node-seat-and-execute-is-its-contract.md), [0177](../../02-DECISIONS/0177-a-unit-may-be-user-scoped-and-the-service-manager-is-a-node-seat.md) | | [`38-building-the-operators-machine.md`](38-building-the-operators-machine.md) | **In progress.** The work of design 37 as packages: the runtime serves many modules, the controller composes one per node, the console becomes its serving mode, the packet filter moves first, then the shell and the service manager — tested on the live mesh by the operator's decision | [ADR 0175](../../02-DECISIONS/0175-one-tool-runtime-per-node-serves-every-modules-tools-on-the-host-side.md), [0160](../../02-DECISIONS/0160-the-mesh-issues-an-assignments-subjects-and-a-runtime-serves-what-it-is-issued.md), [0149](../../02-DECISIONS/0149-the-live-mesh-is-the-test-bed.md) | | [`41-the-shell-and-the-accounts-environment.md`](41-the-shell-and-the-accounts-environment.md) | **In progress.** The shell and the account's environment as modules: an environment module every module contributes variables and `PATH` entries to, shell code contributed to the login shell in named slots, the prompt and plugins as modules, the host giving a login back, and the service manager's module finished | [ADR 0203](../../02-DECISIONS/0203-the-accounts-environment-is-one-modules-and-every-module-contributes-to-it.md), [ADR 0204](../../02-DECISIONS/0204-a-module-contributes-shell-code-to-the-login-shell-in-named-slots.md), [ADR 0205](../../02-DECISIONS/0205-software-the-distribution-does-not-package-ships-as-a-pinned-archive-of-the-module.md) | +| [`42-the-machines-modules-in-order.md`](42-the-machines-modules-in-order.md) | **In progress.** The order the machines' modules of research 026 and 027 are built and rolled out: every machine's first (sudo, localization, time sync, pacman, logrotate, avahi, systemd, docker, `~/.ssh`, scripts, kernel), then both workstations', then one machine model's; each proven on one workstation before the rest | [ADR 0173](../../02-DECISIONS/0173-the-operators-machine-is-the-meshs-and-a-module-is-what-it-declares.md), [ADR 0182](../../02-DECISIONS/0182-inside-a-home-the-mesh-owns-what-it-places-and-holds-the-rest-as-found.md), [ADR 0205](../../02-DECISIONS/0205-software-the-distribution-does-not-package-ships-as-a-pinned-archive-of-the-module.md) | ## Not yet written