Jochen asked whether the order made sense. It did not -- it followed when things happened to be decided, which after consolidation is fictional anyway since record 5 alone folds decisions taken across a week. Concretely wrong before: the domain statement sat at 8, after five engineering rules; the constitution was scattered across 5, 12 and 17; the tiers landed at 15, 16, 21 and 22 with process records in between. Now it walks: what the mesh is (1-3), its tiers from the bottom up (4-8), what runs on them and how it gets there (9-10), how it is built (11-16), how it is checked (17-18), how we work (19-23). Two things made this safe rather than free. It is a permutation, not a compaction, so the renames go through temporary names -- otherwise two files want one slot and one is lost. And the reference rewrite is a single simultaneous pass, because almost every number moved into a slot another number was vacating; replacing one at a time would have cascaded and pointed things at the wrong record while still resolving. Verified: 284 [ADR NNNN](path) links across the repository, all with matching text and target. The ordering principle is now stated in 19 rather than left implicit -- the repository already said "the numbering is the flow" about its folders, and there was no reason for the records to be the exception.
88 lines
4.7 KiB
Markdown
88 lines
4.7 KiB
Markdown
---
|
|
status: graduated
|
|
initiated: 2026-08-23
|
|
touches:
|
|
- 02-DECISIONS/0009-modules-and-the-graph.md
|
|
- 03-DESIGN/00-as-is/10-module-catalogue.md
|
|
- 03-DESIGN/00-as-is/02-modules-and-manifests.md
|
|
became:
|
|
- 02-DECISIONS/0009-modules-and-the-graph.md
|
|
- 02-DECISIONS/0009-modules-and-the-graph.md
|
|
---
|
|
|
|
# 005 — Which domains the catalogue groups into
|
|
|
|
[ADR 0009](../../02-DECISIONS/0009-modules-and-the-graph.md) settles
|
|
that modules outside the platform core are grouped by domain rather than by single function,
|
|
and deliberately does not settle the list. This effort settles the list — and, first, tests
|
|
whether the premise survives measurement.
|
|
|
|
## What is being investigated
|
|
|
|
Eighty-nine modules sit outside the platform core. The question is which of them belong
|
|
together, and the method is evidence rather than intuition: **which modules actually change
|
|
together**, measured across the full history of the code repository.
|
|
|
|
## Why
|
|
|
|
The argument in ADR 0022 is that the catalogue's shape records what was installed rather than
|
|
what anything is for — that four modules constituting "how a node is reachable" have no
|
|
relationship the mesh can see, so a change to connectivity is made four times.
|
|
|
|
That argument is testable. If those modules genuinely change together, the grouping is
|
|
justified by more than tidiness. If they do not, the premise needs revising before a list is
|
|
drawn from it.
|
|
|
|
## What it touches
|
|
|
|
The catalogue's shape, the manifest, and — for one candidate grouping — the provisioning
|
|
reference itself, since a requirement names a provider **module**. Grouping providers would
|
|
change what a consumer names.
|
|
|
|
## Status
|
|
|
|
Measurement is done and is in [`analysis.md`](analysis.md). It **partly contradicts the
|
|
premise**, in a way that narrows the effort usefully:
|
|
|
|
- Non-platform modules overwhelmingly change **alone** — 10% of commits touch more than one,
|
|
and 50 of 89 never co-change with anything.
|
|
- Two clusters do exist. One of them, reachability, holds up as a domain.
|
|
- The other, the provisioned infrastructure providers, co-changes for a reason that argues
|
|
**against** grouping rather than for it.
|
|
|
|
The remaining work is the list itself, for the modules where grouping is justified, plus the
|
|
open questions below.
|
|
|
|
## What it became
|
|
|
|
*Closed 2026-08-28.* Three of the four questions are answered, and by records that did not cite
|
|
this effort — which is why it stayed open after being resolved.
|
|
|
|
**Whether provider modules group at all** — *no.*
|
|
[ADR 0009](../../02-DECISIONS/0009-modules-and-the-graph.md):
|
|
there is no `networking` thing to install, there are concrete modules named individually. Folders
|
|
assert relationships; edges record them. *Provider* stops being a category at the same time.
|
|
|
|
**Whether "group or leave" is even the right pair of options** — *it was not*, and that is the
|
|
useful finding. [ADR 0009](../../02-DECISIONS/0009-modules-and-the-graph.md)
|
|
reframes it: things that change together share an **authority**, not a package. This effort's own
|
|
measurement is what that record rests on — reachability being the *only* place modules genuinely
|
|
co-change is why connectivity is a context and why nothing else needed one.
|
|
|
|
**What to do with the ~50 modules that co-change with nothing** — *nothing.* They are modules.
|
|
Grouping is a tag and a query over the graph, neither of which anybody keeps true by hand.
|
|
|
|
**What remains is a sequencing question, not a grouping one**, and it moves rather than closes:
|
|
*whether applications leave the monorepo before or after they group* is
|
|
[research 009](../009-migration/00-overview.md)'s, because it is about how to get from here to
|
|
there rather than about what the shape is.
|
|
|
|
## Open (superseded by the above) questions
|
|
|
|
| Question | Why it is open |
|
|
|---|---|
|
|
| Whether provider modules group at all, and if so what a consumer's requirement names instead of a module. | The provisioning reference is load-bearing; getting it wrong is expensive. Opinion and evidence in the analysis; not yet decided. |
|
|
| Whether applications group into domains now and leave the monorepo later as a unit, or leave first. | Decided in principle — group first, then split — but the migration order has real cost either way. |
|
|
| What to do with the ~50 modules that co-change with nothing. | The evidence gives no grouping signal for them at all. That may mean they are correctly sized already. |
|
|
| Whether "group or leave" is even the right pair of options. | [Research 006](../006-mesh-from-scratch/code-skeleton.md) finds a third fate — **absorbed into the node host**, ceasing to be a module at all — and argues it is the correct answer for the reachability cluster this effort measured. If so, the cluster this effort found is evidence for absorption rather than for grouping. |
|