carlos / platform Public

fix wave 1: plan environment text follows the global scratch rules (GOCACHE on disk; /tmp/k only for socket-length test dirs)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev f7e27b3ea706dc65ac0704ab9834d5f721587d8f parent a967da8
1 file changed, +3 −1
  • docs/superpowers/plans/2026-10-12-zero-downtime-flag-readiness-2.md +3 −1
diff --git a/docs/superpowers/plans/2026-10-12-zero-downtime-flag-readiness-2.md b/docs/superpowers/plans/2026-10-12-zero-downtime-flag-readiness-2.md
index c72648797..fd4239025 100644
--- a/docs/superpowers/plans/2026-10-12-zero-downtime-flag-readiness-2.md
+++ b/docs/superpowers/plans/2026-10-12-zero-downtime-flag-readiness-2.md
@@ -23,7 +23,9 @@
- No liveness trap: no instance may be left down forever with no supported recovery.
- New member-facing strings carry `// TODO-COPY(<id>)` on the literal's line, ids prefixed `zdd-readiness2.`. Draft text only: no em dashes (a full stop and a new sentence instead). Operator log lines are not copy.
- Cross-compile: linux-only syscalls need `//go:build linux` and a `!linux` stub; CI builds darwin and windows (`GOOS=darwin go build ./...`, `GOOS=windows go build ./...`).
-- Tests run serially and niced (`nice -n 19`). Session house rules for the environment: sandboxed Go uses `export GOCACHE=$TMPDIR/gocache GOFLAGS=-mod=mod GOPROXY=off` in every command (never delete that cache, it is shared); packages that bind unix sockets (activator, edge, host, some console tests) or touch cgroupfs run unsandboxed with `TMPDIR=/tmp/k GOFLAGS=-buildvcs=false` and the default Go cache (`mkdir -p /tmp/k` first; remove only what you created there afterwards).
+- Tests run serially and niced (`nice -n 19`). The environment follows the user's global scratch rules (scratch not directly in `/tmp`, which is a shared RAM-backed tmpfs; never `GOCACHE` or `GOTMPDIR` under `/tmp`):
+ - Sandboxed Go uses `export GOCACHE=$TMPDIR/gocache GOFLAGS=-mod=mod GOPROXY=off` in every command. That cache is on disk, not in `/tmp`: the sandbox's `$TMPDIR` is under `~/.cache` (`~/.cache/tmp/claude-<uid>`). It is shared; never delete it.
+ - Packages that bind unix sockets (activator, edge, host, some console tests) or touch cgroupfs run unsandboxed with the default Go cache (`~/.cache/go-build`) and `TMPDIR=/tmp/k GOFLAGS=-buildvcs=false`. `/tmp/k` is used only because a socket test needs a short real path: `sun_path` is 108 bytes, and a test temp dir under `~/.cache` is too long for it. It holds only the tests' own temp dirs, never a cache or a build. `mkdir -p /tmp/k` first, and empty what you created there after the run.
- Commits: the worktree's identity is set (`claude` / `claude~paul@keymail.dev`); check `git config user.email` before the first commit. Plain `git add <files>` and `git commit -m`; never `git stash`, `git checkout -- <file>`, `git worktree prune`, `git reset --hard`.
- Integrity: every test result reported is pasted from a real run.
- Simulation: `mutate.sh` tests `git archive HEAD`, so **commit before every mutate.sh run** and name the commit it tested (plan 11). `mutate.sh 300` inside a task; the one 3000-seed sweep per branch revision is the controller's, at `nice -n 19`, GOMAXPROCS=2.