papa-hq reads 01 research -> 03 decision -> 02 design. The order is a scar, not a choice: 02-DESIGN existed from its initial commit, and when adr/ was finally promoted on 2026-07-13 it took the next free number rather than its place in the sequence. By then design was too settled to renumber. hal-hq was three commits old, so it is not. adr/ becomes 02-DECISIONS and 02-DESIGN becomes 03-DESIGN, and following the folder numbers now walks the process in the order it happens: research produces a decision, the decision authorises a design. 00-GENESIS becomes 00-META, matching papa's rename from the same restructure. Every path reference rewritten across documents, frontmatter, playbooks and skills. All links resolve; all 58 frontmatter blocks parse and their path fields still point at files that exist.
60 lines
2.9 KiB
Markdown
60 lines
2.9 KiB
Markdown
---
|
|
status: graduated
|
|
initiated: 2026-08-22
|
|
touches: [03-DESIGN/00-as-is/04-delivery.md, 03-DESIGN/00-as-is/05-runtime-and-installation.md]
|
|
became: [03-DESIGN/01-to-be/01-end-to-end-testing.md, 02-DECISIONS/0016-a-lab-node-is-a-virtual-machine.md]
|
|
---
|
|
|
|
# 002 — A mesh that runs locally
|
|
|
|
- **Initiated by:** jochen, 2026-08-22
|
|
- **Areas touched:** `install.d/`, `hal/meshware`, `hal/coordinator`, `hal/brain`,
|
|
`hal/developer` (`dev_up`), `hal/sdk` (env generation, feature handlers, artifact
|
|
manager), `test/pipeline/`, `test/dev-mesh/`, the provisioning path in
|
|
`modules/postgres/`.
|
|
|
|
## Summary
|
|
|
|
Phase 0 of [`03-DESIGN/00-work-breakdown.md`](../../03-DESIGN/01-to-be/00-work-breakdown.md) requires
|
|
a mesh that comes up in containers, runs its own pipeline, and reproduces known faults on
|
|
demand. Nothing else in the decomposition starts until it exists, because every fault the
|
|
decomposition addresses was found in production — there was nowhere else to find it.
|
|
|
|
This effort establishes what already runs in a container, what is welded to the host, and
|
|
what it would take to close the gap. It does **not** choose an approach: the central
|
|
question — how a containerised node executes a module service, when a module service is
|
|
defined today as a systemd unit shelling to `docker compose` in `/services/` — is not
|
|
answered by ADR 0015 and is recorded below rather than decided.
|
|
|
|
## What was established
|
|
|
|
- The two existing container harnesses are **neither of them a mesh**, and one of them has
|
|
not been able to build since 2026-06-04.
|
|
- Node identity is already portable — a single environment variable, no host handshake.
|
|
- Four concrete host couplings block a containerised node, all with known locations.
|
|
- All three Phase 0 fixtures are reproducible; one of them is documented in the knowledge
|
|
base with an open root cause and is the cheapest place to start.
|
|
|
|
Detail and evidence in [`analysis.md`](analysis.md).
|
|
|
|
## Questions — all settled 2026-08-22
|
|
|
|
**Phase 0 is a development environment**, not a fixture rig — it is what the host-borrowing
|
|
dev tooling becomes.
|
|
|
|
**The trigger is a real source-forge container**, because the webhook relay is part of what
|
|
is under test.
|
|
|
|
**A node is a system container**, promotable to a virtual machine per node. This answered
|
|
the question the effort was stuck on, and dissolved it rather than solving it: against a
|
|
real node with a real init, the four host couplings catalogued in `analysis.md` §3 are not
|
|
couplings — they are how a node works. They were obstacles only to a node modelled as an
|
|
application container.
|
|
|
|
Consequently [`003-service-supervision`](../003-service-supervision/) **no longer blocks
|
|
Phase 0**. It remains a live architecture question, on its own timeline.
|
|
|
|
The remaining questions in `analysis.md` — what replaces host paths in a container, and how
|
|
faithful the lab must be — are answered in the design: nothing replaces them, because the
|
|
paths are real; and the divergences are enumerated rather than discovered.
|