BurningTimesAi/scripts/memory_junction_ensure.sh

103 lines
4.2 KiB
Bash
Raw Normal View History

feat(rules): C34 확장 — memory junction 중앙화 근원 해결 (옵션 A) PD님 직접 지적 수용 — "근본 해결이 아닌 임시 방편은 코어 룰 위반이야. C34와 동급의 생존성 이슈는 '권고' 수준이 아니었어. 옵션 A 방안대로 처리해." PM 자진 반성(C2·C3·C5·C29 위반 자인) + 옵션 A 집행. 규칙 확장: - SKILL.md C34 제목 개정 "Live 증분" → "PC 로컬 실시간 공유 중앙화 체계 (Live + memory)" + C34-1/3/14 개정 + C34-16 신설 (memory junction 특수 조항 5종: 실체 디렉토리 유지·sync 방향·Write 경로 선택·3층 백업· 정(正) 판정 규칙 A·B·C) - CLAUDE.md 요약 갱신 - 폐기_규칙_아카이브.md §14 신설 (C34 확장 이력 6필드) 스크립트 구현: - scripts/memory_junction_ensure.sh 신규 (SessionStart hook, Lock 추가, Windows junction reparse point 체크 선행) - scripts/sync_memory_repo_to_central.sh 신규 (SessionStart, unflushed 대피 + Lock race 방어) - scripts/sync_memory_central_to_repo.sh 신규 (post-commit hook) - scripts/sync_memory.sh 신규 (수동 비상) - scripts/rollback_memory_central.sh 신규 (C6-1 롤백 경로) - setup/setup_windows.ps1·setup_macos.sh 3.6 섹션 - scripts/verify_setup.ps1 2.6 섹션 3축 검증 - .claude/settings.json SessionStart hook 체인 확장 - scripts/git-hooks/post-commit 확장 감사관 3종 "C34/C16-1 동급 생존성 이슈 축소 보고 감지" 체크 신설 (pm-auditor 5-A · dev-auditor 6-A · plan-auditor 6-A). 조직공지·feedback·MEMORY.md 인덱스·Live 더미·대화로그 일괄 집행. 실측 검증 통과: 38개 worktree junction 중앙 연결 (10 신규 + 28 유지, 실패 0건). 스크립트 로직 결함(Windows junction bash `-L` 미인식) 수정. 조직 전원 세션 1회 재시작 필요 — SessionStart hook이 자동 마이그레이션. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 16:39:04 +00:00
#!/bin/bash
# SessionStart hook — memory/org junction을 $HOME/.claude/nerdnavis-memory/로 보장
# Claude user memory 경로(`$HOME/.claude/projects/*/memory`)의 모든 worktree 해시 폴더를
# 중앙 저장소로 연결하여 worktree 경계 무관 조직 기억 실시간 공유 보장.
# 2026-04-19 신설 — C34 확장 (P25 승격 + memory/org/ 편입)
# 관련 규칙: C34 · C16-1 · C34-16 memory junction 특수 조항 · 헌법 제1원칙 ⑤
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
CENTRAL_MEM="$HOME/.claude/nerdnavis-memory"
MARKER_NAME=".memory-junction-marker"
CLAUDE_PROJECTS="$HOME/.claude/projects"
LOCK_FILE="$HOME/.claude/.nerdnavis_memory_junction.lock"
# 0. Lock (race condition 방지, 동시 세션 시작 시 junction 중복 시도 차단)
ATTEMPT=0
while [ -f "$LOCK_FILE" ] && [ "$ATTEMPT" -lt 5 ]; do
sleep 1
ATTEMPT=$((ATTEMPT + 1))
done
echo "$$" > "$LOCK_FILE" 2>/dev/null
trap 'rm -f "$LOCK_FILE"' EXIT
# 1. 중앙 저장소 + marker 보장
mkdir -p "$CENTRAL_MEM" 2>/dev/null
if [ ! -f "$CENTRAL_MEM/$MARKER_NAME" ]; then
echo "nerdnavis-memory central junction target (C34-16, 2026-04-19)" > "$CENTRAL_MEM/$MARKER_NAME" 2>/dev/null
fi
# 2. Claude projects base 부재 시 조기 종료 (Claude Code 첫 실행 전 PC)
[ ! -d "$CLAUDE_PROJECTS" ] && exit 0
# 3. E--NerdNavisAi* 패턴 해시 폴더 순회 (루트·worktree 모두 포괄)
RECONNECTED=0
CREATED=0
SKIPPED=0
FAILED=0
for hash_dir in "$CLAUDE_PROJECTS"/E--NerdNavisAi*; do
[ -d "$hash_dir" ] || continue
mem_link="$hash_dir/memory"
# 이미 중앙으로 연결된 경우 (sentinel 경유 판정)
if [ -f "$mem_link/$MARKER_NAME" ]; then
SKIPPED=$((SKIPPED + 1))
continue
fi
# 기존 link 제거 (junction/symlink/실체 디렉토리 모두) — Windows junction은 bash `-L`에 잡히지 않으므로 PowerShell reparse point 체크 선행
if [ -e "$mem_link" ] || [ -L "$mem_link" ]; then
IS_REPARSE="False"
if command -v powershell >/dev/null 2>&1; then
LINK_WIN=$(cygpath -w "$mem_link" 2>/dev/null || echo "$mem_link")
IS_REPARSE=$(powershell -NoProfile -ExecutionPolicy Bypass -Command "try { ((Get-Item -Force '$LINK_WIN' -ErrorAction Stop).Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0 } catch { \$false }" 2>/dev/null | tr -d '\r\n ')
fi
if [ "$IS_REPARSE" = "True" ] || [ -L "$mem_link" ]; then
# junction/symlink 제거 (타깃 디렉토리 보호)
if command -v powershell >/dev/null 2>&1; then
powershell -NoProfile -ExecutionPolicy Bypass -Command "Remove-Item '$LINK_WIN' -Force -Recurse -ErrorAction SilentlyContinue" >/dev/null 2>&1
else
rm -f "$mem_link" 2>/dev/null
fi
elif [ -d "$mem_link" ]; then
# 실체 디렉토리 — 내용 중앙 흡수 후 백업 (C6-1 원본 보호)
for f in "$mem_link"/*.md "$mem_link"/*.json; do
[ -f "$f" ] || continue
basename=$(basename "$f")
[ ! -f "$CENTRAL_MEM/$basename" ] && cp "$f" "$CENTRAL_MEM/$basename" 2>/dev/null
done
fix(rules): C6-1 백업 포맷 위반 8곳 보정 + 안건 프레이밍 혼선 교훈 PD님 2차 지적 2건 수용: 1. "C34 확장 집행 과정에 C6-1 지키지 않았어?" — 8곳 스크립트에서 백업 파일명 `.bak-YYYYMMDDHHMMSS` 사용 → C6-1 표준 `.bak_YYYYMMDD_HHMM` 위반. 2026-04-18 Live junction 최초 도입 포맷이 이후 모든 파생 스크립트로 연쇄 오염. 관성적 답습 패턴. 2. "보정 2와 결정 1이 같은 안건 아니야?" — PM이 동일 안건을 "PM 재량"·"PD 결정" 카테고리에 중복 제시 + 이전 턴 옵션 A 결정 사안을 "결정 2"로 재질문. 카테고리 경계 자기검증 부재. 보정 1 (PM 재량): - memory_junction_ensure.sh·live_junction_ensure.sh 2곳 - setup_windows.ps1 3곳 (Section 3·3.5·3.6) - setup_macos.sh 3곳 (Section 3·3.5·3.6) - 포맷 `.bak_$(date +%Y%m%d_%H%M)` (bash) / `.bak_$(Get-Date -Format yyyyMMdd_HHmm)` (PowerShell) 보정 3 (PM 재량): - memory/org/feedback_backup_filename_format_violation.md 신설 - memory/org/feedback_agenda_framing_duplication.md 신설 - MEMORY.md 인덱스 2건 append 보정 4 (PM 재량): - pm-auditor 5-B (백업 포맷 준수 감지) + 5-C (안건 중복·재질문) - dev-auditor 6-B (백업 포맷 준수 감지) 결정 1 (PD님): 기존 `.bak-*` 디렉토리 rename 생략. 데이터 멀쩡·복구 가능. PD 지시 로그 #41 완료 아카이브 등록 (P19 강화·즉답 접두). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 17:01:49 +00:00
mv "$mem_link" "$mem_link.bak_$(date +%Y%m%d_%H%M)" 2>/dev/null || continue
feat(rules): C34 확장 — memory junction 중앙화 근원 해결 (옵션 A) PD님 직접 지적 수용 — "근본 해결이 아닌 임시 방편은 코어 룰 위반이야. C34와 동급의 생존성 이슈는 '권고' 수준이 아니었어. 옵션 A 방안대로 처리해." PM 자진 반성(C2·C3·C5·C29 위반 자인) + 옵션 A 집행. 규칙 확장: - SKILL.md C34 제목 개정 "Live 증분" → "PC 로컬 실시간 공유 중앙화 체계 (Live + memory)" + C34-1/3/14 개정 + C34-16 신설 (memory junction 특수 조항 5종: 실체 디렉토리 유지·sync 방향·Write 경로 선택·3층 백업· 정(正) 판정 규칙 A·B·C) - CLAUDE.md 요약 갱신 - 폐기_규칙_아카이브.md §14 신설 (C34 확장 이력 6필드) 스크립트 구현: - scripts/memory_junction_ensure.sh 신규 (SessionStart hook, Lock 추가, Windows junction reparse point 체크 선행) - scripts/sync_memory_repo_to_central.sh 신규 (SessionStart, unflushed 대피 + Lock race 방어) - scripts/sync_memory_central_to_repo.sh 신규 (post-commit hook) - scripts/sync_memory.sh 신규 (수동 비상) - scripts/rollback_memory_central.sh 신규 (C6-1 롤백 경로) - setup/setup_windows.ps1·setup_macos.sh 3.6 섹션 - scripts/verify_setup.ps1 2.6 섹션 3축 검증 - .claude/settings.json SessionStart hook 체인 확장 - scripts/git-hooks/post-commit 확장 감사관 3종 "C34/C16-1 동급 생존성 이슈 축소 보고 감지" 체크 신설 (pm-auditor 5-A · dev-auditor 6-A · plan-auditor 6-A). 조직공지·feedback·MEMORY.md 인덱스·Live 더미·대화로그 일괄 집행. 실측 검증 통과: 38개 worktree junction 중앙 연결 (10 신규 + 28 유지, 실패 0건). 스크립트 로직 결함(Windows junction bash `-L` 미인식) 수정. 조직 전원 세션 1회 재시작 필요 — SessionStart hook이 자동 마이그레이션. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 16:39:04 +00:00
fi
fi
# 중앙으로 Junction 생성
if command -v powershell >/dev/null 2>&1; then
# Windows — PowerShell New-Item Junction (cmd //c mklink 대비 신뢰성 우위, 2026-04-18 실증)
CENTRAL_WIN=$(cygpath -w "$CENTRAL_MEM" 2>/dev/null || echo "$CENTRAL_MEM")
LINK_WIN=$(cygpath -w "$mem_link" 2>/dev/null || echo "$mem_link")
powershell -NoProfile -ExecutionPolicy Bypass -Command "New-Item -ItemType Junction -Path '$LINK_WIN' -Target '$CENTRAL_WIN' -Force | Out-Null" >/dev/null 2>&1
else
ln -s "$CENTRAL_MEM" "$mem_link" 2>/dev/null
fi
if [ -f "$mem_link/$MARKER_NAME" ]; then
CREATED=$((CREATED + 1))
else
FAILED=$((FAILED + 1))
fi
done
# 4. 결과 보고 (변경 있을 때만)
if [ "$CREATED" -gt 0 ] || [ "$FAILED" -gt 0 ]; then
echo "🧠 [Memory Junction] 신규 연결 $CREATED · 기존 유지 $SKIPPED · 실패 $FAILED (중앙: $CENTRAL_MEM)"
fi
if [ "$FAILED" -gt 0 ]; then
echo "⚠️ [Memory Junction] $FAILED 개 해시 폴더 연결 실패 — Degraded 모드. 관리자 권한 setup 재실행 권장" >&2
fi
exit 0