Skip to content

Commit a6f567f

Browse files
docs(policy): retiring a flake means its references too (#566)
§2.1 already rules Nix retired and rightly warns against mass-deletion. 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 working in the repo*. Opportunistic, never a fan-out sweep. ## What was genuinely missing **Deleting `flake.nix` does not retire Nix.** Measured on `trope-checker` ([#47](hyperpolymath/trope-checker#47)), one flake had **ten satellites**: | file | what it kept alive | |---|---| | `.envrc` | a direnv `use flake` block | | `Justfile` + `contractiles/Justfile` | a `nix-shell` recipe | | `build/setup.sh` | `nix` in package-manager detection **and** the install switch | | `install-tools.sh` | a flake-detecting branch running **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 / `PLAYBOOK.a2ml` | prose | Leave any behind and the toolchain still reaches for Nix. They're now listed in §2.1. ## Two traps recorded, because both cost time - **`dependabot.yml` rejects the whole file on one malformed entry** — re-parse after removing the `nix` ecosystem. - **A root `.githooks/` is usually load-bearing** (CI runs validators straight from it) — allowlist it in `root-allow.txt`; don't "tidy" it away in passing. Plus the standing caveat, restated where it will be read: 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*. ## Flagged, not resolved — the canon disagrees with itself This repo carries **two** `LANGUAGE-POLICY.adoc` files and they contradict each other: - **`./LANGUAGE-POLICY.adoc`** (this one) self-declares canonical, is the more current — §2.2 records the squisher-corpus identity clobber measured 2026-07-29 across 418 repos — and makes **Bun tier 1**. - **`./rhodium-standard-repositories/spec/LANGUAGE-POLICY.adoc`** still lists **Deno** as *"Replaces Node/npm/Bun"*. PR #51 on trope-checker cites the first; the estate `CLAUDE.md` I was working under states the second. **I have not resolved this** — it needs an owner decision on which file is authoritative. Note the Nix hardening was also added to the *other* file earlier (standards #557), so both now carry it; the runtime-tier contradiction is untouched. Renders clean under `asciidoctor`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1 parent 56c2e5c commit a6f567f

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

LANGUAGE-POLICY.adoc

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,35 @@ WARNING: Do *not* mass-delete `flake.nix`. Campaign #102 hand-diffed 277
7777
candidates and removed exactly *one*. Fan-out REMOVE verdicts have a measured
7878
~100% over-call rate here. Removal is a per-repo judgement, not a sweep.
7979

80+
HARDENED 2026-07-28 (owner ruling): Nix flakes are to be *thrown out* of the
81+
estate, not merely tolerated where they linger. Reconcile that with the warning
82+
above as follows: removal remains a **per-repo judgement made while you are
83+
already working in that repo** — opportunistic, never a fan-out sweep.
84+
85+
When you do retire a flake, remove the *references* as well as the file.
86+
Measured on `trope-checker` (PR #47), one `flake.nix` had ten satellites, and
87+
leaving any of them behind keeps Nix alive in the toolchain:
88+
89+
* `.envrc` — a direnv `use flake` block
90+
* `Justfile` (and `.machine_readable/contractiles/Justfile`) — a `nix-shell` recipe
91+
* `build/setup.sh` — `nix` in package-manager detection and the install switch
92+
* `install-tools.sh` — a `flake.nix`-detecting branch, often ahead of Guix
93+
* `.github/dependabot.yml` — a `nix` `package-ecosystem` entry
94+
* `.gitignore` / `.gitattributes` — `flake.lock` and `*.nix` rules
95+
* `compliance/reuse/dep5` — `flake.lock` in the lockfile glob
96+
* docs and `PLAYBOOK.a2ml` prose
97+
98+
CAUTION: `dependabot.yml` rejects the *whole file* on one malformed entry —
99+
re-parse it after removing the `nix` ecosystem. And do not "tidy" a root
100+
`.githooks/` away while you are there: it is usually load-bearing (CI runs
101+
validators directly from it); allowlist it in `root-allow.txt` instead.
102+
103+
Retiring the mirror does not finish the job. A repo whose `guix.scm` is a
104+
scaffold stub — empty `inputs`, `TODO` markers, or a `{{PROJECT_NAME}}`
105+
placeholder — has *no working packaging* once the flake is gone. Make the Guix
106+
side real, or fill the sealed container, *in the same change*. Do not allowlist
107+
the flake instead.
108+
80109
=== 2.2 Identity and licence in `guix.scm`
81110

82111
A `guix.scm` must name *its own project*. Measured 2026-07-29 across 418 repos:

0 commit comments

Comments
 (0)