Skip to content

policy: Guix primary + sealed-container escape; retire Nix-mirror-everywhere#101

Merged
hyperpolymath merged 1 commit into
mainfrom
policy/guix-primary-no-nix-mirror
May 18, 2026
Merged

policy: Guix primary + sealed-container escape; retire Nix-mirror-everywhere#101
hyperpolymath merged 1 commit into
mainfrom
policy/guix-primary-no-nix-mirror

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

What

Canonicalises the estate ruling of 2026-05-18 and supersedes the prior standing
rule "Nix shard fallback on Guix channel primary everywhere".

  • spec/LANGUAGE-POLICY.adoc §Package Management — the canonical statement.
    Guix primary; sealed container (not a Nix mirror) is the single universal
    escape hatch for the not-in-Guix / non-free tail; one packager per repo; a
    second packager only as the sole source of a specific named dependency.
  • .machine_readable/agent_instructions/debt.a2ml — estate-wide
    flake.nix-mirror removal + consumer-doc reconciliation logged as a SHOULD
    debt item.

Why

A flake.nix that only mirrors the Guix manifest is two incomplete manifests
hand-synced plus containers anyway = pure drift surface, never exercised as a
real fallback. Guix's full-source bootstrap + guix time-machine is
provenance-thesis-aligned; the non-free / not-in-Guix tail (which Guix's FSDG
structurally excludes) goes to the already-mandated sealed container, not a Nix
twin.

Pilot already landed

hyperpolymath/echidna PR #73 applied this: flake.nix/flake.lock removed,
9 Tier-3 prover Containerfiles consolidated into one sealed multi-target
Containerfile.wave3, manifest/CLAUDE/Justfile/STATE reconciled.

Scope

Surgical: only the canonical §Package Management statement + the debt record.
The broad consumer-repo sweep (other docs that still say "Fallback: Nix") is
deliberately deferred to the tracked debt item, per centralised-standards
(link-don't-copy) — not swept here.

🤖 Generated with Claude Code

…rywhere

RULED 2026-05-18 (estate-wide). Supersedes the prior standing rule
"Nix shard fallback on Guix channel primary everywhere".

- spec/LANGUAGE-POLICY.adoc §Package Management: canonical statement updated.
  One packager per repo; sealed container (not a Nix mirror) is the single
  universal escape hatch for the not-in-Guix / non-free tail; a second
  packager only as the sole source of a specific named dependency.
- debt.a2ml: estate-wide flake.nix-mirror removal + consumer-doc reconciliation
  recorded as a SHOULD debt item (echidna PR #73 is the landed pilot).

Rationale: a Nix file that only mirrors the Guix manifest is two incomplete
manifests kept in sync by hand plus containers anyway = pure drift surface,
never exercised as a real fallback. Fewer moving parts; thesis-aligned with
Guix full-source bootstrap + time-machine provenance.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hyperpolymath hyperpolymath merged commit 1a0800c into main May 18, 2026
16 checks passed
@hyperpolymath hyperpolymath deleted the policy/guix-primary-no-nix-mirror branch May 18, 2026 03:57
hyperpolymath added a commit that referenced this pull request May 18, 2026
Closes the actionable of #103 (Wave 0 of campaign #102; policy #101).

Read-only discovery over all **379** hyperpolymath repos (top-level
`HEAD`), committed as the durable worklist
`rhodium-standard-repositories/spec/nix-retirement-inventory.adoc`:

| Class | Count |
|---|---|
| Candidate (→ 14 waves) | 277 |
| Monorepo → handle at source | 8 |
| Excluded (standards, echidna #73) | 2 |
| Out-of-scope (no flake / no Guix) | 92 |

Verdicts are **provisional** — final keep/remove is per-repo at wave
time (`flake` inputs vs `Guix ∪ sealed-container`). The
`.guix-channel`-only and flake-without-Guix traps were checked and are
**empty**; the earlier triage's "my-lang = channel-only" was inaccurate
(my-lang has no flake.nix → out-of-scope). The `Wave` column is
authoritative for slicing the wave sub-issues.

Gate rules are **not duplicated** here — the artifact links to #102 /
`LANGUAGE-POLICY.adoc`.

Refs #103
Refs #101

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

🔍 Hypatia Security Scan

Findings: 100 issues detected

Severity Count
🔴 Critical 62
🟠 High 28
🟡 Medium 10

⚠️ Action Required: Critical security issues found!

View findings
[
  {
    "reason": "Issue in quality.yml",
    "type": "missing_workflow",
    "file": "quality.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Issue in security-policy.yml",
    "type": "missing_workflow",
    "file": "security-policy.yml",
    "action": "create",
    "rule_module": "workflow_audit",
    "severity": "medium"
  },
  {
    "reason": "Action hyperpolymath/standards/.github/workflows/governance-reusable.yml@main needs attention",
    "type": "unpinned_action",
    "file": "governance-reusable.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "Action hyperpolymath/standards/.github/workflows/governance-reusable.yml@main needs attention",
    "type": "unpinned_action",
    "file": "governance.yml",
    "action": "pin_sha",
    "rule_module": "workflow_audit",
    "severity": "high"
  },
  {
    "reason": "TypeScript file detected -- banned language",
    "type": "banned_language_file",
    "file": "/home/runner/work/standards/standards/a2ml/bindings/deno/mod.ts",
    "action": "flag",
    "rule_module": "cicd_rules",
    "severity": "critical"
  },
  {
    "reason": "TypeScript file detected -- banned language",
    "type": "banned_language_file",
    "file": "/home/runner/work/standards/standards/lol/test/vitest.config.ts",
    "action": "flag",
    "rule_module": "cicd_rules",
    "severity": "critical"
  },
  {
    "reason": "TypeScript file detected -- banned language",
    "type": "banned_language_file",
    "file": "/home/runner/work/standards/standards/k9-svc/bindings/deno/mod.ts",
    "action": "flag",
    "rule_module": "cicd_rules",
    "severity": "critical"
  },
  {
    "reason": "believe_me undermines formal verification (1 occurrences, CWE-704)",
    "type": "believe_me",
    "file": "/home/runner/work/standards/standards/lol/src/abi/Locale.idr",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "critical"
  },
  {
    "reason": "Wildcard CORS -- restrict to specific origins or use env var (1 occurrences, CWE-942)",
    "type": "js_wildcard_cors",
    "file": "/home/runner/work/standards/standards/consent-aware-http/examples/reference-implementations/deno/aibdp_middleware.js",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  },
  {
    "reason": "innerHTML assignment -- XSS risk, use textContent or SafeDOM (1 occurrences, CWE-79)",
    "type": "js_innerhtml",
    "file": "/home/runner/work/standards/standards/axel-protocol/src/Tea.res.js",
    "action": "flag",
    "rule_module": "code_safety",
    "severity": "high"
  }
]

Powered by Hypatia Neurosymbolic CI/CD Intelligence

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant