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_서버)'
|
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
|