Decide and fix server substituter policy #2
Labels
No labels
blocked
conflicted
curated
in-progress
in-review
needs-decision
No milestone
No project
No assignees
3 participants
Due date
No due date set.
Dependencies
No dependencies set
Reference
larandar/flaky-mesh#2
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?
Stable ID: FM-SERVER-SUBSTITUTERS
Source:
plans/backlog.md#Servers cannot substitute from nix-community.cachix.orgSource status: tracked backlog
Disposition: open operational work
Blocked by: none
Problem
Every server currently resolves only
https://cache.nixos.org/. Deploys therefore push closures that are already available fromnix-community.cachix.orgover the operator's slow uplink. Enablingpolicies/nix-tuningwholesale would also import ThinkPad-oriented job, core, trusted-user, and package settings.Acceptance
modules/policies/nix-tuning.nixsetting by setting.just checkinside the repository devshell.Evidence
Measured during the 2026-08-03 Forgejo/Matrix deployment:
sops-install-secrets(86.8 MB) was pushed over a 591 kbit/s operator uplink even though its exact store path existed innix-community.cachix.org.Done in jj workspace
ticket-sweep. Decision: split. New machine-independent recordpolicies/nix-substituterscarries the three caches and keys; every server selects it throughcommon, andnix-tuningpulls it withrequiresinstead of restating it. A newnix-substituterscheck proves the policy: any host with no interactive user must resolve the full cache set, named per host on failure. Verified: bifrost substitutes from all three caches withcores/max-jobs/trusted-usersat NixOS defaults (no ThinkPad policy leaked); odin's toplevel drvPath is bit-identical to the live default tree.just checkpasses. Offered ontango/ticket-sweep.Verified delivered to main by PR #23 — ticket commit
6ce5cdafeat(policies): split cache policy out of nix-tuning for servers (FM-SERVER-SUBSTITUTERS, #2).Acceptance, bullet by bullet:
modules/policies/nix-substituters.nix(65 lines);modules/policies/nix-tuning.nixloses 25 lines, so servers no longer import ThinkPad job/core/trusted-user policy.checks.nix-substituters: every host with no interactive user must carry the substituter, and a missing entry fails the check naming the host and the substituter it lacks. This was the acceptance bullet most at risk of being skipped; it was not.modules/aspects/hosts.nixand the shadow fixture updated for the changed closure.Verified against
forge/main@4cc8149. Close is blocked on authority — see #22.— tracker unwind, agent.teyla, 2026-08-05
Steward reconciliation — closing under law 13.
Delivered to
mainin PR #23 (merged 2026-08-04, merge commit4cc81493).Commit:
6ce5cda feat(policies): split cache policy out of nix-tuning for servers (FM-SERVER-SUBSTITUTERS, #2)PR #23 named this ticket in prose rather than a
Closes #ntrailer, so the forge never auto-closed it. Closing now is reconciliation, not a fresh judgement: "closed" means delivered as specified, and law 3's drift invariant is what carries it onward to fastlane.