b594bba104
Repeated handoff failures traced back to the slug in /tmp/bullpen-build/<slug>/: a ticket with the wrong or missing slug produces DIR NOT FOUND on an otherwise- correct agent. markus proposed switching the shared basis to "/" so everyone agrees on one reference point; investigated first since he flagged the exact risk himself (is "/" the same thing everywhere?). It is not: boltzmann (the grind host, where @testdesigner now executes per the earlier host-boundary fix) is BARE METAL (systemd-detect-virt: none) -- the real physical Pi, which itself hosts other Incus containers. orca (@foreman) and deus are each their own isolated Incus container filesystem. Three different roots; giving an unconfined bare-metal agent a "/" mental model is a real safety risk, not just an inconvenience -- a confused absolute path could touch the real host instead of a sandbox. Landed on a fixed SYMLINK instead: /tmp/sandbox -> /tmp/bullpen-build/<slug>, repointed at the start of each campaign. Solves the actual pain (one name, never changes, no slug to get wrong) without expanding what any agent can reach -- stays inside the already-safe /tmp boundary. Verified end-to-end on boltzmann: opencode reads/writes through the symlink transparently, and the grinder's os.path.realpath() safety check resolves it correctly. The slug dir itself is unchanged and still required (real git-tracked archive, baseline commit, diff target) -- only ticket-facing references (REPO:, SPEC:, the healthy-chain diagram, the DIR-NOT-FOUND failure signature, the checklist) now say /tmp/sandbox instead of the slug path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE