Parameterise implementations/hermes or rename it to an odin-only assembly #12
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#12
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-04
Source:
modules/implementations/hermes.nixSource status: new finding, not previously tracked
Disposition: open architecture work
Epic: #9
Blocked by: nothing
Problem
A fleet-level implementation record reaches into one host's directory:
These are
letbindings, not options. Any second host selectingcontracts/agent-runtimedecrypts odin's secrets file.hermesState = "/data/odin"is hardcoded the same way;userandlinkUsersdefault tolarandar.implementations/forgejo-agentshas the same coupling but at leastmade it an option (
sopsFile).The record's header argues it bundles five things — Hermes, Modron, Firecrawl,
ByteRover, Ollama — "because they are only correct together", and that
splitting them would push coupling into the host root. 794 lines, one enable
flag.
Its own history refutes it. opencode became the sixth limb and did not go into
this record: it went into
outputs/hosts/odin/configuration.nix:194as a rawsystemd unit. When the next thing to add goes in the host file rather than the
record, the record is not the right home. See FM-AUDIT-07.
Acceptance
Either:
sopsFile-style options for both secrets files and the state root, with odinsupplying the values from its host file; or
contracts/agent-runtime, and the contract left with no provider until aportable one exists.
Plus: a decision on whether Firecrawl / ByteRover / Ollama / Modron stay in one
record, recorded here either way.
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, taking the parameterise half of the either/or.stateDir,agentsSecretsFileandadHocSecretsFileare now mandatory options — no defaults, so a second host selectingcontracts/agent-runtimemust name its own — and odin supplies all three from its host file. The record keeps its name. Behavior-preserving: odin'ssystem.build.topleveldrvPath is identical to the live default tree.just checkpasses. Offered ontango/ticket-sweep.Verified delivered to main by PR #23 — ticket commit
2af29c8refactor(hermes): host-owned state root and secrets files (FM-AUDIT-04, #12).The ticket's fork — parameterise or rename to an odin-only assembly — resolved as parameterise.
modules/implementations/hermes.nix(+41/-6) turns thelet-boundagentsSecrets/adHocSecrets/hermesStateinto host-owned options;outputs/hosts/odin/configuration.nix(+10) now passes odin's ownsecrets.agents.yaml,secrets.ad-hoc.yamland state root. The record no longer reaches into../../outputs/hosts/odin/, so a second host selectingcontracts/agent-runtimeno longer decrypts odin's secrets.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:
2af29c8 refactor(hermes): host-owned state root and secrets files (FM-AUDIT-04, #12)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.