#!/bin/bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" TMP_DIR="$(mktemp -d)" MOCK_GANTT_DIR="$TMP_DIR/gantt-board" MOCK_LOG="$TMP_DIR/delegation.log" cleanup() { rm -rf "$TMP_DIR" } trap cleanup EXIT mkdir -p "$MOCK_GANTT_DIR/scripts" touch "$MOCK_LOG" cat > "$MOCK_GANTT_DIR/scripts/task.sh" <<'MOCK_TASK' #!/bin/bash set -euo pipefail echo "task.sh $*" >> "${MOCK_DELEGATION_LOG:?}" MOCK_TASK cat > "$MOCK_GANTT_DIR/scripts/project.sh" <<'MOCK_PROJECT' #!/bin/bash set -euo pipefail echo "project.sh $*" >> "${MOCK_DELEGATION_LOG:?}" MOCK_PROJECT chmod +x "$MOCK_GANTT_DIR/scripts/task.sh" "$MOCK_GANTT_DIR/scripts/project.sh" export MOCK_DELEGATION_LOG="$MOCK_LOG" export GANTT_BOARD_DIR="$MOCK_GANTT_DIR" bash "$ROOT_DIR/scripts/task.sh" list --json bash "$ROOT_DIR/scripts/project.sh" create --name "Demo" TASK_ID="65bc8c5a-212a-4532-a027-ea424e62900e" \ TASK_STATUS="review" \ node "$ROOT_DIR/scripts/update-task-status.js" if ! grep -F "task.sh list --json" "$MOCK_LOG" >/dev/null 2>&1; then echo "Expected task wrapper to delegate to gantt-board task.sh" >&2 cat "$MOCK_LOG" >&2 exit 1 fi if ! grep -F "project.sh create --name Demo" "$MOCK_LOG" >/dev/null 2>&1; then echo "Expected project wrapper to delegate to gantt-board project.sh" >&2 cat "$MOCK_LOG" >&2 exit 1 fi if ! grep -F "task.sh update 65bc8c5a-212a-4532-a027-ea424e62900e --status review" "$MOCK_LOG" >/dev/null 2>&1; then echo "Expected update-task-status.js to delegate to gantt-board task.sh update" >&2 cat "$MOCK_LOG" >&2 exit 1 fi # No direct database credentials/queries in scripts if rg -n --glob '!scripts/tests/*' "SUPABASE_SERVICE_ROLE_KEY|createClient\\(|rest/v1|from\\('tasks'\\)|from\\(\"tasks\"\\)" "$ROOT_DIR/scripts" >/dev/null 2>&1; then echo "Direct DB references found under scripts/. CLI must remain API passthrough only." >&2 rg -n --glob '!scripts/tests/*' "SUPABASE_SERVICE_ROLE_KEY|createClient\\(|rest/v1|from\\('tasks'\\)|from\\(\"tasks\"\\)" "$ROOT_DIR/scripts" >&2 || true exit 1 fi echo "reuse-gantt-cli-contract: OK"