feat(up): --scaffold-guix + print chosen runtime (phase 2) #7

Merged
pti merged 1 commit from feat-guix-scaffold into main 2026-07-07 13:23:54 +02:00
Owner

Phase 2 of design/guix-container-runtime.md (§11). DX for the Guix runtime.

What

  • up --scaffold-guix — writes a starter .wraptool/container.scm (harness runtime: node/bash/coreutils/nss-certs, no git) when none exists, then continues bring-up. Non-clobbering: an existing/edited manifest is left as-is. Fresh repo → scaffold → up, no manual step.
  • Prints the chosen runtime (container runtime: guix|devcontainer) so the auto fallback is never invisible.
  • .mcp.json backup-on-overwrite already shipped in phase 1.

Verified (e2e on Guix host)

Fresh workspace + manifest.scm, up --scaffold-guix --shell=never:

scaffolded .../.wraptool/container.scm (harness runtime; edit to add tools)
container runtime: guix
wrote .../.mcp.json (wraptool @ http://127.0.0.1:8719)
realizing container profile ...

Re-run → container manifest already exists (leaving as-is). Unit test covers write + idempotency + the no-git invariant. build/vet/test/golangci-lint clean.

Deferred

Phase 3 (parity tests/docs polish), phase 4 strict-net (pasta).

🤖 Generated with Claude Code

Phase 2 of `design/guix-container-runtime.md` (§11). DX for the Guix runtime. ## What - **`up --scaffold-guix`** — writes a starter `.wraptool/container.scm` (harness runtime: node/bash/coreutils/nss-certs, **no git**) when none exists, then continues bring-up. Non-clobbering: an existing/edited manifest is left as-is. Fresh repo → scaffold → up, no manual step. - **Prints the chosen runtime** (`container runtime: guix|devcontainer`) so the `auto` fallback is never invisible. - `.mcp.json` backup-on-overwrite already shipped in phase 1. ## Verified (e2e on Guix host) Fresh workspace + `manifest.scm`, `up --scaffold-guix --shell=never`: ``` scaffolded .../.wraptool/container.scm (harness runtime; edit to add tools) container runtime: guix wrote .../.mcp.json (wraptool @ http://127.0.0.1:8719) realizing container profile ... ``` Re-run → `container manifest already exists (leaving as-is)`. Unit test covers write + idempotency + the no-git invariant. build/vet/test/golangci-lint clean. ## Deferred Phase 3 (parity tests/docs polish), phase 4 strict-net (pasta). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(up): --scaffold-guix + print chosen runtime (phase 2)
All checks were successful
Lint / lint (pull_request) Successful in 39s
e8a4a4474c
Phase 2 of design/guix-container-runtime.md. `wraptool up --scaffold-guix`
writes a starter .wraptool/container.scm (harness runtime: node/bash/coreutils/
nss-certs, no git) when none exists, non-clobbering, then continues bring-up —
so a fresh repo goes scaffold -> up with no manual step. runUp now also prints
the selected container runtime so the auto fallback is never invisible.

(.mcp.json backup-on-overwrite already landed in phase 1.) Verified e2e: fresh
workspace + manifest.scm, `up --scaffold-guix` scaffolds the manifest, reports
`container runtime: guix`, writes .mcp.json, realizes the profile; a re-run
leaves an existing/edited container.scm untouched. Unit test covers write +
idempotency + the no-git invariant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pti merged commit 01a07d058d into main 2026-07-07 13:23:54 +02:00
pti deleted branch feat-guix-scaffold 2026-07-07 13:23:55 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
pti/wraptool!7
No description provided.