chore(잔존 정리 + Phase 5 운영 측정 SOT): §6-D·§6-E 정리 + 운영 메트릭 4종 SOT 신설

PD 결정 "1, 3 작업 진행" 후속.

## 작업 1 — Phase 5 운영 측정 SOT 신설

memory/skill_measurement_sot.md
- 메트릭 4종 정의 (세션당 시작 토큰·헌법급 위반·FP율·FN율)
- 베이스라인 데이터 (분할 전 SKILL.md 3043줄/190KB → 분할 후 ~250줄/15KB, -91.8%)
- 분기별 review 사이클 + 임계 위반 시 대응 절차
- 자동화 보강 영역 (운영 데이터 1분기 누적 후 점진)

## 작업 3 — 인수인계서 §6 잔존 정리

§6-D nerdnavis 키워드 백업 파일 5종 git rm:
- audit_pattern_analyzer.sh.bak_20260420_1348
- auditor_call_log.sh.bak_20260420_1113·.bak_20260420_1348.2
- auditor_guard.sh.bak_20260420_1348
- pm_context_restore.sh.bak_20260420_1112

§6-E sync_audit 2종 git rm (C34 폐기 후속):
- sync_audit_central_to_repo.sh
- sync_audit_repo_to_central.sh

## 잔존

§6-A stupefied-spence-727cd7 worktree: 다른 프로세스 점유 잔존 (STILL LOCKED). 본 PC 재기동 후 정리 가능 — 별건 후순위.

근거: PD 결정 "1, 3 작업부터 진행"
This commit is contained in:
깃 관리자 2026-05-07 10:47:10 +09:00
parent 18fc680f14
commit d3968e92cb
8 changed files with 144 additions and 380 deletions

View File

