credential-registry: accept the value-template shape only #28
No reviewers
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!28
Loading…
Reference in a new issue
No description provided.
Delete branch "agent/credential-registry-new-shape"
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?
Summary
The
credential-registrycheck now accepts one credential shape only: an optionalvaluetemplate plus a stringverifycommand on every target. An entry carrying the retiredformatfield is refused by name, and a target whoseverifyis not a string is refused with its own message; the coexistence fixtures that kept the old shape alive (legacy-*,migrating,legacy-new-mix,legacy-format,legacy-verify) are gone and two sabotage fixtures pin the new refusals. Nothing deployed changes: the public registry in this repo carries noformatentry (verified withjqbefore editing), so the check's positive path evaluates exactly as before, and the ciphertext, groups, andlocal_auth_refreshmetadata are untouched. The check rebuilt clean with 19 sabotage fixtures passing, andnix flake checkis green. If it is wrong, revert the two commits; the check goes back to accepting both shapes.Refs allod/secrets#27. The tools slice of that issue (removing
allod secret migrateand the legacy refusals) is a separate allod/tools PR, and the archetypes predicate is allod/archetypes#77; the issue closes on the tools PR, last in the chain.Change
flake.nix:isLegacyVerify,hasFormat,legacyDiagnostics, and the mixed-shape diagnostic are removed; each target'sverifyis classified once (missing, non-string, or not a one-line command) so a credential with several bad targets surfaces each kind; a credential carryingformatgets one diagnostic naming it, with a placeholder when itscredentialfield is not a string, so a malformed entry cannot make the validator itself throw.coexistencegroup becomestokens(new shape only); every sabotage that used the legacy credential as its valid neighbour now uses the new-shape one;format-field,format-field-non-string-name, andnon-string-verifypin the refusals.README.md: the coexistence paragraph is replaced with the one accepted shape and its two refusals.Risk
R2. A validator narrowing inside a check with one sabotage witness per rule; no module, secret, or deployed output changes; rollback is a straight revert.
Validation
jq '[.[] | .credentials[]? | select(has("format"))] | length' forgejo-token-groups.jsonprinted 0.nix build --rebuild -L .#checks.x86_64-linux.credential-registry:credential registry validation and 19 sabotage fixtures passed.nix flake check: all checks passed. Cold cross-family review by gpt-5.5 (codex, read-only sandbox) on the first commit found one defect, thetoStringon a non-string credential name aborting evaluation; the second commit fixes it and adds the fixture that pins it.