91 lines
3.9 KiB
Bash
91 lines
3.9 KiB
Bash
#!/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 <<EOF
|
|
|
|
⚠️ [BurningTimes C9-2 감지 — 일정 표현 사용 가능성]
|
|
|
|
감지 키워드: ${HIT_LIST%, }
|
|
|
|
C9-2 금지 표현 카탈로그:
|
|
- 이번 주·다음 주·이번 달·다음 달
|
|
- 당일·익일·수일 내
|
|
- N시간 내·N분 내·N일 내 (기한 의미)
|
|
- 일정상·기한상·데드라인·마감
|
|
- 기간 추정·리드타임 산정
|
|
|
|
C9-2 허용 대체 표현:
|
|
- "선행 작업 A 완료 후 착수" (종속 관계)
|
|
- "차단 요인 X 해소 시 착수" (차단 해제 조건)
|
|
- "PD님 승인 시 착수" (의사결정 대기)
|
|
- "현 시점 즉시 착수" (지시 수령 즉시 실행)
|
|
|
|
C9-2 허용 예외:
|
|
- 인간 작업자 포함 업무 (외부 아티스트·QA 등)
|
|
- PD님 명시 지시 "공수·일정을 고려하라"
|
|
- 순서·종속 서술 ("선행 A 완료 후 B 착수")
|
|
- 기술적 타임아웃 ("5분 타임아웃 설정")
|
|
|
|
⚠️ PM 자가 점검 의무:
|
|
본 키워드 매칭이 C9-2 위반인지 허용 예외인지 즉시 판별
|
|
위반 시 → 즉시 정정 + 자진 보고 (C3·C9-2 준수)
|
|
허용 예외 시 → 본 환기 무시 가능
|
|
|
|
근거: BurningTimes C9-2 (SKILL.md 본문) · NerdNavis 방안 8 이식 (2026-04-24 BT9)
|
|
한계: 키워드 매칭 정확도 (false positive 가능) · PM 자가 판별 의무
|
|
|
|
EOF
|
|
|
|
# PostToolUse는 차단 불가 (이미 실행 후) → exit 0 + stderr 환기만
|
|
exit 0
|