55 lines
1.7 KiB
Bash
Executable File
55 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -uo pipefail
|
|
|
|
if [[ -n "${GRAPH_STATE_FILE:-}" ]]; then
|
|
state=$(cat "$GRAPH_STATE_FILE")
|
|
elif [[ -n "${GRAPH_STATE:-}" ]]; then
|
|
state="$GRAPH_STATE"
|
|
else
|
|
state='{}'
|
|
fi
|
|
|
|
handoff_path=$(echo "$state" | jq -r '.handoff_path // ""')
|
|
step_plan_path=$(echo "$state" | jq -r '.step_plan_path // ""')
|
|
handoff_attempts=$(echo "$state" | jq -r '.handoff_attempts // 0')
|
|
|
|
problems=""
|
|
|
|
if [[ ! -f "$handoff_path" ]]; then
|
|
problems="- handoff file does not exist at $handoff_path"$'\n'
|
|
else
|
|
content=$(cat "$handoff_path")
|
|
grep -qE '^result:[[:space:]]*(complete|partial|blocked)' <<< "$content" \
|
|
|| problems+="- frontmatter is missing 'result: complete|partial|blocked'"$'\n'
|
|
for section in "Summary" "Completed" "Not completed" "Deviations" "Downstream plan updates" "Edge cases discovered" "Evidence" "Notes for next step"; do
|
|
grep -qE "^##[[:space:]]+${section}" <<< "$content" \
|
|
|| problems+="- missing required section: ## ${section}"$'\n'
|
|
done
|
|
fi
|
|
|
|
if [[ -z "$problems" ]]; then
|
|
if [[ -f "$step_plan_path" ]]; then
|
|
tmp=$(mktemp)
|
|
awk 'BEGIN{n=0} /^---[[:space:]]*$/{n++; print; next} n==1 && /^status:/{print "status: complete"; next} {print}' "$step_plan_path" > "$tmp" && mv "$tmp" "$step_plan_path"
|
|
fi
|
|
jq -nc '{"handoff_fix": "", "_next": "gate_user_review"}'
|
|
exit 0
|
|
fi
|
|
|
|
if (( handoff_attempts >= 1 )); then
|
|
jq -nc \
|
|
--arg br "Handoff failed validation twice. Problems:
|
|
$problems" \
|
|
'{"blocking_reason": $br, "_next": "end_failure"}'
|
|
exit 0
|
|
fi
|
|
|
|
jq -nc \
|
|
--arg hf "The previous handoff attempt failed validation. Fix exactly these problems:
|
|
$problems" \
|
|
'{
|
|
"handoff_attempts": 1,
|
|
"handoff_fix": $hf,
|
|
"_next": "write_handoff"
|
|
}'
|