BurningTimesAi/scripts/auditor_guard.sh

53 lines
2.2 KiB
Bash

#!/bin/bash
# PostToolUse hook (matcher: Edit|Write|MultiEdit|Bash) — 의무 영역 tool_use 시 호출 기록 검사
# C35-9 Layer 3: 의무 호출 누락 즉시 경고 + 무시 사례 UNRESOLVED 로그
# 2026-04-19 신설 — PD님 직접 지시 옵션 A (경고 모드)
# 관련: C35 의무 참여 체계 · C35-10 무시 사례 PD 보고 · C34-11 Agent 경계 보호
# 우회 환경변수 (C35-3 "PD 긴급 단발 지시" 준용)
if [ "${NERDNAVIS_AUDITOR_BYPASS:-0}" = "1" ]; then
# C35-10 Improvement: 우회 사유 기록 (환경변수 NERDNAVIS_AUDITOR_BYPASS_REASON)
BYPASS_DIR="$HOME/.claude/.nerdnavis_bypass_log"
mkdir -p "$BYPASS_DIR" 2>/dev/null
BYPASS_LOG="$BYPASS_DIR/$(date +%Y-%m-%d).log"
REASON="${NERDNAVIS_AUDITOR_BYPASS_REASON:-(사유 미기록)}"
echo "$(date +%Y-%m-%d_%H:%M:%S) BYPASS reason=$REASON" >> "$BYPASS_LOG"
exit 0
fi
INPUT=$(cat 2>/dev/null)
# 의무 영역 식별
TARGET=""
if echo "$INPUT" | grep -qE '"file_path"[[:space:]]*:[[:space:]]*"[^"]*(SKILL\.md|memory/org/feedback|조직공지|PD_지시_트래킹)[^"]*"'; then
TARGET="의무 영역 파일 수정"
elif echo "$INPUT" | grep -qE '"command"[[:space:]]*:[[:space:]]*"[^"]*git[[:space:]]+(commit|push)'; then
TARGET="git commit/push"
fi
[ -z "$TARGET" ] && exit 0
# 최근 30분 내 pm-auditor 호출 기록 검사
LOG_DIR="$HOME/.claude/.nerdnavis_auditor_calls"
RECENT_CALL=0
if [ -d "$LOG_DIR" ]; then
if find "$LOG_DIR" -type f -mmin -30 2>/dev/null | head -1 | grep -q .; then
RECENT_CALL=1
fi
fi
[ "$RECENT_CALL" -eq 1 ] && exit 0
# 경고 출력 (stderr)
echo "⚠️ [C35 경고] $TARGET — 최근 30분 내 pm-auditor 호출 기록 없음" >&2
echo " C35-1 의무 호출 대상일 수 있음. 응답 발신 전 pm-auditor Task 호출 권장" >&2
echo " 긴급 단발 지시면 export NERDNAVIS_AUDITOR_BYPASS=1 + NERDNAVIS_AUDITOR_BYPASS_REASON='사유' (C35-3·C35-10)" >&2
# UNRESOLVED 로그 기록 (이후 pm-auditor 호출되면 auditor_call_log.sh가 RESOLVED 마커 append)
WARNING_DIR="$HOME/.claude/.nerdnavis_warning_ignored"
mkdir -p "$WARNING_DIR" 2>/dev/null
WARNING_LOG="$WARNING_DIR/$(date +%Y-%m-%d).log"
echo "$(date +%Y-%m-%d_%H:%M:%S) UNRESOLVED target=$TARGET" >> "$WARNING_LOG"
exit 0