BurningTimesAi/scripts/verify_references.sh

69 lines
3.0 KiB
Bash
Raw Normal View History

fix(process): 세션 전환 복원 체계 근본 강화 - 3중 방어 (PD님 조직 생명급 재지시) ## 심층 원인 분석 결과 - Layer 1 (직접): Inbox 이동 시 PD 지시 로그 경로 컬럼 갱신을 별도 수동 수행 → 누락 쉬움 - Layer 2 (구조): 파일 이동(git mv)과 참조 갱신이 독립 트랜잭션 - Layer 3 (전수): 활성 운영 문서 4건에서 추가 부재 경로 발견 (개발팀 1건·기획팀 3건) ## 즉시 시정 (추가 4건 경로 정정) - 개발팀 #26: 2026-04-16_코어코드_git통합_점검 → 공유/소통/완료/ - 기획팀 #27: 2026-04-16_유니티프로젝트_점검_기획팀 → 공유/소통/완료/ - 기획팀 #26: 2026-04-16_하이브리드구조_기획팀의견 → 공유/소통/완료/하이브리드구조_기획실의견 (구 명칭 파일명 보존) - 기획팀 #25: 2026-04-16_프로세스고도화_개선안_기획팀 → 공유/소통/완료/프로세스고도화_개선안_기획실 - verify_log_paths: 18건 전수 실존 확인 (재검증 통과) ## 구조적 3중 방어 장치 신설·편입 1. **예방 — scripts/archive_inbox.sh 신설**: Inbox 파일 이동 + PD 지시 로그 경로 자동 정정 + verify 검증을 단일 트랜잭션으로 수행. 수동 git mv/sed 금지 2. **감지 1 — SessionStart hook에 verify_log_paths.sh 편입 (기존)**: PD 지시 로그 부재 경로 세션 시작 시 자동 경고 3. **감지 2 — scripts/verify_references.sh 신설 + SessionEnd hook 편입**: 활성 운영 영역(PD 지시 로그·Inbox·조직공지) 참조 무결성 감사. 역사 기록(완료/·대화로그·과거 조직공지)·placeholder·예정 산출물은 명시적 제외 ## 노하우 축적 - memory/feedback_inbox_archive_path_sync.md 확장: 3중 방어 구조·역사 보존 원칙 영구 기록 - "역사 기록 vs 활성 참조" 구분 원칙 확립: 대화로그·완료 아카이브는 작성 당시 경로 보존, 사후 정정하지 않음 ## 세션 전환 복원 보장 검증 - PD 지시 로그 활성 18건 전수 실존 ✅ - 활성 운영 참조 무결성 0건 ✅ - 원격 main = 로컬 HEAD ✅ - SessionStart·SessionEnd hook 8종 정상 등록 ✅ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 08:40:37 +00:00
#!/usr/bin/env bash
# verify_references.sh — 활성 운영 문서의 참조 경로 무결성 감사
# 감사 대상 (활성 운영):
# - 공유/PD_지시_트래킹/*.md
# - 공유/소통/*→PM/*.md, */PM→*/*.md (완료/ 제외)
# - 공유/조직공지/*.md (2026-04-17 이후만)
# 제외 (역사 기록·완료 아카이브·Placeholder·Glob):
# - 공유/소통/완료/, 공유/대화로그/
# - YYYY-MM-DD·{·}·$()·괄호··(한글 중점)
# - 폐기된 용어: 일일보고/, 공통_업무_규칙, .claude/live/, 개발실/기획실
set -u
cd "$(dirname "$0")/.."
scan_dirs=(
"공유/PD_지시_트래킹"
"공유/조직공지"
)
# 소통 허브는 완료/ 제외하고 활성 inbox만
inbox_dirs=(
"공유/소통/개발팀→PM"
"공유/소통/기획팀→PM"
"공유/소통/PM→개발팀"
"공유/소통/PM→기획팀"
"공유/소통/개발팀→기획팀"
"공유/소통/기획팀→개발팀"
"공유/소통/pm-auditor→PM"
"공유/소통/dev-auditor→PM"
"공유/소통/plan-auditor→PM"
)
feat(BT·Phase2C): 수상한잡화점 삭제 + feedback 추상화 + 아카이브 재압축 + 조직 전환 완결 PD님 2026-04-21 결정 1~5 집행. ## 결정 1·P17 완전 폐기 - SKILL.md P17 섹션 완전 삭제 - 폐기_규칙_아카이브.md에 6필드 기록 - CLAUDE.md 요약 P17 1줄 제거 ## 결정 2·P29 EerieVillage용 재작성 - P29-3 "현 프로젝트(수상한 잡화점) 활용 방침" → "EerieVillage 활용 방침" B안 - Tier 1 16종 중 플랫포머 유효 항목 선별 가이드 - 2D 플랫포머 특화 컴포넌트 Tier 2 신규 검토 ## 결정 3·조직공지 필터링 (팀장급 논의) - 개발팀장·기획팀장 Task 병렬 논의 수행 - 두 팀 모두 삭제 합의 10건 삭제 (OI-2·OI-5·Phase3 NAS·GIT v2 결재·초안·임시 안건·세션 이어받기·v1 체크리스트·bak 등) - 규칙 진화사 공지 18건 + 폐기/방향전환 아카이브 + v2 체크리스트 보존 ## 결정 4·feedback 단순 치환 - memory/org/ 6개 파일 "수상한잡화점" → "이전 프로젝트" sed ## 결정 5·분량 초과 4건 재압축 - 기획팀장: 12,359자 → 7,911자 (36% 감축) - balance-designer: 5,500자 → 4,448자 - 개발팀장: 11,800자 → 6,978자 (41% 감축) - 클라이언트팀장: 6,609자 → 6,077자 - 모두 목표 범위 달성 ## 삭제 실측 - 프로젝트/수상한잡화점/ (41파일) · 신규 프로젝트/ · 02_수상한잡화점_추출대상_v1.md - 공유/대화로그/수상한잡화점/ (4파일) · 소통/완료/ 35건 · 소통 허브 허브 파일들 - 공유/개발팀_자산/Unity_MCP_v1 · 서버_작업_참고자료 · 개발팀_백업 · 일일보고 · 인계서 - PD 지시 로그 완료 아카이브 97건 (개발 57 + 기획 40) 일괄 삭제 - 조직공지 10건 · 공통_업무_규칙_개정_제안 · 신PC_v1 - .gitignore 구 개발실/·기획실/ 경로 4줄 삭제 ## 기타 정리 - CLAUDE.md 프로젝트 3종 → 2종 (BT.Framework + EerieVillage) - agents·scripts 수상한잡화점 경로 참조 → EerieVillage 교체 - feedback_agent_path_boundary.md content-designer 2회차 위반 append - INDEX.md BT 기준 재작성 ## 변경 규모 184 files, 671 insertions, 31786 deletions. ## NerdNavis 의도적 잔존 (C5 정직성) - GIT_REMOTE URL (paths.local.json·paths.local.json.template) - UNITY_PROJECT_ROOT 실값 E:/NerdNavis/EerieVillage - 역사 표기 (EerieVillage README, 시행착오 아카이브, 대화로그) ## 태그 - phase-2a-complete @ 5d5b1dd - phase-2b-complete @ 44f7fb1 - phase-2c-complete @ (본 commit) ## 보류 (Phase 3 이관) EerieVillage 착수 안건 7종 — 서버·Framework Tier 2·Unity MCP v2·세계관 SOT·2D 플랫포머 UX·Prove-2-of-3 이식성·어뷰징 경계값 재평가 (PD 결정 6) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 16:55:52 +00:00
exclude_patterns='(공유/일일보고|공통_업무_규칙\.md|\.claude/live/|개발실/|기획실/|PM↔개발실|PM↔기획실|개발실↔기획실|/\{|YYYY-MM-DD|XXXX-XX-XX|2026-XX|\$\(|·|\(|개발\+기획|/로$|scripts/pd_log_active_scan|scripts/agent_call_log|scripts/post_commit|scripts/post_tool_validate|scripts/session_end_sync|scripts/commit_log_match|공유/세션_현황|feedback_pm_context_hook_gap|feedback_session_command_brevity|feedback_session_delivery_omission|feedback_setup_verification|memory/feedback_pm_context_restoration_failure|공유/시뮬결과|공유/개발팀→기획팀/|공유/기획팀→개발팀/|공유/완료/|공유/운영기록|코어코드/EerieVillage_서버)'
fix(process): 세션 전환 복원 체계 근본 강화 - 3중 방어 (PD님 조직 생명급 재지시) ## 심층 원인 분석 결과 - Layer 1 (직접): Inbox 이동 시 PD 지시 로그 경로 컬럼 갱신을 별도 수동 수행 → 누락 쉬움 - Layer 2 (구조): 파일 이동(git mv)과 참조 갱신이 독립 트랜잭션 - Layer 3 (전수): 활성 운영 문서 4건에서 추가 부재 경로 발견 (개발팀 1건·기획팀 3건) ## 즉시 시정 (추가 4건 경로 정정) - 개발팀 #26: 2026-04-16_코어코드_git통합_점검 → 공유/소통/완료/ - 기획팀 #27: 2026-04-16_유니티프로젝트_점검_기획팀 → 공유/소통/완료/ - 기획팀 #26: 2026-04-16_하이브리드구조_기획팀의견 → 공유/소통/완료/하이브리드구조_기획실의견 (구 명칭 파일명 보존) - 기획팀 #25: 2026-04-16_프로세스고도화_개선안_기획팀 → 공유/소통/완료/프로세스고도화_개선안_기획실 - verify_log_paths: 18건 전수 실존 확인 (재검증 통과) ## 구조적 3중 방어 장치 신설·편입 1. **예방 — scripts/archive_inbox.sh 신설**: Inbox 파일 이동 + PD 지시 로그 경로 자동 정정 + verify 검증을 단일 트랜잭션으로 수행. 수동 git mv/sed 금지 2. **감지 1 — SessionStart hook에 verify_log_paths.sh 편입 (기존)**: PD 지시 로그 부재 경로 세션 시작 시 자동 경고 3. **감지 2 — scripts/verify_references.sh 신설 + SessionEnd hook 편입**: 활성 운영 영역(PD 지시 로그·Inbox·조직공지) 참조 무결성 감사. 역사 기록(완료/·대화로그·과거 조직공지)·placeholder·예정 산출물은 명시적 제외 ## 노하우 축적 - memory/feedback_inbox_archive_path_sync.md 확장: 3중 방어 구조·역사 보존 원칙 영구 기록 - "역사 기록 vs 활성 참조" 구분 원칙 확립: 대화로그·완료 아카이브는 작성 당시 경로 보존, 사후 정정하지 않음 ## 세션 전환 복원 보장 검증 - PD 지시 로그 활성 18건 전수 실존 ✅ - 활성 운영 참조 무결성 0건 ✅ - 원격 main = 로컬 HEAD ✅ - SessionStart·SessionEnd hook 8종 정상 등록 ✅ Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 08:40:37 +00:00
total_missing=0
audit_file() {
local src="$1"
grep -nE '(공유|프로젝트|코어코드|\.claude|scripts|memory)/[^[:space:]`)"<>|,]+' "$src" 2>/dev/null | while IFS=: read -r lnum rest; do
echo "$rest" | grep -oE '(공유|프로젝트|코어코드|\.claude|scripts|memory)/[^[:space:]`)"<>|,]+' | while IFS= read -r path; do
path="${path%[.,;:\)]}"
[[ "$path" == *"**"* ]] && continue
[[ "$path" =~ ^[a-f0-9]{7,40}$ ]] && continue
echo "$path" | grep -qE "$exclude_patterns" && continue
[ -e "$path" ] && continue
[ -e "$path/" ] && continue
echo " [$src:$lnum] $path"
done
done
}
for d in "${scan_dirs[@]}"; do
[ -d "$d" ] || continue
while IFS= read -r f; do audit_file "$f"; done < <(find "$d" -maxdepth 3 -name '*.md' 2>/dev/null)
done
for d in "${inbox_dirs[@]}"; do
[ -d "$d" ] || continue
while IFS= read -r f; do audit_file "$f"; done < <(find "$d" -maxdepth 1 -name '*.md' 2>/dev/null)
done
if [ "$total_missing" -eq 0 ]; then
out=$(for d in "${scan_dirs[@]}" "${inbox_dirs[@]}"; do
[ -d "$d" ] || continue
while IFS= read -r f; do audit_file "$f"; done < <(find "$d" -maxdepth 3 -name '*.md' 2>/dev/null)
done)
if [ -z "$out" ]; then
echo "✅ [참조 무결성 감사] 활성 운영 영역 부재 경로 0건"
fi
fi