You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tracked dedicated channel for the consumer-repo side of the Guix-primary ruling. Refs #101 (policy MERGED; LANGUAGE-POLICY.adoc §Package Management + debt.a2ml SHOULD item). This issue is the parent tracker; do not close #101 against it.
Why this is a campaign, not a sweep
Background-agent triage (2026-05-18) established:
Scale: ~330 estate repos scanned; ~270 have BOTH a top-level flake.nix and a Guix-manifest match. Plus monorepos (developer-ecosystem, repos-monorepo, affinescript, reposystem, ambientops, gitbot-fleet, julia-ecosystem, polystack, panll, social-media-tools) carrying nested flakes.
Background sub-agents cannot bulk-execute this: a hard sandbox layer (not the permission prompt) denies Write /tmp, output redirection, and $(...)/piped compounds. Per-repo clone→edit→commit→PR must run supervised.
Matches the user-endorsed triage-over-partial-hack rule: judgement-gated, too big for one safe automated pass.
The gate (apply per repo, never mechanically)
The real test is flake vs (Guix ∪ sealed-container), not flake-vs-Guix:
In scope only if the repo has BOTH a Guix manifest (guix.scm/manifest.scm) AND a flake.nix.
Pure mirror = every dep flake.nix provides is in the Guix manifest or provisioned by the repo's sealed container → remove flake.nix+flake.lock, reconcile docs (link policy, never copy).
.guix-channel-only (no guix.scm/manifest.scm, e.g. my-lang): a channel pin is not a package manifest → 'pure mirror' undefined → KEEP + flag, never delete.
Monorepo nested flakes: usually vendored copies → fix at the source repo, not the aggregator.
Unsure → KEEP + flag. Never delete on uncertainty.
Execution model
Hand-verified waves of ~20 single-package repos, each a child issue of this tracker (native sub-issues).
One PR per repo: fix(pkg): retire Nix-mirror per Guix-primary ruling (standards#101); body uses Refs, never Closes; squash; --squash --auto; never --admin. Use the repo's configured git identity; never a gmail address.
Do not duplicate policy text into consumer repos — link back to standards.
Wave 0 (next actionable)
The triage inventory lived only in the sub-agent transcript. Wave 0 = regenerate the canonical per-repo repo | flake-paths | guix-paths | sealed-container? inventory as a durable committed worklist artifact, then slice waves 1..N from it.
Tracked dedicated channel for the consumer-repo side of the Guix-primary ruling. Refs #101 (policy MERGED;
LANGUAGE-POLICY.adoc §Package Management+debt.a2mlSHOULD item). This issue is the parent tracker; do not close #101 against it.Why this is a campaign, not a sweep
Background-agent triage (2026-05-18) established:
flake.nixand a Guix-manifest match. Plus monorepos (developer-ecosystem,repos-monorepo,affinescript,reposystem,ambientops,gitbot-fleet,julia-ecosystem,polystack,panll,social-media-tools) carrying nested flakes./tmp, output redirection, and$(...)/piped compounds. Per-repo clone→edit→commit→PR must run supervised.The gate (apply per repo, never mechanically)
The real test is
flakevs(Guix ∪ sealed-container), not flake-vs-Guix:guix.scm/manifest.scm) AND aflake.nix.flake.nixprovides is in the Guix manifest or provisioned by the repo's sealed container → removeflake.nix+flake.lock, reconcile docs (link policy, never copy).flake.nixis the sole source of any named dep not in Guix/containers → KEEP; add a one-line top comment naming that dep. (The echidna chore: Item 9 — retire ReScript guidance → AffineScript #73 exemplar flake was itself load-bearing — lean4/dafny/cvc5 — deletable only because chore: Item 9 — retire ReScript guidance → AffineScript #73 simultaneously stood up the container escape.).guix-channel-only (noguix.scm/manifest.scm, e.g.my-lang): a channel pin is not a package manifest → 'pure mirror' undefined → KEEP + flag, never delete.Execution model
fix(pkg): retire Nix-mirror per Guix-primary ruling (standards#101); body usesRefs, neverCloses; squash;--squash --auto; never--admin. Use the repo's configured git identity; never a gmail address.hyperpolymath/standards(done),hyperpolymath/echidna(pilot chore: Item 9 — retire ReScript guidance → AffineScript #73).Wave 0 (next actionable)
The triage inventory lived only in the sub-agent transcript. Wave 0 = regenerate the canonical per-repo
repo | flake-paths | guix-paths | sealed-container?inventory as a durable committed worklist artifact, then slice waves 1..N from it.Refs #101