61 lines
2.0 KiB
Bash
Executable File
61 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [[ -n "${GRAPH_STATE_FILE:-}" ]]; then
|
|
state=$(cat "$GRAPH_STATE_FILE")
|
|
elif [[ -n "${GRAPH_STATE:-}" ]]; then
|
|
state="$GRAPH_STATE"
|
|
else
|
|
state='{}'
|
|
fi
|
|
|
|
fix_attempts=$(echo "$state" | jq -r '.fix_attempts // 0')
|
|
max_fix_attempts=$(echo "$state" | jq -r '.max_fix_attempts // 2')
|
|
lint_ok=$(echo "$state" | jq -r '.lint_ok | if . == null then "true" else (. | tostring) end')
|
|
build_ok=$(echo "$state" | jq -r '.build_ok | if . == null then "true" else (. | tostring) end')
|
|
tests_ok=$(echo "$state" | jq -r '.tests_ok | if . == null then "true" else (. | tostring) end')
|
|
lint_output=$(echo "$state" | jq -r '.lint_output // ""')
|
|
build_output=$(echo "$state" | jq -r '.build_output // ""')
|
|
tests_output=$(echo "$state" | jq -r '.tests_output // ""')
|
|
|
|
if (( fix_attempts >= max_fix_attempts )); then
|
|
jq -nc \
|
|
--argjson n "$fix_attempts" \
|
|
'{
|
|
"fix_attempts": $n,
|
|
"_next": "end_failure"
|
|
}'
|
|
exit 0
|
|
fi
|
|
|
|
next_attempts=$((fix_attempts + 1))
|
|
|
|
if [[ "$lint_ok" != "true" ]]; then
|
|
stage="lint"
|
|
output="$lint_output"
|
|
elif [[ "$build_ok" != "true" ]]; then
|
|
stage="build"
|
|
output="$build_output"
|
|
elif [[ "$tests_ok" != "true" ]]; then
|
|
stage="full test suite"
|
|
output="$tests_output"
|
|
else
|
|
stage="verification"
|
|
output="fix_loop_gate was reached but no failing stage was recorded. Re-run verification."
|
|
fi
|
|
|
|
fix_instructions=$(printf '## Fix loop status (step-level attempt %d of %d)\n\nThe implementation passed the coder'"'"'s internal checks but failed step-level verification at the %s stage.\n\nOutput:\n```\n%s\n```\n\nIdentify the minimal fix and apply it. Do not refactor. Regressions in untouched code caused by this change are in scope.' \
|
|
"$next_attempts" "$max_fix_attempts" "$stage" "$output")
|
|
|
|
jq -nc \
|
|
--argjson n "$next_attempts" \
|
|
--arg 'fi' "$fix_instructions" \
|
|
'{
|
|
"fix_attempts": $n,
|
|
"fix_instructions": $fi,
|
|
"lint_ok": true,
|
|
"build_ok": true,
|
|
"tests_ok": true,
|
|
"_next": "implement"
|
|
}'
|