BurningTimesAi/scripts/hold_watch.sh

52 lines
1.9 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# UserPromptSubmit hook용 — HOLD·긴급 파일 변경 감지 경고
# 기획팀 Phase 3 HOLD 인지 실패 사례(2026-04-15)의 근본 방지
# C10-3 HOLD 충돌 처리 자동화
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
feat(BT·신설): 조직 신설 Phase 1 — git 저장소 교체 + 중앙 저장소 A안 분리 PD님 2026-04-21 직접 지시 5개 중 1·2·4 이행. ## 집행 내역 1. git remote: NerdNavisAi.git → BurningTimesAi.git 교체 (BT main + 본 worktree) - E:/NerdNavisAi 레포 원격은 원상 유지 (실측 확인) 2. 중앙 저장소 A안 분리: ~/.claude/burningtimes-{live,memory,audit}/ - nerdnavis-* 중앙 저장소에서 cp -r 복사 (원본 미변경) - .junction-marker 내용 BT로 갱신 3. 본 worktree .live junction 재연결 → burningtimes-live 4. audit junction 3종 신설: .burningtimes_{auditor_calls,warning_ignored,bypass_log} 5. scripts·setup 28파일 하드코딩 일괄 치환 (nerdnavis/NerdNavis/너드나비스/NERDNAVIS → burningtimes/BurningTimes/BURNINGTIMES) 6. paths.local.json.template BT 전용 재작성 (Unity·Framework 경로 __TBD__ placeholder) 7. .gitignore: .live.bak_*/ 패턴 추가 ## 보류 항목 (PD 재논의 예정) - 3. memory/org/ 내용 초기화 (PD 지시) - 5. Unity 프로젝트 경로 (PD 신규 경로 제공 전까지) - SKILL.md·CLAUDE.md 조직명 전환 및 P17·P29 처리 - 프로젝트/수상한잡화점/ 등 수상한잡화점 관련 일괄 정리 - 코어코드/NerdNavis.Framework/ → BT-프레임워크 이름 전환 - 공유/조직공지/ 너드나비스 맥락 공지 처리 - .claude/agents/*.md frontmatter skills 참조명 ## 감사 pm-auditor 사전 감사 통과 (Critical 0건, Major 2건 commit 전 정정 완료). 매니페스트: bt-org-split-phase1 (C35-9 PreToolUse 차단 해제). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:14:51 +00:00
THROTTLE_DIR="$HOME/.claude/.burningtimes_throttle"
mkdir -p "$THROTTLE_DIR" 2>/dev/null
HOLD_HASH_FILE="$THROTTLE_DIR/hold_files_hash"
# 현재 HOLD·긴급 파일 목록 수집 (자기 부서 + 소통 허브 inbox)
HOLD_FILES=$(find "$REPO_ROOT" -maxdepth 2 \( -name '🛑_*' -o -name '⚠_*' -o -name '🚨_*' \) 2>/dev/null | sort)
# 소통 허브 inbox의 HOLD·긴급 파일도 스캔 (타 부서 HOLD 양방향 전파)
CURRENT_DIR=$(pwd)
INBOX_DIRS=""
case "$CURRENT_DIR" in
*개발팀*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→개발팀 $REPO_ROOT/공유/소통/기획팀→개발팀" ;;
*기획팀*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→기획팀 $REPO_ROOT/공유/소통/개발팀→기획팀" ;;
*) INBOX_DIRS="$REPO_ROOT/공유/소통/개발팀→PM $REPO_ROOT/공유/소통/기획팀→PM" ;;
esac
for DIR in $INBOX_DIRS; do
if [ -d "$DIR" ]; then
INBOX_HOLD=$(find "$DIR" -maxdepth 1 \( -name '*HOLD*' -o -name '*긴급*' -o -name '*차단*' -o -name '*블로커*' \) 2>/dev/null | sort)
if [ -n "$INBOX_HOLD" ]; then
HOLD_FILES="$HOLD_FILES
$INBOX_HOLD"
fi
fi
done
HOLD_FILES=$(echo "$HOLD_FILES" | grep -v '^$' | sort)
if [ -z "$HOLD_FILES" ]; then
# HOLD 파일 없음 — 해시 초기화
echo "" > "$HOLD_HASH_FILE"
exit 0
fi
CURRENT_HASH=$(echo "$HOLD_FILES" | sha1sum 2>/dev/null | cut -d' ' -f1)
PREV_HASH=$(cat "$HOLD_HASH_FILE" 2>/dev/null)
if [ "$CURRENT_HASH" != "$PREV_HASH" ]; then
echo "🚨 [HOLD 감지] HOLD·긴급 파일 변경 발견:"
echo "$HOLD_FILES" | while read -r f; do
echo "$(basename "$f")"
done
echo "$CURRENT_HASH" > "$HOLD_HASH_FILE"
fi
exit 0