Move credential-store-url-parity to allod/tools, the repo that carries the copy #110
Labels
No labels
blocked
bug
decision
duplicate
enhancement
help wanted
invalid
landed?
question
ready-to-merge
stale
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/archetypes#110
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?
Move
credential-store-url-parityto the repository that carries the copy, so the check stops reading a data input by name and every fork inherits the fix for free.Primary goals:
cmd/allod/testdata/credential-store-url.json; its own check suite is where that file's freshness is asserted, not a third repository's.checks/credential-store-url-parity.nixis the remaining framework check that reads a literal filename out of thesecretsinput, the pattern allod/archetypes#88 exists to remove.secretsinput is its own data repo has no reason to carry a public vector table, and today it must or the check fails.Current state and specifics
checks/credential-store-url-parity.nix:8-12builds both sides by name:and
cmps them. The invariant is "allod/tools must carry a byte-for-byte copy of the allod/secrets definition" — a statement about two repositories, neither of which is this one. It is wired here (checks/default.nix:64-66) only because archetypes holds both as inputs.In the template composition
secretsis allod/secrets, so the second path resolves and the check means what it says. In a fork compositionsecretsis the deployment's own data repo, and the check silently changes subject: it now asserts that allod/tools matches the fork's table. A fork that carries no such file fails withcmp: .../credential-store-url.json: No such file or directory; a fork that carries a stale one passes while proving nothing.checks/fork-fixture/secrets/flake.nix:90-95documents the current answer — the fixture carries the table as "the one file here that is a copy rather than a rewrite" — which is why the fork-safety witness is green and did not catch this. That is the same by-assumption shape as allod/archetypes#108: the check does not index a data input by a literal name in the fixture's eyes, because the fixture was built to satisfy it.Fix shape: add allod/secrets as an input to allod/tools' dev flake and assert the parity in a check there. No cycle exists — allod/secrets pins only nixpkgs and allod/inventory. Nothing downstream pays for the new input: allod/tools' flake is development-only and every consumer imports the repository with
flake = false(flake.nix:5-8), and that repo already carries sibling checks of this kind (allod-parity). Then deletechecks/credential-store-url-parity.nixand itschecks/default.nixentry here, and drop the table fromchecks/fork-fixture/secrets/, which exists only to satisfy this check.The smaller alternative, if the check should stay in this repo: compare against a value the
secretsinput exports rather than a filename spelled here — an exported path keeps the comparison byte-for-byte, an exported attrset makes it structural. That closes the fork-safety hole in place but leaves archetypes refereeing an agreement between two other repositories, so it is the fallback, not the default.Scope
In scope: the allod/tools check, the deletion here, and the fork-fixture table that only this check reads.
Out of scope: the vector table's contents and the grammar predicates in allod/secrets, which no part of this touches. A deployment's own handling until this lands is that deployment's business; one is holding
credential-store-url-parityon its exclusion list with a pointer to this issue.Refs allod/archetypes#88, allod/archetypes#108