@ -0,0 +1,144 @@
# SKILL 동적 로딩 운영 측정 SOT (Phase 5)
> **신설 일자**: 2026-05-07
> **근거**: 2026-05-07 SKILL 동적 로딩 분할 정식 도입 (commit `18fc680`)
> **목적**: 분할 도입 후 토큰 절감률·매칭 정확도·헌법급 위반 발생 빈도 점진 측정
> **운영 영역**: PM 분기별 review + 운영자 수동 수집 + 자동화 가능 영역 점진 보강
---
## 1. 측정 메트릭 4종
| # | 메트릭 | 측정 방식 | 목표 | 임계 알림 |
|---|--------|----------|------|---------|
| **M1** | 세션당 시작 토큰 | log 분석 (수동·자동 보강) | < 15K ( 60K 대비 75% 절감) | > 25K 시 경고 |
| **M2** | SKILL 활성화 정확도 | 헌법급 위반 사례 / 전체 작업 | < 1% ( 분석) | 1건/ review |
| **M3** | 트리거 매칭 정밀도 (False Positive율) | 불필요 SKILL 활성 / 활성 총수 | < 10% | > 20% 시 description 튜닝 |
| **M4** | False Negative율 | 활성 필요했는데 비활성 / 활성 필요 시나리오 | < 10% | > 5% 시 description 보강 |
---
## 2. 측정 데이터 누적 위치
### 2-A. 본 SOT (`memory/skill_measurement_sot.md`)
- 메트릭 정의 + 분기별 review 결과 누적
- 운영자 수동 기입
### 2-B. 자동 수집 영역 (운영 후 점진 보강)
- `scripts/skill_trigger_audit.sh` (PostToolUse) — false negative 신호 수집
- `scripts/c35_obligation_check.sh` (PostToolUse) — 의무 호출 누락 신호 수집
- 신호 누적 위치: `$HOME/.claude/.skill_metrics/` (PC 로컬, 휘발성)
---
## 3. 베이스라인 데이터 (2026-05-07 분할 도입 시점)
### 3-A. SKILL.md 본문 분량
| 시점 | 본문 줄 수 | 본문 KB | 추정 토큰 |
|------|---------|--------|---------|
| 분할 전 (`SKILL.md.bak_20260507_0930.md`) | 3,043줄 | 190KB | ~50-60K |
| **분할 후 (현 시점)** | **~250줄** | **~15KB** | **~10-15K** |
| 감축률 | -91.8% | -92.1% | **-75% 추정** |
### 3-B. SKILL 카탈로그 (11종 + 정식 SOT 1종 = 12종 등록)
| SKILL | 분량 추정 | 항시 주입 대상 |
|-------|---------|------------|
| `bt-foundation` (L1 헌법급) | ~10K | 14 agent 모두 |
| `bt-index` (메타) | ~3K | 14 agent 모두 |
| `bt-commit-rules` | ~5K | 동적 (commit 작업 시) |
| `bt-task-delegation` | ~7K | 동적 (Task 위임 시) |
| `bt-data-protection` | ~5K | 동적 + balance-designer 항시 |
| `bt-session-mgmt` | ~7K | 동적 (세션 갱신·공유 시) |
| `bt-pd-tracking` | ~5K | 동적 (PD 지시 트래킹 시) |
| `bt-document-mgmt` | ~5K | 동적 (문서·규칙 변경 시) |
| `bt-c50-token-policy` | ~3K | 동적 (큰 작업 시) |
| `bt-archive-mgmt` | ~3K | 동적 (폐기·아카이브 시) |
| `bt-planning-fun` | ~3K | 기획팀 항시 |
| `BurningTimes-코어룰` (인덱스 SOT) | ~10K | 동적 (코어룰 인덱스 조회 시) |
---
## 4. 분기별 Review 사이클
### 4-A. Review 시점 트리거
- **분기 1회 (3개월마다)** PM 자체 review
- **임계 초과 발견 즉시** PM 자체 review (M2 ≥ 1건·M3 > 20%·M4 > 5%)
### 4-B. Review 출력 항목
1. 분기별 메트릭 4종 측정값
2. 임계 위반 영역 식별
3. description 키워드 튜닝 필요 SKILL 식별
4. 헌법급 위반 사례 분석 (있다면)
5. 다음 분기 개선 안건
### 4-C. Review 결과 본 SOT 누적
```markdown
## YYYY-Q# Review (YYYY-MM-DD)
- M1 평균: __K
- M2 위반 건수: __건
- M3 평균: __%
- M4 평균: __%
- 임계 초과: ____
- 튜닝 안건: ____
- 다음 분기 개선: ____
```
---
## 5. 자동화 보강 영역 (운영 후 점진)
### 5-A. 측정 자동화 후보
| 메트릭 | 자동화 가능성 | 구현 방법 |
|--------|----------|---------|
| M1 | 중간 | Claude Code log 파싱 (외부 도구 의존) |
| M2 | 낮음 | LLM 자가 보고 신뢰 영역 (수동 review 우선) |
| M3 | 중간 | `skill_trigger_audit.sh` 누적 신호 분석 |
| M4 | 중간 | `c35_obligation_check.sh` 의무 호출 누락 신호 |
### 5-B. 신설 가능 자동화 스크립트
- `scripts/skill_metrics_collect.sh` (SessionEnd hook 후보) — 세션 종료 시 측정 데이터 자동 수집
- `scripts/skill_metrics_report.sh` (분기별 수동 실행) — 본 SOT 자동 갱신
위 스크립트는 **운영 데이터 1분기 누적 후 신설** 권고. 즉시 신설은 측정 대상 부재로 효과 X.
---
## 6. 임계 위반 시 대응 절차
### 6-A. M2 헌법급 위반 발생 (≥ 1건)
1. 즉시 PM 자진 보고 (C3·C5 정합)
2. 위반 발생 SKILL 영역 식별
3. description 키워드 보강 또는 hook 차단 강화
4. 본 SOT에 사례 누적 (영구 자산)
### 6-B. M3 False Positive율 > 20%
1. 활성 빈도 높은 SKILL description 키워드 분석
2. 광범위 매칭 키워드 한정·축소
3. 분기별 안건 상신 (PD review)
### 6-C. M4 False Negative율 > 5%
1. 누락 영역 키워드 분석 (`skill_trigger_audit.sh` 신호)
2. 해당 SKILL description 키워드 보강
3. hook 안전망 강화 (필요 시)
---
## 7. 연관 자산
- **분할 설계 v1**: `공유/조직공지/2026-05-07_SKILL_동적로딩_분할_설계_v1.md`
- **PoC Phase 2 결과**: `memory/poc_skill_phase2_results.md`
- **이전 본문 백업**: `.claude/skills/BurningTimes-코어룰/SKILL.md.bak_20260507_0930.md`
- **Hook 운영**: `scripts/skill_trigger_audit.sh`·`c35_obligation_check.sh`·`hardboiled_empathy_check.sh`·`proactive_inference_check.sh`
- **신설 SKILL 11종**: `.claude/skills/bt-*/SKILL.md`
---
## 8. 변경 이력
| 일시 | 변경 |
|------|------|
| 2026-05-07 | **v1 신설** — Phase 5 운영 측정 SOT 정식 시작 (분할 도입 직후 베이스라인 + 분기별 review 사이클) |

