Skip to content

v0.10.1 — Hotfix: coder cannot edit Springdrift's own state

Latest

Choose a tag to compare

@seamus-brady seamus-brady released this 27 Apr 07:10
· 2 commits to main since this release

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_root to 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

  • 2 PRs (#173, #174)
  • 226 lines net (171 + 55)
  • 2190 tests passing
  • Build clean, format clean

🤖 Generated with Claude Code