Skip to content

Commit 25eb444

Browse files
hyperpolymathmistral-vibeclaude
authored
feat: add sealed Containerfile (Nix-retirement escape hatch) (#19)
## Summary - Nix was retired estate-wide 2026-06-01, so a bare `flake.nix` no longer satisfies the governance CI gate. This adds a sealed, real `Containerfile` at the repo root as the accepted escape hatch — every `RUN` line is active (no commented examples, no `# TODO:` placeholders, no `|| true` fake gates). - Toolchain scope was measured, not guessed: this repo is overwhelmingly a Just-orchestrated spec/docs/governance tree (127 `.adoc`, 118 `.a2ml`, 32 `.yml`, 20 `.sh`, vs. only 9 `.idr` and zero real, non-template `.zig`). The Containerfile provisions and genuinely exercises that bulk toolchain: `just`, `bash`, `git`, and GNU `coreutils`/`findutils`/`grep`/`gawk`/`sed` (busybox's `find` lacks `-printf`, which `scripts/check-root-shape.sh` needs). - Real active build step: `RUN just --list --unsorted > /dev/null` — a genuine smoke test that fails the build if the Justfile stops parsing under the provisioned toolchain. - Two-stage build (Wolfi build stage → Wolfi runtime stage, `USER nonroot`), following the estate house style (see `aerie/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) - **Idris2 is intentionally NOT provisioned.** `abi.ipkg` + `src/interface/Abi/{Types,Layout,Foreign}.idr` are real, valid Idris2 with real ABI/layout proofs — but there is no Wolfi/Alpine `idris2` package, 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 upstream `pack` / `idris2 --typecheck abi.ipkg` on a host that already has Scheme. - **The Zig FFI side is out of scope too.** `src/interface/ffi/` is still the RSR template's uninstantiated scaffold: `main.zig` keeps the template's literal `{{project}}` placeholders (not valid Zig identifiers), and `build.zig` deliberately wires up no build/test steps yet. ## Verification ``` $ podman build -t contractiles-verify:latest -f Containerfile . ... Successfully tagged localhost/contractiles-verify:latest EXIT_CODE=0 ``` Also ran `podman run --rm contractiles-verify:latest`, which correctly lists the Justfile's recipes. `flake.nix` is untouched — Guix is not yet a working dev environment for this repo, so the Nix fallback needs to stay usable. ## Test plan - [x] `podman build -t contractiles-verify:latest -f Containerfile .` exits 0 - [x] `podman run --rm contractiles-verify:latest` lists Just recipes correctly - [ ] Maintainer confirms the toolchain scope (Just-only, no Idris2/Zig) matches intent for this repo 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Mistral Vibe <vibe@mistral.ai> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent ed09722 commit 25eb444

40 files changed

Lines changed: 1683 additions & 434 deletions

.github/GOVERNANCE.md

Lines changed: 0 additions & 160 deletions
This file was deleted.

.github/funding.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Funding Configuration
2+
# See: https://docs.github.com/en/repositories/managing-your-repositorys-custom-fields/displaying-a-sponsor-button-in-your-repository
3+
4+
github: metadatastician

.github/workflows/boj-build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ on:
1111
branches: [main, master]
1212
workflow_dispatch:
1313
permissions:
14+
actions: read
1415
contents: read
1516
jobs:
1617
trigger-boj:

.github/workflows/codeql.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ on:
88
schedule:
99
- cron: '0 6 * * 1'
1010
permissions:
11+
actions: read
1112
contents: read
1213
jobs:
1314
analyze:
@@ -32,11 +33,11 @@ jobs:
3233
- name: Checkout
3334
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3435
- name: Initialize CodeQL
35-
uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v3.28.1
36+
uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v3
3637
with:
3738
languages: ${{ matrix.language }}
3839
build-mode: ${{ matrix.build-mode }}
3940
- name: Perform CodeQL Analysis
40-
uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v3.28.1
41+
uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v3
4142
with:
4243
category: "/language:${{ matrix.language }}"

.github/workflows/dependabot-automerge.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ on:
3939
pull_request:
4040
types: [opened, reopened, synchronize]
4141
permissions:
42+
actions: read
4243
contents: write # needed to enable auto-merge
4344
pull-requests: write # needed to approve
4445
# NB: keep narrow — do NOT add secrets: read or id-token: write here.

.github/workflows/dogfood-gate.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ on:
1313
branches: [main, master]
1414

1515
permissions:
16+
actions: read
1617
contents: read
1718

1819
jobs:

.github/workflows/e2e.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ on:
2929
- 'tests/**'
3030
workflow_dispatch:
3131
permissions: read-all
32+
actions: read
3233
concurrency:
3334
group: e2e-${{ github.ref }}
3435
cancel-in-progress: true

.github/workflows/estate-rules.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ on:
1515
branches: [main]
1616
pull_request:
1717
permissions:
18+
actions: read
1819
contents: read
1920
jobs:
2021
estate-rules:

.github/workflows/governance.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99
workflow_dispatch:
1010

1111
permissions:
12+
actions: read
1213
contents: read
1314

1415
jobs:

.github/workflows/guix-nix-policy.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ concurrency:
1212
cancel-in-progress: true
1313

1414
permissions:
15+
actions: read
1516
contents: read
1617
jobs:
1718
check:

0 commit comments

Comments
 (0)