v0.10.1 — Hotfix: coder cannot edit Springdrift's own state
Critical fix. All v0.10.0 operators should upgrade.
What was broken
The auto-wire in v0.10.0 defaulted [coder] project_root to cwd when the operator hadn't set it explicitly. Springdrift's cwd contains its own .springdrift/ data dir — and when the operator ran the agent from inside its own source repo (the path of least resistance), the OpenCode container was bind-mounted at /workspace/project over the Springdrift checkout itself. The coder agent could (and did) scribble on the running source code, the agent's own memory, and the cycle log.
What's now structurally impossible
- Coder agent editing Springdrift's own source code
- Coder agent editing the running agent's
.springdrift/data (memory, narrative, identity, planner state) - Coder agent operating from
"."or any path that contains the running agent's data dir - Self-edit regardless of where the operator launched Springdrift from
Two-step fix
#173 — drop the cwd fallback; add a project_root_safe/1 guard that refuses any path containing a .springdrift/ subdirectory or any path that IS a .springdrift/ data dir. Logs the refusal reason to startup output and the system log.
#174 — restore "just works" with a SAFE default: ${TMPDIR}/springdrift-coder-workspace on macOS, /tmp/springdrift-coder-workspace on Linux. Auto-created on first boot. Stable across restarts of the same instance so the coder remembers previous commits in the workspace. The default path is structurally disjoint from cwd, so the safety guard never fires for it.
Operator-facing change
Default operator experience is unchanged: [coder] project_root still optional, fresh installs auto-enable real-coder. The default just lands in a temp dir instead of cwd.
Operators who want the coder pointed at a specific project of theirs override exactly as before:
[coder]
project_root = "/Users/you/Repos/some-project"…with the constraint that the chosen path must NOT contain a .springdrift/ subdirectory. Startup will refuse with a clear message if it does.
Migration
- From v0.10.0: pull, rebuild (
gleam build), restart. No config migration needed. - Anyone who explicitly set
[coder] project_rootto their Springdrift checkout (or a parent of it) will see real-coder refuse to start with a clear message — change the path and restart.
Stats
🤖 Generated with Claude Code