BurningTimesAi/scripts/session_end_audit.sh

75 lines
3.5 KiB
Bash

#!/bin/bash
# SessionEnd hook — 세션 종료 시 기록 누락 최종 감사
# 신설 근거: 2026-04-17 클라이언트팀 B-2-2 설계 + pm-auditor 메타 감사 A-3
# 관련 규칙: C29-4 업무 완료 후 동기화, P26 PM 업무 정확도 보장
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
TODAY=$(date +%Y-%m-%d)
ISSUES=""
# 1. 당일 커밋 존재 vs 당일 대화로그 존재 대조
# 2026-04-18 강화: 커밋 영향 프로젝트별 개별 점검 (PM 과도 보수 4회차 변종 재발 방지)
TODAY_COMMITS=$(git log --since="$TODAY 00:00" --oneline 2>/dev/null | wc -l | tr -d ' ')
if [ "$TODAY_COMMITS" -gt 0 ]; then
# 당일 커밋이 수정한 파일 영향 프로젝트 자동 판정
CHANGED_FILES=$(git log --since="$TODAY 00:00" --name-only --pretty="format:" 2>/dev/null | sort -u)
# 영역별 대화로그 필요 여부 판정
NEEDS_SUSANG=0 # EerieVillage
NEEDS_CORE=0 # 코어프레임워크
NEEDS_ORG=1 # 조직운영 (항상 필요 — 커밋 자체가 조직 활동)
if echo "$CHANGED_FILES" | grep -q "^프로젝트/EerieVillage/"; then
NEEDS_SUSANG=1
fi
if echo "$CHANGED_FILES" | grep -qE "^프로젝트/코어프레임워크/|^코어코드/"; then
NEEDS_CORE=1
fi
# 조직 룰(SKILL.md·C·P) 변경도 코어프레임워크 차기 활용 영향
if echo "$CHANGED_FILES" | grep -qE "^\.claude/skills/BurningTimes-코어룰/|^공유/인계서/"; then
NEEDS_CORE=1
fi
# 프로젝트별 대화로그 부재 개별 경고
if [ "$NEEDS_ORG" -eq 1 ] && [ ! -f "$REPO_ROOT/공유/대화로그/조직운영/$TODAY.md" ]; then
ISSUES="${ISSUES}- 당일 커밋 ${TODAY_COMMITS}건 존재하나 조직운영 대화로그 부재 (P24 필수)\n"
fi
if [ "$NEEDS_SUSANG" -eq 1 ] && [ ! -f "$REPO_ROOT/공유/대화로그/EerieVillage/$TODAY.md" ]; then
ISSUES="${ISSUES}- EerieVillage 프로젝트 파일 수정 커밋 있으나 EerieVillage 대화로그 부재 (P24 기록 대상 기준: 커밋이 프로젝트/ 하위 수정 시 필수)\n"
fi
if [ "$NEEDS_CORE" -eq 1 ] && [ ! -f "$REPO_ROOT/공유/대화로그/코어프레임워크/$TODAY.md" ]; then
ISSUES="${ISSUES}- 코어프레임워크 프로젝트 파일 또는 조직 룰 수정 커밋 있으나 코어프레임워크 대화로그 부재 (차기 프로젝트 참고 자산 영향)\n"
fi
fi
# 2. Live 더미 잔류 검증 (세션 공유 없이 세션 종료 시 경고)
LIVE_NON_EMPTY=$(find "$REPO_ROOT/.live" -type f -name "*.md" ! -name "README.md" -size +0 2>/dev/null | head -5)
if [ -n "$LIVE_NON_EMPTY" ]; then
ISSUES="${ISSUES}- .live/ 더미 파일 잔류: $(echo "$LIVE_NON_EMPTY" | wc -l | tr -d ' ')건. 세션 공유(P21-2) 또는 비우기 권고\n"
fi
# 3. 미커밋 변경사항 잔류
UNCOMMITTED=$(cd "$REPO_ROOT" && git status --short 2>/dev/null | wc -l | tr -d ' ')
if [ "$UNCOMMITTED" -gt 0 ]; then
ISSUES="${ISSUES}- 미커밋 변경사항 ${UNCOMMITTED}건 잔류. 커밋 또는 stash 권고\n"
fi
# 4. PD 지시 로그 경로 감사 실행
PATH_AUDIT=$(bash "$REPO_ROOT/scripts/verify_log_paths.sh" 2>&1)
if echo "$PATH_AUDIT" | grep -q "🚨"; then
ISSUES="${ISSUES}- PD 지시 로그 경로 부재 감지 (verify_log_paths.sh 결과)\n"
fi
if [ -n "$ISSUES" ]; then
echo ""
echo "🔍 [SessionEnd 감사] 기록 누락·동기화 미완료 감지:"
echo -e "$ISSUES"
echo "→ pm-auditor 모드 B (세션 말미 주기 감사) 호출 권고"
echo "→ 다음 세션 시작 시 자동 감지되나 본 세션에서 선제 처리 가능"
fi
exit 0