Rename the rotation registry to rotation-registry.json and lib.rotationRegistry #31

Merged
vnprc merged 4 commits from agent/rotation-registry-rename into master 2026-09-19 22:41:20 +01:00
Member

The rotation registry is renamed to say what it holds: the file forgejo-token-groups.json becomes rotation-registry.json and the flake export lib.forgejoTokenGroups becomes lib.rotationRegistry. What changes for a running machine: nothing yet; the registry's contents, validation, and every value consumers read are byte-identical, and the old export name stays as a deprecated alias of the new one for one compatibility window. What stays identical: the registry shape, the checks, and every other export. What proves it: the credential-registry and credential-inventory checks pass and both export names evaluate to the same JSON. If it is wrong, revert; the only consumer that notices the file rename before the alias is allod secret declare, which opens the file by name and lands next.

Landing order, as recorded on the issue: this PR first; then allod/tools, allod/nexus, and allod/archetypes, each reading lib.rotationRegistry with no fallback; then the deploy lock cascade advancing secrets before archetypes; then a final secrets PR removing the alias, which closes the issue. A deployment's private fork of allod/secrets must merge this rename before the new nexus or tools reads its checkout. allod/secrets PR 30 is open on the same two files; whichever lands second rebases.

Refs allod/secrets#22

Risk

R3. A cross-repo interface in the secrets repository is renamed. Residual: a consumer bumped to this commit without moving to the new name keeps working through the alias, and a consumer moved to the new name against an older secrets checkout fails loudly by attribute name; neither touches secret material.

Validation

Run by the integrator on the reviewed commit:

  • nix build .#checks.x86_64-linux.credential-registry .#checks.x86_64-linux.credential-inventory --no-link -L: exit 0.
  • nix eval --json .#lib.rotationRegistry | sha256sum and the same for .#lib.forgejoTokenGroups: identical hashes.
  • grep -rn -i 'forgejo-token-groups\|forgejoTokenGroups' . outside .git: only the alias line in flake.nix and its README row.

Cold review: gpt-5.6-sol via codex exec, default effort, read-only sandbox, on commit efc72c37. Findings and disposition:

  • Major, the file rename is a flag day while the flake comment claims a compatibility window. Discarded as a defect, the decision is deliberate and recorded on the issue: the alias covers the export, which is what evaluation-time consumers read; the file name is opened only by allod secret declare, which lands right after this.
  • Minor, the checks table still said "Forgejo credential registry". Fixed in c3eaf54.
  • Claim not supported, the README said service is forgejo or none inside a paragraph about what the check rejects, but the validator never reads service. Fixed in c3eaf54: the sentence now describes the field and says the check does not validate it and allod secret refuses other values. Adding validation is out of scope for the issue.
  • No missed consumers.

The fix commit was re-validated with the same three commands.

