Decide the fate of the 18 residual modules — the registry governs 33 of 51 #11

Open
opened 2026-08-04 07:56:34 +00:00 by agent.odin · 0 comments
Collaborator

Stable ID: FM-AUDIT-02
Source: nix eval --json .#aspects.graph, modules/hosts.nix
Source status: new finding, not previously tracked
Disposition: open owner decision, then per-module work
Epic: #9
Blocked by: owner decision on the target state

Problem

modules/hosts.nix:52-56 imports residualIds class ++ closure. A host's root
list decides 33 modules and is silent about the other 18 — 2 069 lines, 26% of
the module tree, and it includes every service the fleet actually runs:
services/forgejo, services/matrix, services/librefang,
services/syncthing, services/perses, policies/vaults, policies/base,
policies/identity, integrations/mesh-dns.

The full residual set: contracts/observability, contracts/routes,
implementations/caddy, integrations/mesh-dns,
integrations/mesh-librefang, integrations/vault-dashboards,
integrations/vault-storage, integrations/victoria-dashboards,
integrations/victoria-whoami, policies/acme, policies/base,
policies/identity, policies/vaults, services/forgejo,
services/librefang, services/matrix, services/perses,
services/syncthing.

tests/aspects/fixtures/warning-budget.json pins this at {"residual": 18}.
A budget is a ratchet only if something lowers it; nothing has.

The five servers resolve to six aspects each. Their real configuration lives in
the residual set and in their host file. aspects-isolation guards exactly one
aspect on exactly one host (services/victoria on bifrost) — a proof of
concept, not a fleet property, and it cannot become one while 18 modules bypass
selection by construction.

Decision needed

Either:

  • annotate — name the date residual must reach 0, and work the list down,
    lowering the budget with each module; or
  • retire the framing — state that broad injection is the design, drop the
    residual diagnostic and the migration language in modules/hosts.nix and
    modules/aspects/compat.nix.

The current middle state pays for the registry and does not get its guarantee.

Acceptance

  • One of the two paths chosen and recorded here.
  • If annotate: a per-module disposition (record or delete), and
    warning-budget.json lower than 18.
  • If retire: the residual diagnostic and the removal-condition comments are
    gone, and aspects-isolation's scope is stated honestly.

Provenance

Split from #9 (FM-ASPECT-AUDIT). Audit run 2026-08-04 by agent.odin against commit fc3b751, with modules/implementations/{forgejo-agents,hermes}.nix and outputs/hosts/odin/{configuration.nix,secrets.agents.yaml} dirty in the working copy.

Stable ID: FM-AUDIT-02 Source: `nix eval --json .#aspects.graph`, `modules/hosts.nix` Source status: new finding, not previously tracked Disposition: open owner decision, then per-module work Epic: #9 Blocked by: owner decision on the target state ## Problem `modules/hosts.nix:52-56` imports `residualIds class ++ closure`. A host's root list decides 33 modules and is silent about the other 18 — 2 069 lines, 26% of the module tree, and it includes every service the fleet actually runs: `services/forgejo`, `services/matrix`, `services/librefang`, `services/syncthing`, `services/perses`, `policies/vaults`, `policies/base`, `policies/identity`, `integrations/mesh-dns`. The full residual set: `contracts/observability`, `contracts/routes`, `implementations/caddy`, `integrations/mesh-dns`, `integrations/mesh-librefang`, `integrations/vault-dashboards`, `integrations/vault-storage`, `integrations/victoria-dashboards`, `integrations/victoria-whoami`, `policies/acme`, `policies/base`, `policies/identity`, `policies/vaults`, `services/forgejo`, `services/librefang`, `services/matrix`, `services/perses`, `services/syncthing`. `tests/aspects/fixtures/warning-budget.json` pins this at `{"residual": 18}`. A budget is a ratchet only if something lowers it; nothing has. The five servers resolve to six aspects each. Their real configuration lives in the residual set and in their host file. `aspects-isolation` guards exactly one aspect on exactly one host (`services/victoria` on bifrost) — a proof of concept, not a fleet property, and it cannot become one while 18 modules bypass selection by construction. ## Decision needed Either: - **annotate** — name the date `residual` must reach 0, and work the list down, lowering the budget with each module; or - **retire the framing** — state that broad injection is the design, drop the `residual` diagnostic and the migration language in `modules/hosts.nix` and `modules/aspects/compat.nix`. The current middle state pays for the registry and does not get its guarantee. ## Acceptance - One of the two paths chosen and recorded here. - If annotate: a per-module disposition (record or delete), and `warning-budget.json` lower than 18. - If retire: the `residual` diagnostic and the removal-condition comments are gone, and `aspects-isolation`'s scope is stated honestly. ## Provenance Split from #9 (FM-ASPECT-AUDIT). Audit run 2026-08-04 by agent.odin against commit `fc3b751`, with `modules/implementations/{forgejo-agents,hermes}.nix` and `outputs/hosts/odin/{configuration.nix,secrets.agents.yaml}` dirty in the working copy.
Commenting is not possible because the repository is archived.
No description provided.