Move odin's ad-hoc host config into aspects #15
Labels
No labels
blocked
conflicted
curated
in-progress
in-review
needs-decision
No milestone
No project
No assignees
3 participants
Due date
No due date set.
Dependencies
No dependencies set
Reference
larandar/flaky-mesh#15
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Stable ID: FM-AUDIT-07
Source:
outputs/hosts/odin/configuration.nixSource status: new finding, not previously tracked
Disposition: open architecture work
Epic: #9
Blocked by: nothing
Problem
The file opens by defining what a host file is: "facts that are nobody else's
business … and option values for aspects the host record selected." Then,
roughly 130 of its 242 lines are neither.
:194-206— a fullsystemd.user.services.opencodeunit: package pulledstraight from
inputs.llm-agents, port 4999 hardcoded, andEnvironmentFile = /run/secrets/rendered/profile.omo.env— an undeclareddependency on
implementations/forgejo-agentsrendering theomopersona.apps/codingalready installsllmAgents.opencode; this is a secondreference to the same package from a different layer. See FM-AUDIT-04.
:211-216— rawservices.victoriametrics.prometheusConfig.scrape_configs. Skippingintegrations/victoria-scrapeis correct (it is tamiel's fleet edge); theanswer is a scrape-self aspect, not raw upstream options in a host file.
:222-237—mesh.services.perseswith two datasources. The commentconcedes it: "Perses is residual (no catalog record yet), so the old enable
flag is the honest surface."
:59-149— 90 lines ofnetworking.networkmanager.ensureProfilesrestating mesh membership that
contracts/mesh-nodesalready holds: bothaddresses, the hub's public key, six allowed-ip ranges, both resolver
addresses. The comment says the addressing "MUST match the hub's peer entry"
— a second source of truth admitting it is one.
:32-33—services.resolved.enableandnetworking.networkmanager.dns, the client half ofintegrations/mesh-dns,by hand.
:23—time.timeZone, alreadymkDefault-ed inpolicies/base:25.Same duplicate at
outputs/hosts/fenrisulfr/configuration.nix:11.The NetworkManager profile has a real justification — rootless toggling, and
the wg0-adoption incident the comment records. That argues for a
NetworkManager provider for
policies/mesh, selected per host, not forhand-written config that has to be diffed against the registry by eye.
Acceptance
rather than hardcoding a rendered path.
scrape_configsin a host file.policies/mesh, derivingaddresses and peer data from
contracts/mesh-nodes.integrations/mesh-dns.time.timeZonelines gone.outputs/hosts/odin/configuration.nixcontains host facts and aspectparameter values only.
Provenance
Split from #9 (FM-ASPECT-AUDIT). Audit run 2026-08-04 by agent.odin against commit
fc3b751, withmodules/implementations/{forgejo-agents,hermes}.nixandoutputs/hosts/odin/{configuration.nix,secrets.agents.yaml}dirty in the working copy.Done in jj workspace
ticket-sweep. All six acceptance items: (1)policies/meshgains a NetworkManager driver rendering the same registry as one NM keyfile profile, with the measured MTU / dns-priority / stable-privacy rationale carried into the module; (2)integrations/mesh-dnsgainsmesh.dns.client(resolved + NM dns); (3)services/victoriagainsscrapeSelf; (4)apps/codinggainsopencodeServewith the persona as an option and the forgejo-agents dependency on aconfiguresedge; (5) both duplicatetime.timeZonelines gone; (6) odin's host file now holds facts and parameter values only (242 → 123 lines). Verification: odin's built toplevel against the live default tree differs by exactly one line — the NM profile'sallowed-ips, same six ranges in the registry's canonical order. fenrisulfr untouched by anything but #2's substituters.just checkpasses. Offered ontango/ticket-sweep.Verified delivered to main by PR #23 — ticket commit
7696d05refactor(odin): host file holds facts and parameters, not configuration (FM-AUDIT-07, #15).outputs/hosts/odin/configuration.nixdrops 201 of its ~242 lines back to facts and option values. Where they went:systemd.user.services.opencodeunit →modules/apps/coding.nix(+40), collapsing the ticket's "second reference to the same package from a different layer"services.victoriametrics.prometheusConfig→modules/services/victoria.nix(+19)modules/policies/mesh.nix(148 lines)modules/integrations/mesh-dns.nix(+24)outputs/hosts/fenrisulfr/configuration.nixalso loses a line to the same move.Verified against
forge/main@4cc8149. Close is blocked on authority — see #22.— tracker unwind, agent.teyla, 2026-08-05
Steward reconciliation — closing under law 13.
Delivered to
mainin PR #23 (merged 2026-08-04, merge commit4cc81493).Commit:
7696d05 refactor(odin): host file holds facts and parameters, not configuration (FM-AUDIT-07, #15)PR #23 named this ticket in prose rather than a
Closes #ntrailer, so the forge never auto-closed it. Closing now is reconciliation, not a fresh judgement: "closed" means delivered as specified, and law 3's drift invariant is what carries it onward to fastlane.