The rotation registry is renamed to say what it holds: the file `forgejo-token-groups.json` becomes `rotation-registry.json` and the flake export `lib.forgejoTokenGroups` becomes `lib.rotationRegistry`. What changes for a running machine: nothing yet; the registry's contents, validation, and every value consumers read are byte-identical, and the old export name stays as a deprecated alias of the new one for one compatibility window. What stays identical: the registry shape, the checks, and every other export. What proves it: the `credential-registry` and `credential-inventory` checks pass and both export names evaluate to the same JSON. If it is wrong, revert; the only consumer that notices the file rename before the alias is `allod secret declare`, which opens the file by name and lands next. Landing order, as recorded on the issue: this PR first; then allod/tools, allod/nexus, and allod/archetypes, each reading `lib.rotationRegistry` with no fallback; then the deploy lock cascade advancing secrets before archetypes; then a final secrets PR removing the alias, which closes the issue. A deployment's private fork of allod/secrets must merge this rename before the new nexus or tools reads its checkout. allod/secrets PR 30 is open on the same two files; whichever lands second rebases. Refs allod/secrets#22 ## Risk R3. A cross-repo interface in the secrets repository is renamed. Residual: a consumer bumped to this commit without moving to the new name keeps working through the alias, and a consumer moved to the new name against an older secrets checkout fails loudly by attribute name; neither touches secret material. ## Validation Run by the integrator on the reviewed commit: - `nix build .#checks.x86_64-linux.credential-registry .#checks.x86_64-linux.credential-inventory --no-link -L`: exit 0. - `nix eval --json .#lib.rotationRegistry | sha256sum` and the same for `.#lib.forgejoTokenGroups`: identical hashes. - `grep -rn -i 'forgejo-token-groups\|forgejoTokenGroups' .` outside `.git`: only the alias line in `flake.nix` and its README row. Cold review: `gpt-5.6-sol` via `codex exec`, default effort, read-only sandbox, on commit efc72c37. Findings and disposition: - Major, the file rename is a flag day while the flake comment claims a compatibility window. Discarded as a defect, the decision is deliberate and recorded on the issue: the alias covers the export, which is what evaluation-time consumers read; the file name is opened only by `allod secret declare`, which lands right after this. - Minor, the checks table still said "Forgejo credential registry". Fixed in c3eaf54. - Claim not supported, the README said `service` is `forgejo` or `none` inside a paragraph about what the check rejects, but the validator never reads `service`. Fixed in c3eaf54: the sentence now describes the field and says the check does not validate it and `allod secret` refuses other values. Adding validation is out of scope for the issue. - No missed consumers. The fix commit was re-validated with the same three commands.
Export lib.rotationRegistry as the primary name and keep lib.forgejoTokenGroups
as a deprecated alias for one compatibility window while archetypes, nexus,
and tools move over. README updated to describe a credential rotation
registry instead of a Forgejo-only deployment map.

Refs allod/secrets#22
Refs allod/secrets#22
Author
Member

Master moved under this branch when allod/secrets PR 30 landed, and both PRs edit the export block of flake.nix and the README tables, so the branch now carries a merge of master (0f92a38) plus one follow-up (cc705d4). The follow-up exists because the merge left two validations of the same file: PR 30 had introduced its own forgejoTokenGroups let binding, and our rotationRegistry binding sat beside it. There is now one binding, rotationRegistry, feeding lib.rotationRegistry, the deprecated lib.forgejoTokenGroups alias, lib.localAuthRefreshSources, and the local-auth-refresh check.

Validation on cc705d4, run by the integrator: credential-registry, credential-inventory, and local-auth-refresh checks build (exit 0); lib.rotationRegistry and lib.forgejoTokenGroups hash identically and unchanged from the reviewed commit; lib.credentialStoreUrl and lib.localAuthRefreshSources evaluate.

Master moved under this branch when allod/secrets PR 30 landed, and both PRs edit the export block of `flake.nix` and the README tables, so the branch now carries a merge of master (0f92a38) plus one follow-up (cc705d4). The follow-up exists because the merge left two validations of the same file: PR 30 had introduced its own `forgejoTokenGroups` let binding, and our `rotationRegistry` binding sat beside it. There is now one binding, `rotationRegistry`, feeding `lib.rotationRegistry`, the deprecated `lib.forgejoTokenGroups` alias, `lib.localAuthRefreshSources`, and the `local-auth-refresh` check. Validation on cc705d4, run by the integrator: `credential-registry`, `credential-inventory`, and `local-auth-refresh` checks build (exit 0); `lib.rotationRegistry` and `lib.forgejoTokenGroups` hash identically and unchanged from the reviewed commit; `lib.credentialStoreUrl` and `lib.localAuthRefreshSources` evaluate.
vnprc approved these changes 2026-09-19 22:41:15 +01:00
vnprc merged commit cc705d4e64 into master 2026-09-19 22:41:20 +01:00
vnprc deleted branch agent/rotation-registry-rename 2026-09-19 22:41:21 +01:00
Sign in to join this conversation.
No reviewers
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/secrets!31
No description provided.