From eac2f52bcd9ff1e7d10c2365e316c80a7b340e7a Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Wed, 29 Jul 2026 08:23:39 +0100 Subject: [PATCH] docs(policy): retiring a flake means its references too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §2.1 already ruled Nix retired and rightly warns against mass-deletion (campaign #102 hand-diffed 277 candidates and removed exactly one; fan-out REMOVE has a ~100% over-call rate here). The owner ruling of 2026-07-28 — "nix flakes are deprecated and to be thrown from the estate" — is reconciled with that warning rather than overriding it: removal stays a per-repo judgement made while you are ALREADY in the repo. Opportunistic, never a sweep. What was genuinely missing is that deleting flake.nix does not retire Nix. Measured on trope-checker (PR #47), one flake had TEN satellites — .envrc's `use flake`, a `nix-shell` recipe in BOTH Justfiles, nix in setup.sh's package-manager detection AND its install switch, a flake-detecting branch in install-tools.sh that ran ahead of Guix, dependabot's `nix` ecosystem, .gitignore/.gitattributes rules, dep5's lockfile glob, and PLAYBOOK prose. Leave any behind and the toolchain still reaches for Nix. They are now listed. Two traps recorded because both cost time: - dependabot.yml rejects the WHOLE file on one malformed entry, so re-parse after removing the nix ecosystem. - a root .githooks/ is usually LOAD-BEARING (CI runs validators straight from it) — allowlist it, do not "tidy" it away while passing through. And the standing caveat: a repo whose guix.scm is a scaffold stub has no working packaging once the flake is gone. Make Guix real, or fill the sealed container, in the SAME change — do not allowlist the flake instead. Note for whoever reconciles the canon: this repo carries TWO LANGUAGE-POLICY.adoc files and they disagree. This one (root) self-declares canonical and is the more current — its §2.2 records the squisher-corpus identity clobber measured 2026-07-29 across 418 repos. The other, rhodium-standard-repositories/spec/LANGUAGE-POLICY.adoc, still lists Deno as "replaces Node/npm/Bun" while §1 here makes Bun tier 1. That contradiction is NOT resolved here — flagged only. Renders clean under asciidoctor. --- LANGUAGE-POLICY.adoc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/LANGUAGE-POLICY.adoc b/LANGUAGE-POLICY.adoc index 0ad1b36e..8b4de0b9 100644 --- a/LANGUAGE-POLICY.adoc +++ b/LANGUAGE-POLICY.adoc @@ -77,6 +77,35 @@ WARNING: Do *not* mass-delete `flake.nix`. Campaign #102 hand-diffed 277 candidates and removed exactly *one*. Fan-out REMOVE verdicts have a measured ~100% over-call rate here. Removal is a per-repo judgement, not a sweep. +HARDENED 2026-07-28 (owner ruling): Nix flakes are to be *thrown out* of the +estate, not merely tolerated where they linger. Reconcile that with the warning +above as follows: removal remains a **per-repo judgement made while you are +already working in that repo** — opportunistic, never a fan-out sweep. + +When you do retire a flake, remove the *references* as well as the file. +Measured on `trope-checker` (PR #47), one `flake.nix` had ten satellites, and +leaving any of them behind keeps Nix alive in the toolchain: + +* `.envrc` — a direnv `use flake` block +* `Justfile` (and `.machine_readable/contractiles/Justfile`) — a `nix-shell` recipe +* `build/setup.sh` — `nix` in package-manager detection and the install switch +* `install-tools.sh` — a `flake.nix`-detecting branch, often ahead of Guix +* `.github/dependabot.yml` — a `nix` `package-ecosystem` entry +* `.gitignore` / `.gitattributes` — `flake.lock` and `*.nix` rules +* `compliance/reuse/dep5` — `flake.lock` in the lockfile glob +* docs and `PLAYBOOK.a2ml` prose + +CAUTION: `dependabot.yml` rejects the *whole file* on one malformed entry — +re-parse it after removing the `nix` ecosystem. And do not "tidy" a root +`.githooks/` away while you are there: it is usually load-bearing (CI runs +validators directly from it); allowlist it in `root-allow.txt` instead. + +Retiring the mirror does not finish the job. A repo whose `guix.scm` is a +scaffold stub — empty `inputs`, `TODO` markers, or a `{{PROJECT_NAME}}` +placeholder — has *no working packaging* once the flake is gone. Make the Guix +side real, or fill the sealed container, *in the same change*. Do not allowlist +the flake instead. + === 2.2 Identity and licence in `guix.scm` A `guix.scm` must name *its own project*. Measured 2026-07-29 across 418 repos: