docs/adr/0004-worktree-workstream-seam-module.md
We decided to treat planning/worktree behavior as one explicit Planning Workspace Module Interface rather than spread policy across ad-hoc call sites. The Module owns .planning path resolution, active workstream pointer policy, workstream-name invariants, and lock semantics, while a focused Worktree Root Resolution Adapter owns linked-worktree root mapping and metadata prune behavior. This raises depth at the seam, increases leverage for callers, and improves locality for bug fixes in the worktree/workstream loop.
planningDir / planningRoot / planningPathssession-scoped > shared)withPlanningLock)resolveWorktreeRoot), so callers do not re-derive git-dir/common-dir logic.pruneOrphanedWorktrees runs git worktree prune only and does not remove linked worktree directories.