#!/bin/bash # check-done.sh — exit 0 when workplan is complete, 1 when work remains, 2 if missing. set -euo pipefail WORKPLAN_FILE="${1:?workplan_file required}" [[ -f "$WORKPLAN_FILE" ]] || { echo "❌ Workplan file not found: $WORKPLAN_FILE" >&2; exit 2; } python3 - "$WORKPLAN_FILE" <<'PY' import re, sys from pathlib import Path path = Path(sys.argv[1]) text = path.read_text(encoding="utf-8") fm = re.search(r"^---\n(.*?)\n---", text, re.S) if not fm: print(f"⚠️ No frontmatter in {path}", file=sys.stderr) raise SystemExit(1) status_match = re.search(r"^status:\s*(\S+)", fm.group(1), re.M) status = (status_match.group(1) if status_match else "").strip('"') tasks = re.findall(r"```task\n(.*?)```", text, re.S) open_tasks = [ t for t in tasks if not re.search(r"^status:\s*(done|cancel)\s*$", t, re.M) ] if status in {"done", "finished"} and not open_tasks: raise SystemExit(0) raise SystemExit(1) PY