#!/usr/bin/env bash
# Behavioral checks for the autonomy supervisor never-touch-canonical guard.
set -uo pipefail

HERE="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "$HERE/../../../.." && pwd)"
SUPERVISOR="$REPO_ROOT/recoil/pipeline/tools/autonomy/supervisor.sh"

PASS=0
FAIL=0

ok() {
  echo "  OK: $1"
  PASS=$((PASS + 1))
}

no() {
  echo "  FAIL: $1"
  FAIL=$((FAIL + 1))
}

SBX="$(mktemp -d)"
cleanup() {
  rm -rf "$SBX"
}
trap cleanup EXIT

export HOME="$SBX/home"
export PYTHONPATH="$REPO_ROOT${PYTHONPATH:+:$PYTHONPATH}"
export AUTONOMY_EVENTS_LEDGER="$SBX/events.jsonl"

CANONICAL="$HOME/CLAUDE_PROJECTS"
GOOD_WORKTREE="$HOME/Code/recoil-sessions/REC-79-test-worktree"
OUTSIDE_WORKTREE="$SBX/not-under-sessions"

mkdir -p "$CANONICAL" "$GOOD_WORKTREE" "$OUTSIDE_WORKTREE"

if bash "$SUPERVISOR" --run-id guard-canonical --issue TEST-1 --worktree "$CANONICAL" >/dev/null 2>&1; then
  no "canonical checkout is rejected"
else
  ok "canonical checkout is rejected"
fi

if python3 - "$AUTONOMY_EVENTS_LEDGER" <<'PY'
import json
import sys
from pathlib import Path

ledger = Path(sys.argv[1])
if not ledger.exists():
    raise SystemExit(1)
for line in ledger.read_text(encoding="utf-8").splitlines():
    event = json.loads(line)
    if (
        event.get("event") == "autonomy.build_killed"
        and event.get("run_id") == "guard-canonical"
        and event.get("reason") == "canonical_guard"
    ):
        raise SystemExit(0)
raise SystemExit(1)
PY
then
  ok "canonical guard emits build_killed event"
else
  no "canonical guard emits build_killed event"
fi

if bash "$SUPERVISOR" --run-id guard-good --issue TEST-2 --worktree "$GOOD_WORKTREE" >/dev/null 2>&1; then
  ok "sessions worktree passes guard"
else
  no "sessions worktree passes guard"
fi

if bash "$SUPERVISOR" --run-id guard-outside --issue TEST-3 --worktree "$OUTSIDE_WORKTREE" >/dev/null 2>&1; then
  no "outside sessions root is rejected"
else
  ok "outside sessions root is rejected"
fi

echo "--------"
if [ "$FAIL" -ne 0 ]; then
  echo "AUTONOMY SUPERVISOR GUARD: FAIL ($FAIL failed, $PASS passed)"
  exit 1
fi

echo "AUTONOMY SUPERVISOR GUARD: PASS ($PASS passed)"
