Introduces a new script to detect the current module (PHP or Go) based on the presence of composer.json or go.mod files, git remote URL, or the current directory name. This context is loaded once per session and used to dynamically adjust commands, starting with the QA command. Refactors the QA command and verification scripts to use the new module context, removing redundant project-type detection.
52 lines
1.3 KiB
Bash
Executable file
52 lines
1.3 KiB
Bash
Executable file
#!/bin/bash
|
|
# Verify QA passes before stopping during /core:qa mode
|
|
#
|
|
# Stop hook that runs QA checks and blocks if any failures exist.
|
|
# Ensures Claude fixes all issues before completing the task.
|
|
|
|
read -r input
|
|
STOP_ACTIVE=$(echo "$input" | jq -r '.stop_hook_active // false')
|
|
|
|
# Prevent infinite loop
|
|
if [ "$STOP_ACTIVE" = "true" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Source module context to get CLAUDE_MODULE_TYPE
|
|
CONTEXT_FILE=".claude-plugin/.tmp/module_context.sh"
|
|
if [ -f "$CONTEXT_FILE" ]; then
|
|
source "$CONTEXT_FILE"
|
|
fi
|
|
|
|
# Run QA based on module type
|
|
case "$CLAUDE_MODULE_TYPE" in
|
|
"go")
|
|
RESULT=$(core go qa 2>&1) || true
|
|
;;
|
|
"php")
|
|
RESULT=$(core php qa 2>&1) || true
|
|
;;
|
|
*)
|
|
# Not a Go or PHP project, allow stop
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
# Check if QA passed
|
|
if echo "$RESULT" | grep -qE "FAIL|ERROR|✗|panic:|undefined:"; then
|
|
# Extract top issues for context
|
|
ISSUES=$(echo "$RESULT" | grep -E "^(FAIL|ERROR|✗|undefined:|panic:)|^[a-zA-Z0-9_/.-]+\.(go|php):[0-9]+:" | head -5)
|
|
|
|
# Escape for JSON
|
|
ISSUES_ESCAPED=$(echo "$ISSUES" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed ':a;N;$!ba;s/\n/\\n/g')
|
|
|
|
cat << EOF
|
|
{
|
|
"decision": "block",
|
|
"reason": "QA still has issues:\n\n$ISSUES_ESCAPED\n\nPlease fix these before stopping."
|
|
}
|
|
EOF
|
|
else
|
|
# QA passed, allow stop
|
|
exit 0
|
|
fi
|