- Split Validation Checklist into verifiable docs vs deferred implementation checks (AGENTS.md) - Correct README example output to match actual `git worktree list` format - Add pi platform version requirement (`pi >= 0.5.0`) to Requirements section - Add Testing Strategy section with unit, integration, and manual verification procedures (DESIGN.md) - Document annotated `git worktree list` raw output format with parsing rules (DOMAIN.md) - Add permission fail condition for `create` tool in Tool Behaviors table
4 KiB
4 KiB
DESIGN.md — Architecture & Design Decisions
Overview
A pi extension that manages git worktrees through tool commands and an interactive /worktree command, with tight session integration.
v1 Scope
- Four tools:
git_worktree_create,git_worktree_list,git_worktree_switch,git_worktree_remove - One command:
/worktree(interactive picker) - Session hooks: branch display update + offer new session after switch
- Out of scope: auto-worktree creation, smart defaults, persistent state
Architecture
pi-worktree.ts
├── Tools
│ ├── git_worktree_create(path, branch?, create_branch?)
│ ├── git_worktree_list()
│ ├── git_worktree_switch(target)
│ └── git_worktree_remove(path)
├── Command: /worktree (interactive picker)
└── Session hooks
├── Update pi's git branch display on switch
└── Offer new session creation after switch
Key Design Decisions
Stateless Tools, Ephemeral Memory
Tools are stateless; only in-memory mapping of worktree→session during a process lifetime for back-switching. Lost on restart.
Fail Fast, No Auto-Correction
Refuse dangerous operations (existing path, current branch, uncommitted changes) with clear messages and suggested fixes. Never silently auto-correct.
Session Integration Depth (v1)
Update branch display + offer new session creation. No automatic worktree creation per branch — keeps complexity down and avoids assumptions about workflow.
Tool Behaviors
| Tool | Key Behavior | Fail Conditions |
|---|---|---|
create |
git worktree add <path> [branch], -b for new branches |
Path exists, branch is current, no write permission at target path (check with fs.access() before invoking git) |
list |
Parses git worktree list output into structured data |
No git repo present |
switch |
Changes cwd to target worktree path | Already there, uncommitted changes in source |
remove |
git worktree remove <path> |
Target is main repo, uncommitted changes |
Edge Cases
- Nested worktrees: Not supported by git — surface native error
- Detached HEAD: Use path for identification instead of branch name
- Untracked files on removal: Suggest removing/moving them first
- Same-branch worktrees: Let git handle it, surface the error
Testing Strategy
Unit Tests — Parsing (git_worktree_list)
- Parse valid
git worktree listoutput into structured data with correctbranch,path, andisCurrent - Handle detached HEAD entries (no branch name → use path for identification)
- Handle bare repos (HEAD line without branch brackets)
- Reject non-git-repo directories
Unit Tests — Validation (git_worktree_create)
- Refuse when target path already exists (suggest
--forceor alternative path) - Refuse when attempting to create a worktree on the current branch in the main repo
- Surface permission errors with actionable guidance (e.g., "cannot write to /root/ — try ~/worktrees/")
Integration Tests — Each Tool
| Test | Procedure |
|---|---|
create |
Create worktree → verify git worktree list shows it → remove it |
list |
Run against repo with 0, 1, and N worktrees → assert structured output shape |
switch |
Switch to existing worktree → verify cwd updated → switch back → verify original state restored |
remove |
Remove a linked worktree → verify it's gone from list; refuse if uncommitted changes exist |
Manual Verification — /worktree Command UX
- Run
/worktreein a repo with multiple worktrees - Confirm picker shows branch names (not just paths)
- Switch to a worktree → confirm branch display updates
- Return to main repo → confirm session back-switching works
Rollout Phases
- Core tools (create, list, switch, remove) with error handling + unit tests
/worktreeinteractive command with picker + back-switching + integration tests- Session integration hooks (branch display, new session offer)
- Polish: edge cases, README, manual verification pass