feat(up): Guix-native container runtime (phase 1) #6
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat-guix-container-runtime"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 1 of
design/guix-container-runtime.md(merged in #5). Adds a Guix-nativewraptool upbackend beside the devcontainer path.What
--runtime=auto|guix|devcontaineronup. auto = guix when theguixCLI is on PATH and the worktree hasmanifest.scm, else devcontainer (selectRuntime,hasGuix).bringUpGuixContainer:guix shell --container --networkfrom a harnesscontainer.scm(.wraptool/container.scmorcontainer.scm— node/bash/coreutils/nss-certs, no git/creds). ForwardsWRAPTOOL_TOKEN/_CWDvia--preserve, marks the shellWRAPTOOL_CONTAINER=1.writeMCPConfig: writes.mcp.jsonon the host into the shared workspace (Go twin ofconnect.sh) — SSE at the server's loopback listen addr,?cwd=scoped, bearer header when a token is set.inContainernow also honorsWRAPTOOL_CONTAINERso a nestedupis refused.Why this shape
Per the design: internet is mandatory →
-N(shared host netns) → harness reaches wraptool directly on loopback (no socat/unix needed in v1). Credential isolation is a mount/user-namespace property, intact regardless of net mode.Verified
-Nguix container, registry reachable, no-Fneeded.up --runtime=guixstarts the server, writes a correct.mcp.json; inside the container the harness gets the SSEevent: endpointhandshake, the workspace is at its host path, host$HOMEis empty / host repo not visible, git absent.selectRuntimetruth table,writeMCPConfig(token/no-token, cwd encoding, backup), manifest-lookup priority.go build/vet/golangci-lintclean (2 unrelated pre-existingvalidate_test.gofailures assume/usr/bin/git, absent on Guix).Deferred
--scaffold-guix(writescontainer.scm), strict-net mode (pasta), non-Claude harnesses.🤖 Generated with Claude Code
4f2f186bc9bd0339a982`on: [push, pull_request]` fired two lint jobs for any push to a branch with an open PR. On the shared native Guix runner they run concurrently and collide on golangci-lint's host-wide lock ("another instance is running"), failing one. Scope `push` to main: feature branches lint once via pull_request, main lints once via push, never both. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>