Files
hq/01-RESEARCH/001-module-domain-decomposition/00-overview.md
T
jschoubben f05e4a0dce Follow papa-hq's research convention; the mesh links nothing
Research efforts move from status.md to 00-overview.md with active /
graduated / abandoned, matching papa-hq so the two repositories read the
same way. Playbooks, skills, README and the ledger follow.

Reverses yesterday's withdrawal of the symlink note in GENESIS. The note
was right and the withdrawal was wrong: the intent is that the mesh
creates no symlinks at all, so a founding document listing "symlinks, not
copies" as a design principle does point the opposite way from where this
is going, and that is a contradiction rather than a stale detail.

ADR 0018 records the position, proposed. ADR 0011 stays as it is — it is
the historical decision and the incident behind it is why anyone believes
either record — and is superseded in intent, not edited. Its one
editorial line, which called the wider reading false, is corrected to
state what is actually true: centralising who may link narrowed the
incident class without closing it, because a link the installer makes
resolves exactly like one made by hand.

The argument that kept linking was staleness. ADR 0004 removed it: every
managed file is already derived and reconciled, so a copy is the natural
form and a pointer into source is the shape the mesh's own model forbids
everywhere else. What is not settled, and is marked open, is how
staleness gets detected — which is the decision that makes or breaks it.
2026-08-23 09:29:09 +02:00

2.2 KiB

status, initiated, touches, became
status initiated touches became
active 2026-08-22
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
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 under "Open questions".