mcp-stream-workflow/hooks/pre-commit
2025-12-27 19:07:51 -08:00

52 lines
1.3 KiB
Bash
Executable file

#!/bin/bash
#
# Pre-commit hook: Prevent direct commits to main branch
#
# This hook enforces the stream workflow by blocking commits to main
# outside of the merge process. All work should be done in worktrees.
#
# Get current branch
BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null || echo "HEAD")
# Check if we're in main
if [ "$BRANCH" = "main" ]; then
# Check if this is a worktree merge (allowed)
if [ -f .git/MERGE_HEAD ]; then
echo "✓ Merge commit to main (allowed)"
exit 0
fi
# Check if we're in the main directory (not a worktree)
if [ ! -f .git ] || [ -d .git ]; then
cat >&2 <<'EOFMSG'
❌ BLOCKED: Direct commits to main branch are not allowed
The stream workflow requires all work to be done in worktrees:
1. Create a stream:
mcp__stream-workflow__start_stream
2. Work in the worktree (path from config.WORKTREE_ROOT):
cd <WORKTREE_ROOT>/stream-XXXX
3. Merge when ready:
mcp__stream-workflow__prepare_merge
mcp__stream-workflow__complete_merge
Why this rule exists:
- Prevents accidental data loss (like Dec 11 incident)
- Ensures merge protection is active
- Maintains clean git history
- Enables proper conflict resolution
To bypass this check (DANGEROUS - only for emergencies):
git commit --no-verify
EOFMSG
exit 1
fi
fi
exit 0