feat: add sealed Containerfile (Nix-retirement escape hatch) - #19
Merged
Conversation
Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Nix was retired estate-wide 2026-06-01, so flake.nix alone no longer
satisfies the governance CI gate; a sealed, buildable Containerfile is
the accepted replacement.
Provisions the toolchain this repo actually uses in bulk (measured, not
guessed): Just + bash + coreutils/findutils/grep for the Just-orchestrated
spec/docs/governance tree (127 .adoc, 118 .a2ml, 32 .yml, 20 .sh). Every
RUN line is active — including a real `just --list` smoke test that fails
the build if the Justfile stops parsing.
Idris2 is intentionally NOT provisioned: no Wolfi/Alpine idris2 package
exists, and the only install path (pack) itself needs a pre-installed
Chez Scheme/Racket, neither of which has a Wolfi/Alpine package either.
Building Chez from source is a 10-30+ minute, fragile compile to serve 9
.idr files out of a ~300-file tree — disproportionate for this escape
hatch. The header comment documents this and points contributors who need
the ABI proofs at upstream pack / idris2 --typecheck abi.ipkg. The Zig FFI
side is out of scope too: it is still the RSR template's uninstantiated
scaffold (main.zig keeps literal {{project}} placeholders).
Verified: podman build -t contractiles-verify:latest -f Containerfile .
exits 0, and podman run against the resulting image correctly lists the
Justfile's recipes.
flake.nix is left untouched — Guix is not yet a working dev environment
for this repo, so the Nix fallback still has to stay usable.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
hyperpolymath
marked this pull request as ready for review
July 27, 2026 14:55
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




Summary
flake.nixno longer satisfies the governance CI gate. This adds a sealed, realContainerfileat the repo root as the accepted escape hatch — everyRUNline is active (no commented examples, no# TODO:placeholders, no|| truefake gates)..adoc, 118.a2ml, 32.yml, 20.sh, vs. only 9.idrand zero real, non-template.zig). The Containerfile provisions and genuinely exercises that bulk toolchain:just,bash,git, and GNUcoreutils/findutils/grep/gawk/sed(busybox'sfindlacks-printf, whichscripts/check-root-shape.shneeds).RUN just --list --unsorted > /dev/null— a genuine smoke test that fails the build if the Justfile stops parsing under the provisioned toolchain.USER nonroot), following the estate house style (seeaerie/Containerfile,proven-servers/Containerfile).ENTRYPOINT ["just"]/CMD ["--list", "--unsorted"]— running the image lists the repo's Just recipes, which is the genuinely useful thing this container can do (there is no compiled service binary in this repo).Deliberate, documented exclusions (not stubs)
abi.ipkg+src/interface/Abi/{Types,Layout,Foreign}.idrare real, valid Idris2 with real ABI/layout proofs — but there is no Wolfi/Alpineidris2package, and the only install path (idris2-pack) itself requires a pre-installed Chez Scheme or Racket, neither of which has a Wolfi/Alpine package either. I confirmed this by hand: building Chez Scheme from source in a Wolfi container is the only remaining path, and it's a 10-30+ minute, fragile compile to serve 9 files out of a ~300-file tree — disproportionate for this container. The header comment documents this and points contributors who need the ABI proofs at upstreampack/idris2 --typecheck abi.ipkgon a host that already has Scheme.src/interface/ffi/is still the RSR template's uninstantiated scaffold:main.zigkeeps the template's literal{{project}}placeholders (not valid Zig identifiers), andbuild.zigdeliberately wires up no build/test steps yet.Verification
Also ran
podman run --rm contractiles-verify:latest, which correctly lists the Justfile's recipes.flake.nixis untouched — Guix is not yet a working dev environment for this repo, so the Nix fallback needs to stay usable.Test plan
podman build -t contractiles-verify:latest -f Containerfile .exits 0podman run --rm contractiles-verify:latestlists Just recipes correctly🤖 Generated with Claude Code