Archetypes/Profiles repo split #18

Closed
opened 2026-07-17 21:10:28 +01:00 by allod-agent · 1 comment
Member

So that every piece of configuration lives in the one repo meant to own it — and nothing operator-private can end up in the public framework — I want the framework repo, the example machine configs, and the secrets template split so that reusable behavior, machine definitions, and identity data each have exactly one owning repo.

Tracking issue for the Archetypes/Profiles repo split. Full plan: dev-plans/archetypes-profiles-split.md in this repo.

Summary

Rename the framework repo allod/profilesallod/archetypes (archetype merge, builders, shared modules, vmFacts, checks); move machine profile definitions into a dedicated public example repo allod/profiles with fresh history (redirectable by a deploy flake to an operator's own definitions repo); return the secrets template to identity-only exports; and adapt the public allod/deploy template to the split, with a generic composed-layer canary so a deploy flake fails loudly when its profiles redirect is lost.

Sequencing

The load-bearing constraint is the Forgejo rename redirect cliff: the old allod/profiles URL keeps serving the renamed repo until a new repo claims that name (at M1), which kills the redirect permanently. Order: M0 rename → G1 pre-cliff re-points + operator gate → M1 new repo → M2 seam flip → M3/M4 → M5 sweep. Transitional states are harmless by construction — nothing consumes the new repo until M2 locks it, and the secrets template exports dead attrs only between M2 and M4.

PRs and human operations

Human forge operations (human-only): M0 rename, M1 repo creation + settings, all PR merges. One operator confirmation gate (G1) before M1. Every PR carries Refs allod/strategy#<this issue>; the final sweep PR (M5c, allod/memory) carries Closes allod/strategy#<this issue>.

  • M0 (human): rename allod/profilesallod/archetypes on the forge; confirm redirect serves; do not create the replacement repo in the same session
  • G1a: allod/deploy — re-point profiles.url to allod/archetypes at same rev (URL-only; input name stays profiles until M3)
  • G1b: allod/inventory — framework checkout / cold-clone repo lists → allod/archetypes; regen vm-specs.json
  • G1c: allod/nexusDEPLOY_FLAKE defaults + /template/profiles sentinel + rotation lock-bump steps → allod/deploy checkout
  • G1 (operator gate): confirm no live consumer outside the public org still fetches through the allod/profiles redirect
  • M1 (human): create the empty allod/profiles repo — permanently ends the redirect; requires G1 complete
  • M1: populate allod/profiles example definitions repo (fresh history, agent PR)
  • M2: allod/archetypes seam flip — add profiles input, source definitions/profileData/preferences only from it, delete in-tree definitions and secrets/inventory reads, export profilesSource / composeProfileDefinitions / composedLayerCheck
  • M3: allod/deploy adaptation — rename framework input profilesarchetypes, add profiles definitions input + follows-redirects, add composed-layer canary + sabotage fixtures
  • M4: allod/secrets cleanup — remove lib.profileDefinitions, lib.profileData, homeModules.preferences, modules/preferences.nix
  • M5a: allod/inventory — add new definitions checkout, final registry cleanup, vm-specs.json regen
  • M5b: allod/nexus — remaining non-cliff prose/tests (only if needed)
  • M5c: allod/memory — topic-file updates; carries Closes

Risk

Residual risk R3 High overall — cross-repo interfaces and sequencing, a rename with an irreversible redirect cliff, and provisioning-adjacent pointer changes. Per-milestone risk and human-scrutiny notes are in the dev plan's Risk Assessment table.

So that every piece of configuration lives in the one repo meant to own it — and nothing operator-private can end up in the public framework — I want the framework repo, the example machine configs, and the secrets template split so that reusable behavior, machine definitions, and identity data each have exactly one owning repo. Tracking issue for the Archetypes/Profiles repo split. Full plan: `dev-plans/archetypes-profiles-split.md` in this repo. ## Summary Rename the framework repo `allod/profiles` → `allod/archetypes` (archetype merge, builders, shared modules, `vmFacts`, checks); move machine profile definitions into a dedicated public example repo `allod/profiles` with fresh history (redirectable by a deploy flake to an operator's own definitions repo); return the `secrets` template to identity-only exports; and adapt the public `allod/deploy` template to the split, with a generic composed-layer canary so a deploy flake fails loudly when its `profiles` redirect is lost. ## Sequencing The load-bearing constraint is the Forgejo rename redirect cliff: the old `allod/profiles` URL keeps serving the renamed repo until a new repo claims that name (at M1), which kills the redirect permanently. Order: M0 rename → G1 pre-cliff re-points + operator gate → M1 new repo → M2 seam flip → M3/M4 → M5 sweep. Transitional states are harmless by construction — nothing consumes the new repo until M2 locks it, and the secrets template exports dead attrs only between M2 and M4. ## PRs and human operations Human forge operations (human-only): M0 rename, M1 repo creation + settings, all PR merges. One operator confirmation gate (G1) before M1. Every PR carries `Refs allod/strategy#<this issue>`; the final sweep PR (M5c, `allod/memory`) carries `Closes allod/strategy#<this issue>`. - [ ] M0 (human): rename `allod/profiles` → `allod/archetypes` on the forge; confirm redirect serves; do not create the replacement repo in the same session - [ ] G1a: `allod/deploy` — re-point `profiles.url` to `allod/archetypes` at same rev (URL-only; input name stays `profiles` until M3) - [ ] G1b: `allod/inventory` — framework checkout / cold-clone repo lists → `allod/archetypes`; regen `vm-specs.json` - [ ] G1c: `allod/nexus` — `DEPLOY_FLAKE` defaults + `/template/profiles` sentinel + rotation lock-bump steps → `allod/deploy` checkout - [ ] G1 (operator gate): confirm no live consumer outside the public org still fetches through the `allod/profiles` redirect - [ ] M1 (human): create the empty `allod/profiles` repo — permanently ends the redirect; requires G1 complete - [ ] M1: populate `allod/profiles` example definitions repo (fresh history, agent PR) - [ ] M2: `allod/archetypes` seam flip — add `profiles` input, source definitions/`profileData`/preferences only from it, delete in-tree definitions and `secrets`/`inventory` reads, export `profilesSource` / `composeProfileDefinitions` / `composedLayerCheck` - [ ] M3: `allod/deploy` adaptation — rename framework input `profiles`→`archetypes`, add `profiles` definitions input + follows-redirects, add composed-layer canary + sabotage fixtures - [ ] M4: `allod/secrets` cleanup — remove `lib.profileDefinitions`, `lib.profileData`, `homeModules.preferences`, `modules/preferences.nix` - [ ] M5a: `allod/inventory` — add new definitions checkout, final registry cleanup, `vm-specs.json` regen - [ ] M5b: `allod/nexus` — remaining non-cliff prose/tests (only if needed) - [ ] M5c: `allod/memory` — topic-file updates; carries `Closes` ## Risk Residual risk R3 High overall — cross-repo interfaces and sequencing, a rename with an irreversible redirect cliff, and provisioning-adjacent pointer changes. Per-milestone risk and human-scrutiny notes are in the dev plan's Risk Assessment table.
Contributor

Closing as complete — every milestone landed: allod/archetypes carries the framework; allod/profiles is the fresh-history example definitions repo (hosts/dev/allod-dev); allod/deploy composes separate archetypes and profiles inputs; allod/secrets exports no profileDefinitions, profileData, or preferences — the identity-only charter is restored; the inventory registry lists allod/archetypes and allod/profiles as distinct checkouts; and the allod/memory topic-file sweep landed. The final sweep's cross-repo Closes did not fire, which is the only reason this stayed open. (Agent token cannot close an issue it did not author — operator: please close as completed.)

Closing as complete — every milestone landed: `allod/archetypes` carries the framework; `allod/profiles` is the fresh-history example definitions repo (`hosts/dev/allod-dev`); `allod/deploy` composes separate `archetypes` and `profiles` inputs; `allod/secrets` exports no `profileDefinitions`, `profileData`, or `preferences` — the identity-only charter is restored; the inventory registry lists `allod/archetypes` and `allod/profiles` as distinct checkouts; and the `allod/memory` topic-file sweep landed. The final sweep's cross-repo `Closes` did not fire, which is the only reason this stayed open. (Agent token cannot close an issue it did not author — operator: please close as completed.)
vnprc closed this issue 2026-07-31 01:06:20 +01:00
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
allod/strategy#18
No description provided.