#!/usr/bin/env bash
set -euo pipefail
# Code-Enforced Autonomy Policy Engine
# Evaluates an AI model's proposed remediation against explicit allowlists and autonomy levels.
# Enforces permissions strictly OUTSIDE the model.
show_help() {
echo "Usage: authorize-action [OPTIONS] <proposal_json>"
echo ""
echo "Evaluates proposed action against on-call-engineer/autonomy-policy.json."
echo ""
echo "Options:"
echo " -p, --policy <path> Path to autonomy-policy.json (default: on-call-engineer/autonomy-policy.json)"
echo " --execute Execute approved Level 1 actions immediately"
echo " -h, --help Show this help message"
exit 0
}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
POLICY_FILE="${ROOT_DIR}/autonomy-policy.json"
AUTO_EXEC=false
PROPOSAL_INPUT=""
while [[ $# -gt 0 ]]; do
case "$1" in
-p|--policy)
POLICY_FILE="$2"
shift 2
;;
--execute)
AUTO_EXEC=true
shift
;;
-h|--help)
show_help
;;
-*)
echo "Unknown option: $1"
show_help
;;
*)
PROPOSAL_INPUT="$1"
shift
;;
esac
done
if [ -z "${PROPOSAL_INPUT}" ]; then
echo "ERROR: Proposal JSON input or file is required."
show_help
fi
PROPOSAL_JSON=""
if [ -f "${PROPOSAL_INPUT}" ]; then
PROPOSAL_JSON=$(cat "${PROPOSAL_INPUT}")
else
PROPOSAL_JSON="${PROPOSAL_INPUT}"
fi
echo "================================================================"
echo " CODE-ENFORCED AUTONOMY POLICY EVALUATOR "
echo "================================================================"
echo "Policy File: ${POLICY_FILE}"
echo "================================================================"
# Extract fields
ACTION_NAME=$(echo "${PROPOSAL_JSON}" | grep -o '"action" *: *"[^"]*"' | head -n1 | cut -d'"' -f4 || echo "unknown")
CONFIDENCE=$(echo "${PROPOSAL_JSON}" | grep -o '"confidence" *: *"[^"]*"' | head -n1 | cut -d'"' -f4 || echo "unknown")
RATIONALE=$(echo "${PROPOSAL_JSON}" | grep -o '"rationale" *: *"[^"]*"' | head -n1 | cut -d'"' -f4 || echo "No rationale provided")
echo "Model Proposal:"
echo " Action: ${ACTION_NAME}"
echo " Confidence: ${CONFIDENCE}"
echo " Rationale: ${RATIONALE}"
echo ""
# 1. Check Forbidden Patterns
if echo "${PROPOSAL_JSON}" | grep -qiE "rm -rf|drop table|drop database|truncate|delete from .* where 1=1|docker compose down -v"; then
echo "SECURITY VIOLATION: Proposal contains forbidden destructive command!"
echo "Policy Decision: REJECTED & ESCALATED TO HUMAN (LEVEL_3_ESCALATE)"
exit 2
fi
# 2. Match against Allowlisted Actions in policy
MATCHED_LEVEL=""
case "${ACTION_NAME}" in
rollback|restart_service|clear_cache)
MATCHED_LEVEL="LEVEL_1_AUTO_EXECUTE"
;;
apply_patch|scale_deployment)
MATCHED_LEVEL="LEVEL_2_HUMAN_APPROVAL"
;;
*)
MATCHED_LEVEL="LEVEL_3_ESCALATE"
;;
esac
echo "==> Policy Evaluation Result: ${MATCHED_LEVEL}"
mkdir -p "${ROOT_DIR}"
AUDIT_LOG="${ROOT_DIR}/audit-trail.log"
TIMESTAMP="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
echo "[${TIMESTAMP}] INCIDENT ACTION EVALUATION: action='${ACTION_NAME}', level='${MATCHED_LEVEL}', confidence='${CONFIDENCE}'" >> "${AUDIT_LOG}"
if [ "${MATCHED_LEVEL}" = "LEVEL_1_AUTO_EXECUTE" ]; then
echo "OK: Action '${ACTION_NAME}' is allowlisted for automatic execution."
if [ "${AUTO_EXEC}" = true ]; then
echo "==> Executing authorized Level 1 command for action '${ACTION_NAME}'..."
case "${ACTION_NAME}" in
restart_service)
docker compose restart backend || echo "Restart simulated."
;;
rollback)
echo "Simulating rollback execution."
;;
esac
echo "[${TIMESTAMP}] EXECUTION COMPLETED: action='${ACTION_NAME}'" >> "${AUDIT_LOG}"
fi
exit 0
elif [ "${MATCHED_LEVEL}" = "LEVEL_2_HUMAN_APPROVAL" ]; then
echo "PAUSED: Action '${ACTION_NAME}' requires human approval before execution."
echo "Prompting operator for sign-off..."
exit 1
else
echo "BLOCKED: Action '${ACTION_NAME}' is not on the allowlist."
echo "Policy Decision: Hard escalation to human on-call engineer."
exit 3
fi