Startup hooks in data-platform and pr-review were checking for venvs at the marketplace path (~/.claude/plugins/marketplaces/.../mcp-servers/) which gets wiped on updates. The actual venvs live in the cache directory (~/.cache/claude-mcp-venvs/) which survives updates. This caused false "MCP venv missing" errors even when venvs existed, wasting hours of debugging time. Fixed hooks now check cache path first, matching the pattern used by run.sh scripts. Also updated docs/CANONICAL-PATHS.md with the correct venv path pattern to prevent future occurrences. Lesson learned: lessons/patterns/startup-hooks-must-check-venv-cache-path-first Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
38 lines
1.3 KiB
Bash
Executable File
38 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# pr-review startup check hook
|
|
# Checks for common issues at session start
|
|
# All output MUST have [pr-review] prefix
|
|
|
|
PREFIX="[pr-review]"
|
|
|
|
# Check if MCP venv exists - check cache first, then local
|
|
CACHE_VENV="$HOME/.cache/claude-mcp-venvs/leo-claude-mktplace/gitea/.venv/bin/python"
|
|
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "$(realpath "$0")")")}"
|
|
MARKETPLACE_ROOT="$(dirname "$(dirname "$PLUGIN_ROOT")")"
|
|
LOCAL_VENV="$MARKETPLACE_ROOT/mcp-servers/gitea/.venv/bin/python"
|
|
|
|
# Check cache first (preferred), then local
|
|
if [[ -f "$CACHE_VENV" ]]; then
|
|
VENV_PATH="$CACHE_VENV"
|
|
elif [[ -f "$LOCAL_VENV" ]]; then
|
|
VENV_PATH="$LOCAL_VENV"
|
|
else
|
|
echo "$PREFIX MCP venvs missing - run setup.sh from installed marketplace"
|
|
exit 0
|
|
fi
|
|
|
|
# Check git remote vs .env config (only if .env exists)
|
|
if [[ -f ".env" ]]; then
|
|
CONFIGURED_REPO=$(grep -E "^GITEA_REPO=" .env 2>/dev/null | cut -d'=' -f2 | tr -d '"' || true)
|
|
if [[ -n "$CONFIGURED_REPO" ]]; then
|
|
CURRENT_REMOTE=$(git remote get-url origin 2>/dev/null | sed 's/.*[:/]\([^/]*\/[^.]*\).*/\1/' || true)
|
|
if [[ -n "$CURRENT_REMOTE" && "$CONFIGURED_REPO" != "$CURRENT_REMOTE" ]]; then
|
|
echo "$PREFIX Git remote mismatch - run /pr-review:project-sync"
|
|
exit 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# All checks passed - say nothing
|
|
exit 0
|