vibetunnel/docs/git-worktree-follow-mode.md

194 lines
No EOL
5.5 KiB
Markdown

# Git Worktree Follow Mode Specification
## Overview
Follow mode is a feature that enables automatic synchronization between Git worktrees and the main repository. It ensures team members stay on the same branch by automatically switching branches when changes are detected.
## Core Concept
Follow mode creates a **unidirectional sync** from a worktree to the main repository:
- When someone switches branches in a worktree
- The main repository automatically follows that branch change
- This keeps the main repository synchronized with active development
## When Follow Mode Should Be Available
### ✅ Follow Mode SHOULD appear when:
1. **Creating a session in a worktree**
- You've selected a worktree from the dropdown
- The session will run in that worktree's directory
- Follow mode will sync the main repository to match this worktree's branch
2. **Viewing worktrees in the Worktree Manager**
- Each worktree (except main) shows a "Follow" button
- Enables following that specific worktree's branch
3. **Session list with worktree sessions**
- Repository headers show follow mode status
- Dropdown allows changing which worktree to follow
### ❌ Follow Mode should NOT appear when:
1. **No worktree is selected** (using main repository)
- There's nothing to follow - you're already in the main repo
- Follow mode has no purpose without a worktree
2. **Repository has no worktrees**
- No worktrees exist to follow
- Only the main repository is available
3. **Not in a Git repository**
- Obviously, no Git features available
## UI Behavior Rules
### Session Creation Form
```typescript
// Show follow mode toggle only when:
const showFollowModeToggle =
gitRepoInfo?.isGitRepo &&
selectedWorktree !== undefined &&
selectedWorktree !== 'none';
```
#### Toggle States:
1. **Worktree Selected**:
- Show: "Follow Mode" toggle
- Description: "Keep main repository in sync with this worktree"
- Default: OFF (user must explicitly enable)
2. **No Worktree Selected**:
- Hide the entire follow mode section
- No toggle should be visible
3. **Follow Mode Already Active**:
- Show: "Follow Mode" toggle (disabled)
- Description: "Currently following: [branch-name]"
- Info: User must disable from worktree manager
### Worktree Manager
Each worktree row shows:
- **"Follow" button**: When not currently following
- **"Following" button** (green): When actively following this worktree
- **No button**: For the main worktree (can't follow itself)
### Session List
Repository headers show:
- **Purple badge**: When follow mode is active, shows branch name
- **Dropdown**: To change follow mode settings per repository
## Technical Implementation
### State Logic
```typescript
// Follow mode is only meaningful when:
// 1. We have a worktree to follow
// 2. We're not already in that worktree
// 3. The main repo can switch to that branch
const canEnableFollowMode = (
worktree: Worktree,
currentLocation: string,
mainRepoPath: string
) => {
// Can't follow if we're in the main repo with no worktree selected
if (currentLocation === mainRepoPath && !worktree) {
return false;
}
// Can't follow the main worktree
if (worktree.isMainWorktree) {
return false;
}
// Can follow if we're creating a session in a worktree
if (worktree && currentLocation === worktree.path) {
return true;
}
return false;
};
```
### Configuration Storage
Follow mode state is stored in Git config:
```bash
# Enable follow mode for a branch
git config vibetunnel.followBranch "feature/new-ui"
# Check current follow mode
git config vibetunnel.followBranch
# Disable follow mode
git config --unset vibetunnel.followBranch
```
### Synchronization Rules
1. **Automatic Sync**:
- Triggered by `post-checkout` git hook in worktrees
- Only syncs if main repo has no uncommitted changes
- Disables follow mode if branches have diverged
2. **Manual Override**:
- Users can always manually switch branches
- Follow mode doesn't prevent manual git operations
- Re-enables when returning to the followed branch
## User Experience Guidelines
### Clear Messaging
1. **When Enabling**:
- "Follow mode will keep your main repository on the same branch as this worktree"
- "Enable to automatically sync branch changes"
2. **When Active**:
- "Following worktree: feature/new-ui"
- "Main repository syncs with this worktree's branch"
3. **When Disabled**:
- "Follow mode disabled due to uncommitted changes"
- "Branches have diverged - follow mode disabled"
### Visual Indicators
- **Toggle Switch**: Only visible when applicable
- **Status Badge**: Purple badge with branch name when active
- **Button States**: Clear "Follow"/"Following" states in worktree manager
## Error Handling
### Common Scenarios
1. **Uncommitted Changes**:
- Disable follow mode automatically
- Show notification to user
- Don't lose any work
2. **Branch Divergence**:
- Detect when branches have different commits
- Disable follow mode to prevent conflicts
- Notify user of the situation
3. **Worktree Deletion**:
- Automatically disable follow mode
- Clean up git config
- Update UI immediately
## Summary
Follow mode should be:
- **Contextual**: Only shown when it makes sense
- **Safe**: Never causes data loss or conflicts
- **Clear**: Users understand what it does
- **Automatic**: Works in the background when enabled
The key principle: **Follow mode only exists when there's a worktree to follow**. Without a worktree selection, the feature should not be visible or accessible.