Handoff: migrate the private credential registry to value templates #25
Labels
No labels
blocked
bug
decision
duplicate
enhancement
handoff
help wanted
invalid
landed?
question
ready-to-merge
stale
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/secrets#25
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?
Handoff for the deployment's private agent: move the private credential registry from
formatplus structuredverify.typeentries to the value-template contract of allod/secrets#23, so the private validator,allod secret, and the archetypes checks all read one declared shape. The work and its receipts live in the private forks; this public issue is the instruction channel.Primary goals:
lib.credentialEncodings, and its validator accepts the same wholly-legacy-or-wholly-new credential union as the publiccredential-registrycheck, with a positive fixture and one sabotage witness per validator, before any registry entry changes.credential-store-url,rclone-remote-stanza) goes throughallod secret migrate <name>on the host; each plain legacy entry (raw,raw-forgejo-token) becomes new-shape through a reviewed registry edit that dropsformatand converts everyverifyobject to its command string. No ciphertext changes either way.local_auth_refreshstays legacy until allod/nexus#52 supplies a new-shape refresh path or retires that dependency;migraterefuses it androtate-tokenkeeps rotating it.verifystring, exactly the inner commandrotate-tokenprinted for that probe type. Template bytes are preserved, trailing newline included.Trigger
Start when all three public PRs of allod/secrets#23 (archetypes compatibility, secrets contract, tools commands) have merged and the deployment's
allod-toolspin carries the new commands:allod secret --helpon the host listsmigrateandrotate. Before that, the private registry stays as it is.Required sequence
lib.credentialEncodingsfrom the private secrets flake so the private validator and the commands read one encoder list.formatand a structuredverify.typeobject on every target) or wholly new (optionalvaluewith exactly one{secret}invalue.template, optionalvalue.encodefrom the exported list, and a non-empty one-lineverifystring on every target), never a mixture on one credential; credentials in one group share one encoding. Add the positive fixture and sabotage witnesses. Land this before any entry migrates.formatis gone.allod secret migrate <name>on the host, one reviewed branch per run.migratedecrypts only in memory, accepts only the canonical container bytes, proves the extracted field renders back to the original plaintext byte-for-byte, and rewrites only the registry entry. For an rclone container the migrated declaration carriesencode: "rclone-obscure"and the stored secret is the currently deployed obscured password; the nextallod secret rotatetakes a raw password and obscures it.format, turn each target'sverifyobject into the command stringrotate-tokenprinted for it, and drop any target-level metadata field the string now carries. Review the diff like any other registry change.verifycommand for a credential that is consumed only when a machine later joins as deployment health, not as proof that the standby value was exercised.Validation and human gate
After each registry change run the private secrets checks and the composed-deployment checks, then stop with the branch and the check output ready for review. Do not deploy, rotate a live value, revoke an old value, or run a verification command against a machine as part of this issue; those remain the owner's acts.
Scope
In scope: the private re-export, validator union and witnesses, group normalization, container migration through
allod secret migrate, plain-entry registry edits, verification-command conversion, and private validation. Out of scope: the public implementation for allod/secrets#23, retiringrotate-tokenand movinglocal_auth_refreshoff the legacy shape (allod/nexus#52), renaming the registry (allod/secrets#22), removing legacy acceptance from the public and private validators (its own follow-up issue), and any live deployment or revocation.Handoff complete on the private side. The private secrets flake re-exports
lib.credentialEncodings, its validator accepts the wholly-legacy-or-wholly-new union with a positive fixture and one sabotage witness, the group that depended on the stanza format isservice: none, the two container credentials went throughallod secret migrateon the host and the plain entries through reviewed edits. Every entry is new-shape except thelocal_auth_refreshsource, which stays legacy until allod/nexus#52. Private checks and the composed deployment checks are green; nothing was deployed, rotated, or revoked. The follow-up for removing legacy acceptance is filed separately.