View File

@ -1,87 +0,0 @@
#!/bin/bash
# SessionStart hook + 수동 실행 (인자 `report`)
# C35-10 장기 행동 패턴 분석·개선 사이클
# 2026-04-19 신설 — PD님 직접 지시 "장기적 문제 행동 패턴 분석 + 점진적 개선"
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
CALL_DIR="$HOME/.claude/.nerdnavis_auditor_calls"
WARN_DIR="$HOME/.claude/.nerdnavis_warning_ignored"
BYPASS_DIR="$HOME/.claude/.nerdnavis_bypass_log"
# 미해소 경고 건수 집계 (UNRESOLVED - RESOLVED)
UNRESOLVED_NET=0
if [ -d "$WARN_DIR" ]; then
for f in "$WARN_DIR"/*.log; do
[ -f "$f" ] || continue
U=$(grep -c "UNRESOLVED" "$f" 2>/dev/null || echo 0)
R=$(grep -c "RESOLVED" "$f" 2>/dev/null || echo 0)
UNRESOLVED_NET=$((UNRESOLVED_NET + U - R))
done
fi
# 세션 시작 시 미해소 경고 있으면 PD님 환기 출력 (stdout — 세션 컨텍스트 주입)
if [ "$UNRESOLVED_NET" -gt 0 ]; then
echo "🚨 [C35 경고 무시 사례] 미해소 $UNRESOLVED_NET 건 — PD님 우선 보고 대상 (감사 자산 축적)"
echo " 상세: $WARN_DIR/"
echo " PM 후속 조치: 경고 대상 review + pm-auditor 호출 or 사유를 memory/org/feedback_pm_warning_ignored_pattern.md에 기록"
fi
# 월별 패턴 분석 보고서 (월 1일 자동 or 수동 `report` 인자)
MONTH=$(date +%Y_%m)
REPORT="$REPO_ROOT/memory/org/audit_pattern_analysis_${MONTH}.md"
TRIGGER="${1:-auto}"
if [ "$TRIGGER" = "report" ] || { [ "$(date +%d)" = "01" ] && [ ! -f "$REPORT" ]; }; then
{
echo "---"
echo "name: 감사 패턴 월별 분석 ${MONTH/_/-}"
echo "description: pm-auditor 호출·경고 무시·BYPASS 우회 이력 누적 분석. 장기 행동 패턴 기록 + 개선 안건 식별 (C35-10)"
echo "type: audit_pattern"
echo "period: ${MONTH/_/-}"
echo "---"
echo ""
echo "# 감사 패턴 분석 — ${MONTH/_/-}"
echo ""
echo "## pm-auditor 호출 빈도"
if [ -d "$CALL_DIR" ]; then
TOTAL_CALLS=0
for f in "$CALL_DIR"/*.log; do
[ -f "$f" ] || continue
C=$(grep -c "pm-auditor called" "$f" 2>/dev/null || echo 0)
TOTAL_CALLS=$((TOTAL_CALLS + C))
done
echo "- 누적 호출 건수: $TOTAL_CALLS"
fi
echo ""
echo "## 경고 무시 사례 (UNRESOLVED)"
echo "- 미해소 순수 건수: $UNRESOLVED_NET"
if [ -d "$WARN_DIR" ]; then
echo ""
echo "### 최근 UNRESOLVED 샘플 (최대 20건)"
grep "UNRESOLVED" "$WARN_DIR"/*.log 2>/dev/null | head -20
fi
echo ""
echo "## BYPASS 우회 이력"
if [ -d "$BYPASS_DIR" ]; then
BYPASS_COUNT=0
for f in "$BYPASS_DIR"/*.log; do
[ -f "$f" ] || continue
B=$(wc -l < "$f" 2>/dev/null || echo 0)
BYPASS_COUNT=$((BYPASS_COUNT + B))
done
echo "- 누적 우회 건수: $BYPASS_COUNT"
fi
echo ""
echo "## 개선 안건 (PM 수동 기입)"
echo "- (분석 로직 추가 확장 필요 — PM review 후 규칙 개정·감사 체크 강화 안건화)"
echo ""
echo "## 연관"
echo "- C35-9 hook 3층 구조 · C35-10 경고 무시 PD 보고·장기 패턴 분석"
echo "- \`memory/org/feedback_pm_warning_ignored_pattern.md\` (누적 SOT)"
} > "$REPORT"
echo "📊 [감사 패턴] 월별 분석 보고서 생성: $REPORT"
fi
exit 0

View File

@ -1,33 +0,0 @@
#!/bin/bash
# PostToolUse hook (matcher: Task) — pm-auditor Task 호출 자동 기록
# C35-9 Layer 2: 감사관 호출 이력 자동 축적 + 경고 무시 사례 해소 처리
# 2026-04-19 신설 — PD님 직접 지시 "경고 무시 사례 발견 시 PD 우선 보고 + 감사 자산 축적"
# 관련: C35-9 hook 3층 구조 · C35-10 경고 무시 PD 보고 + 장기 패턴 분석
INPUT=$(cat 2>/dev/null)
# subagent_type이 pm-auditor인 경우만 기록
if ! echo "$INPUT" | grep -q '"subagent_type"[[:space:]]*:[[:space:]]*"pm-auditor"'; then
exit 0
fi
LOG_DIR="$HOME/.claude/.nerdnavis_auditor_calls"
mkdir -p "$LOG_DIR" 2>/dev/null
# 일자별 로그 파일에 호출 시각 기록
LOG_FILE="$LOG_DIR/$(date +%Y-%m-%d).log"
echo "$(date +%Y-%m-%d_%H:%M:%S) pm-auditor called" >> "$LOG_FILE"
# 경고 무시 사례 해소 처리 — 기존 UNRESOLVED 로그에 RESOLVED 마커 append
WARNING_DIR="$HOME/.claude/.nerdnavis_warning_ignored"
if [ -d "$WARNING_DIR" ]; then
for wf in "$WARNING_DIR"/*.log; do
[ -f "$wf" ] || continue
# 해당 파일에 UNRESOLVED 있고 아직 RESOLVED 미완료이면 해소 처리
if grep -q "UNRESOLVED" "$wf" 2>/dev/null && ! tail -1 "$wf" | grep -q "RESOLVED"; then
echo "$(date +%Y-%m-%d_%H:%M:%S) RESOLVED by pm-auditor call" >> "$wf"
fi
done
fi
exit 0

View File

@ -1,34 +0,0 @@
#!/bin/bash
# PostToolUse hook (matcher: Task) — pm-auditor Task 호출 자동 기록
# C35-9 Layer 2: 감사관 호출 이력 자동 축적 + 경고 무시 사례 해소 처리
# 2026-04-19 신설 — PD님 직접 지시 "경고 무시 사례 발견 시 PD 우선 보고 + 감사 자산 축적"
# 관련: C35-9 hook 3층 구조 · C35-10 경고 무시 PD 보고 + 장기 패턴 분석
INPUT=$(cat 2>/dev/null)
# subagent_type이 pm-auditor인 경우만 기록
if ! echo "$INPUT" | grep -q '"subagent_type"[[:space:]]*:[[:space:]]*"pm-auditor"'; then
exit 0
fi
LOG_DIR="$HOME/.claude/.nerdnavis_auditor_calls"
mkdir -p "$LOG_DIR" 2>/dev/null
# 일자별 로그 파일에 호출 시각 기록
LOG_FILE="$LOG_DIR/$(date +%Y-%m-%d).log"
echo "$(date +%Y-%m-%d_%H:%M:%S) pm-auditor called" >> "$LOG_FILE"
# 경고 무시 사례 해소 처리 — 기존 UNRESOLVED 로그에 RESOLVED 마커 append
WARNING_DIR="$HOME/.claude/.nerdnavis_warning_ignored"
if [ -d "$WARNING_DIR" ]; then
for wf in "$WARNING_DIR"/*.log; do
[ -f "$wf" ] || continue
# 해당 파일에 UNRESOLVED 있고 아직 RESOLVED 미완료이면 해소 처리
# 2026-04-20 #48 A 집행: grep -qw 로 word boundary 적용 (기존 grep -q "RESOLVED"는 UN**RESOLVED** 부분문자열 매칭되어 항상 true → append 실패 결함)
if grep -q "UNRESOLVED" "$wf" 2>/dev/null && ! tail -1 "$wf" | grep -qw "RESOLVED"; then
echo "$(date +%Y-%m-%d_%H:%M:%S) RESOLVED by pm-auditor call" >> "$wf"
fi
done
fi
exit 0

View File

@ -1,68 +0,0 @@
#!/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 경계 보호
# 우회 검사 (2026-04-19 옵션 A: 파일 기반 BYPASS 우선, 환경변수 fallback)
# 근거: Claude Code tool_use hook 실행 환경에서 PM이 명령 prefix로 설정한 환경변수가
# 전달되지 않는 것이 실증됨 (2026-04-19 본 세션 11차 commit 실패 사례)
BYPASS_FLAG_FILE="$HOME/.claude/.nerdnavis_bypass_active"
BYPASS_REASON_FILE="$HOME/.claude/.nerdnavis_bypass_reason"
# 1. 파일 기반 BYPASS (권장)
if [ -f "$BYPASS_FLAG_FILE" ]; then
BYPASS_DIR="$HOME/.claude/.nerdnavis_bypass_log"
mkdir -p "$BYPASS_DIR" 2>/dev/null
BYPASS_LOG="$BYPASS_DIR/$(date +%Y-%m-%d).log"
REASON="(사유 미기록)"
[ -f "$BYPASS_REASON_FILE" ] && REASON=$(cat "$BYPASS_REASON_FILE" 2>/dev/null | head -c 500 | tr -d '\n')
echo "$(date +%Y-%m-%d_%H:%M:%S) BYPASS (file) reason=$REASON" >> "$BYPASS_LOG"
exit 0
fi
# 2. 환경변수 기반 BYPASS (fallback, Claude Code hook에 전달되는 경우만 작동)
if [ "${NERDNAVIS_AUDITOR_BYPASS:-0}" = "1" ]; then
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 (env, may not trigger) 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

View File

@ -1,69 +0,0 @@
#!/bin/bash
# SessionStart hook — PM 자기 업무 맥락 복원
# 신설 근거: 2026-04-17 C29 위반 사건 (이전 세션 PM 업무 파악 실패)
# 관련 규칙: P21-5B, P24 읽기 의무, C31 자기검증
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
LOG_ROOT="$REPO_ROOT/공유/대화로그"
[ ! -d "$LOG_ROOT" ] && exit 0
TODAY=$(date +%Y-%m-%d)
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d 2>/dev/null || date -v-1d +%Y-%m-%d 2>/dev/null)
echo ""
echo "🧠 [PM 맥락 복원] 최근 2일 대화로그 자동 스캔"
# 당일 로그 부재 감지 (P24 위반 플래그)
MISSING_TODAY=0
for PROJ in "$LOG_ROOT"/*/; do
PROJ_NAME=$(basename "$PROJ")
[ "$PROJ_NAME" = "INDEX.md" ] && continue
if [ -d "$PROJ" ]; then
TODAY_LOG="$PROJ$TODAY.md"
if [ ! -f "$TODAY_LOG" ]; then
# 당일 작업이 있는데 로그 없으면 경고 (git log로 당일 커밋 확인)
TODAY_COMMITS=$(git log --since="$TODAY 00:00" --oneline 2>/dev/null | wc -l | tr -d ' ')
if [ "$TODAY_COMMITS" -gt "0" ]; then
if [ "$MISSING_TODAY" -eq "0" ]; then
echo "⚠️ P24 위반 감지 — 당일 대화로그 미작성:"
MISSING_TODAY=1
fi
echo " - $PROJ_NAME/$TODAY.md (당일 커밋 ${TODAY_COMMITS}건 존재)"
fi
fi
fi
done
# 최근 2일 로그 목록 출력
echo ""
echo "📚 최근 2일 대화로그 (Read 권장):"
FOUND=0
for PROJ in "$LOG_ROOT"/*/; do
PROJ_NAME=$(basename "$PROJ")
[ "$PROJ_NAME" = "INDEX.md" ] && continue
if [ -d "$PROJ" ]; then
for DATE in "$TODAY" "$YESTERDAY"; do
LOG_FILE="$PROJ$DATE.md"
if [ -f "$LOG_FILE" ]; then
SIZE=$(wc -c < "$LOG_FILE" 2>/dev/null | tr -d ' ')
echo " - 공유/대화로그/$PROJ_NAME/$DATE.md (${SIZE}B)"
FOUND=1
fi
done
fi
done
[ "$FOUND" -eq "0" ] && echo " (최근 2일 로그 없음)"
# PM 자기 커밋 최근 10건 (맥락 복원 보조)
echo ""
echo "📝 최근 커밋 10건 (PM 자기 업무 맥락):"
git log --oneline -10 2>/dev/null | sed 's/^/ /'
echo ""
echo "→ P21-5B 수행: 위 대화로그를 Read하여 이전 세션 결정·방향 복원"
echo "→ C31 자기검증: 응답 발신 직전 C27~C30 준수 여부 확인 의무"
exit 0

View File

@ -1,41 +0,0 @@
#!/bin/bash
# post-commit hook — 중앙 audit 로그를 레포 memory/org/audit_logs/{hostname}/ 로 sync
# 2026-04-20 #48 G 집행 신설. C34-17 sync 4계층 중 "중앙 → 레포" 방향
# 레포 mtime 보호 (D안 패턴 준용, C34-16 조항 6)
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
CENTRAL_AUDIT="$HOME/.claude/burningtimes-audit"
[ ! -d "$CENTRAL_AUDIT" ] && exit 0
HOSTNAME_TAG=$(hostname 2>/dev/null | tr -d '[:space:]' | tr -cd '[:alnum:]-_' | head -c 32)
[ -z "$HOSTNAME_TAG" ] && HOSTNAME_TAG="unknown"
REPO_AUDIT="$REPO_ROOT/memory/org/audit_logs/$HOSTNAME_TAG"
mkdir -p "$REPO_AUDIT" 2>/dev/null
SUBDIRS=("auditor_calls" "warning_ignored" "bypass_log")
for SUB in "${SUBDIRS[@]}"; do
CENTRAL_SUB="$CENTRAL_AUDIT/$SUB"
[ ! -d "$CENTRAL_SUB" ] && continue
REPO_SUB="$REPO_AUDIT/$SUB"
mkdir -p "$REPO_SUB" 2>/dev/null
for f in "$CENTRAL_SUB"/*.log; do
[ -f "$f" ] || continue
BASENAME=$(basename "$f")
[ "$BASENAME" = ".junction-marker" ] && continue
REPO_FILE="$REPO_SUB/$BASENAME"
# 레포 mtime 보호: 레포가 중앙보다 최신이면 스킵
if [ -f "$REPO_FILE" ] && [ "$REPO_FILE" -nt "$f" ]; then
echo "⚠️ [Audit Sync→Repo] 레포 최신 — 덮어쓰기 스킵: $SUB/$BASENAME" >&2
continue
fi
cp "$f" "$REPO_FILE" 2>/dev/null
done
done
exit 0

View File

@ -1,48 +0,0 @@
#!/bin/bash
# SessionStart hook — 레포 memory/org/audit_logs/ 를 중앙으로 sync (git pull 직후 최신화)
# 2026-04-20 #48 G 집행 신설. C34-17 sync 4계층 중 "레포 → 중앙" 방향
# 각 PC hostname 폴더만 자기 PC 로그이고 그 외는 다른 PC 로그 (PC 간 공유)
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
REPO_AUDIT="$REPO_ROOT/memory/org/audit_logs"
[ ! -d "$REPO_AUDIT" ] && exit 0
CENTRAL_AUDIT="$HOME/.claude/burningtimes-audit"
[ ! -d "$CENTRAL_AUDIT" ] && exit 0
HOSTNAME_TAG=$(hostname 2>/dev/null | tr -d '[:space:]' | tr -cd '[:alnum:]-_' | head -c 32)
[ -z "$HOSTNAME_TAG" ] && HOSTNAME_TAG="unknown"
SUBDIRS=("auditor_calls" "warning_ignored" "bypass_log")
# 자기 PC hostname 폴더: 레포 → 중앙 (unflushed 중앙 변경 대피 후 레포본 복원)
SELF_DIR="$REPO_AUDIT/$HOSTNAME_TAG"
if [ -d "$SELF_DIR" ]; then
for SUB in "${SUBDIRS[@]}"; do
CENTRAL_SUB="$CENTRAL_AUDIT/$SUB"
REPO_SUB="$SELF_DIR/$SUB"
[ ! -d "$REPO_SUB" ] && continue
mkdir -p "$CENTRAL_SUB" 2>/dev/null
for f in "$REPO_SUB"/*.log; do
[ -f "$f" ] || continue
BASENAME=$(basename "$f")
CENTRAL_FILE="$CENTRAL_SUB/$BASENAME"
# unflushed 중앙 대피: 중앙이 레포보다 최신이고 레포 HEAD 커밋 미반영이면 대피
if [ -f "$CENTRAL_FILE" ] && [ "$CENTRAL_FILE" -nt "$f" ]; then
if ! git -C "$REPO_ROOT" log --oneline HEAD -- "memory/org/audit_logs/$HOSTNAME_TAG/$SUB/$BASENAME" 2>/dev/null | grep -q .; then
CONFLICT="$CENTRAL_AUDIT.conflict-$(date +%Y%m%d_%H%M%S)"
mkdir -p "$CONFLICT/$SUB" 2>/dev/null
cp "$CENTRAL_FILE" "$CONFLICT/$SUB/$BASENAME" 2>/dev/null
echo "⚠️ [Audit Sync Repo→Central] 중앙 unflushed 대피: $CONFLICT/$SUB/$BASENAME" >&2
fi
fi
cp "$f" "$CENTRAL_FILE" 2>/dev/null
done
done
fi
exit 0