go-agent/codex/code/scripts/qa-verify.sh
Snider 61e01bfdf1 feat: initial go-agent — agentci + jobrunner + plugins marketplace
Consolidates three codebases into a single agent orchestration repo:

- agentci (from go-scm): Clotho dual-run verification, agent config,
  SSH security (sanitisation, secure commands, token masking)
- jobrunner (from go-scm): Poll-dispatch-report pipeline with 7 handlers
  (dispatch, completion, auto-merge, publish draft, dismiss reviews,
  send fix command, tick parent epic)
- plugins marketplace (from agentic/plugins): 27 Claude/Codex/Gemini
  plugins with shared MCP server

All 150+ tests passing across 6 packages.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-21 15:47:19 +00:00

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