--- status: ongoing initiated: 2026-08-22 touches: [02-DESIGN/00-as-is/02-modules-and-manifests.md, 02-DESIGN/00-as-is/10-module-catalogue.md, 02-DESIGN/01-to-be/00-work-breakdown.md] became: [adr/0015-mesh-brokers-nodes-host-agents-think.md] --- # 001 — Module domain decomposition - **Initiated by:** jochen, 2026-08-22 - **Areas touched:** every `hal/*` and `noxflow/*` module; the pipeline's dependency graph; the knowledge base; agent identity and credentials. ## Summary HAL has 124 modules. That number is not a maintenance problem in itself — it is the **symptom of missing bounded contexts**. Modules are split not because they model different domains, but because splitting is the only lever the platform offers: - no way to run one daemon on one node without making it a module (`hal/claude-licences` — one daemon, single-node) - no way to expose two of a kind from one module - no namespace separating the mesh from the software it runs This effort establishes the **current state**, the **ideal state**, and the sequence between them. ## Trigger A night of debugging that produced four fixes and one conclusion. Every fault was a boundary fault: - Per-agent Claude credentials had to be written by the *noxflow runtime*, because `agents.claude_account` is in noxflow's database — even though agent identity is a mesh concept and node identity already lives in the mesh registry. - Whether `hal/brain` may depend on noxflow took three attempts to answer, twice wrongly, because the ownership boundary was never stated. - Authoritative documentation existed in `mesh_docs` and was not found, while a proposal in repo markdown was invisible to search entirely. ## Decisions taken (2026-08-22) | Question | Decision | |---|---| | What should noxflow become? | Decompose into `hal/*` modules; noxflow returns to tasks/workflows | | Who owns agent identity? | `hal/agents` — a mesh concept, alongside nodes | | Where do third-party apps live? | Out of this repo. They run *on* the mesh; they are not *of* it | | Knowledge structure | Modelled on `papa-hq`; implementation choice left open | ## Open questions Tracked in [`analysis.md`](analysis.md) under "Open questions".