#!/bin/bash # PostToolUse hook (Edit/Write/MultiEdit) — C9-2 일정·기한 표현 자동 감지·환기 # BurningTimes BT9 이식 (2026-04-24 NerdNavis 원본 반영 · PD 결정 5) # 원본: D:/NerdNavis/NerdNavisAi/scripts/c9_2_block.sh (NerdNavis 방안 8 · 2026-04-23 PD 직접 결정) # 목적: C9-2 헌법급 위반 패턴 차단 — "수일 내·N분 내·당일·이번 주·데드라인" 등 # 토큰 비용: 0 (키워드 grep만 수행 · 외부 시스템 호출 없음) # # 근거: BurningTimes C9-2 일정·기한 표현 금지 (SKILL.md 본문) # NerdNavis 조직 실증 사례 계승 — 자동 키워드 감지 환기 # LLM 자율 준수 한계 → 외부 키워드 스캔으로 진입점 강제 INPUT=$(cat 2>/dev/null) # Edit·Write·MultiEdit의 new_string·content 본문 추출 BODY=$(echo "$INPUT" | grep -oE '"(new_string|content)"[[:space:]]*:[[:space:]]*"[^"]*"' | head -3) [ -z "$BODY" ] && exit 0 # C9-2 금지 표현 키워드 카탈로그 (한국어 변형 포함) # 시간 단위 계획·기한 추정·리드타임 산정 표현 HIT_LIST="" # 그룹 1 — 주·월 단위 if echo "$BODY" | grep -qE '(이번[[:space:]]*주|다음[[:space:]]*주|이번[[:space:]]*달|다음[[:space:]]*달)'; then HIT_LIST="${HIT_LIST}이번주·다음주·이번달·다음달, " fi # 그룹 2 — 일 단위 기한 if echo "$BODY" | grep -qE '(당일|익일|수일[[:space:]]*내|수일[[:space:]]*안에)'; then HIT_LIST="${HIT_LIST}당일·익일·수일 내, " fi # 그룹 3 — 시간·분 단위 기한 (5분 타임아웃 같은 기술 표현 제외) if echo "$BODY" | grep -qE '([0-9]+[[:space:]]*시간[[:space:]]*내|[0-9]+[[:space:]]*분[[:space:]]*내|[0-9]+[[:space:]]*일[[:space:]]*내(에)?[[:space:]]*(완료|진행|착수|반영))'; then HIT_LIST="${HIT_LIST}N시간 내·N분 내·N일 내(기한), " fi # 그룹 4 — 일정·데드라인·마감 표현 if echo "$BODY" | grep -qE '(일정상|기한상|데드라인|마감일|마감시간|deadline)'; then HIT_LIST="${HIT_LIST}일정상·기한상·데드라인·마감, " fi # 그룹 5 — 기간 추정·리드타임 if echo "$BODY" | grep -qE '(리드타임|예상[[:space:]]*소요[[:space:]]*시간|예상[[:space:]]*[0-9]+[[:space:]]*(일|시간|주))'; then HIT_LIST="${HIT_LIST}리드타임·예상 소요 시간, " fi [ -z "$HIT_LIST" ] && exit 0 # C9-2 허용 예외 — 종속 관계·기술 타임아웃 표현은 제외 # (시간 표현이 있어도 "선행 작업 A 완료 후 착수"·"5분 타임아웃 설정" 같은 컨텍스트는 정상) # 자동 판별 불가 → 환기 메시지로 PM 자가 점검 요청 cat >&2 <