BurningTimesAi/setup/setup_macos.sh

131 lines
4.2 KiB
Bash
Raw Normal View History

#!/bin/bash
# 너드나비스 조직 레포 - macOS / Linux 셋업
# 사용: bash setup_macos.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
NERDNAVIS_ROOT="${NERDNAVIS_ROOT:-$(cd "$SCRIPT_DIR/.." && pwd)}"
UNITY_ROOT="${UNITY_ROOT:-$HOME/dev/DeckBuilding}"
FRAMEWORK_ROOT="${FRAMEWORK_ROOT:-$HOME/dev/NerdNavis.Framework}"
GITEA_URL="${GITEA_URL:-https://burning.i234.me}"
GITEA_SSH="${GITEA_SSH:-ssh://git@burning.i234.me:30030}"
echo "=== 너드나비스 조직 레포 셋업 ==="
echo "NERDNAVIS_ROOT: $NERDNAVIS_ROOT"
# 1. git 확인
command -v git >/dev/null 2>&1 || { echo "git 필요"; exit 1; }
# 2. paths.local.json
PATHS_FILE="$NERDNAVIS_ROOT/paths.local.json"
if [ ! -f "$PATHS_FILE" ]; then
cat > "$PATHS_FILE" <<EOF
{
"_description": "로컬 환경 경로. 커밋 금지.",
"NERDNAVIS_ROOT": "$NERDNAVIS_ROOT",
"UNITY_PROJECT_ROOT": "$UNITY_ROOT",
"FRAMEWORK_PKG_ROOT": "$FRAMEWORK_ROOT",
"TABLE_EXPORT_ROOT": "$UNITY_ROOT/Assets/ResWork/Table/Export",
"GITEA_URL": "$GITEA_URL",
"GITEA_SSH": "$GITEA_SSH",
"HOSTNAME": "$(hostname)"
}
EOF
echo "paths.local.json 작성 완료"
else
echo "paths.local.json 이미 존재. 유지."
fi
# 3. 메모리 symlink
ORG_MEM="$NERDNAVIS_ROOT/memory/org"
mkdir -p "$ORG_MEM"
CLAUDE_BASE="$HOME/.claude/projects"
if [ -d "$CLAUDE_BASE" ]; then
for d in "$CLAUDE_BASE"/*Documents*/ "$CLAUDE_BASE"/*너드나비스*/; do
[ -d "$d" ] || continue
MEM="$d/memory"
if [ -L "$MEM" ]; then
echo "이미 symlink. 유지: $MEM"
elif [ -d "$MEM" ]; then
mv "$MEM" "$MEM.bak-$(date +%s)"
ln -s "$ORG_MEM" "$MEM"
echo "Symlink 생성: $MEM -> $ORG_MEM"
else
ln -s "$ORG_MEM" "$MEM"
echo "Symlink 생성: $MEM -> $ORG_MEM"
fi
done
fi
feat(rules): C34 Live 증분 동기화 헌법급 신설 + worktree 격리 근원 해결 PD님 조직 생존급 선언 수용 — "이 문제가 해결되지 않으면 앞으로 우리 조직은 유지될 수 없어" / "철저히 검토해서 가능한 모든 수단을 써서 개선해". 헌법 제1원칙 ⑤(세션·PC 연속성) 근본 위협 판정. P25 → C34 승격 + 중앙 Junction 구조로 worktree 경계 무관 실시간 공유 복원. 집행 10종: - SKILL.md: C34 신설(14개 하위 조항) + P25 본문 삭제(C14-5-확장) + C16-1 .live/ junction 편입 + C31-1-E 표기 갱신 + 조직 핵심 자산 참조 갱신 - CLAUDE.md: 핵심 규칙 요약 28→29 + C34 추가, 프로젝트 규칙 요약 25→24 + P25 제거, 번호 구멍 목록 확장 - scripts/live_junction_ensure.sh: 신규 SessionStart hook (PowerShell New-Item Junction 우선, git-bash mklink 대비 신뢰성 우위 실증 반영) - setup/setup_windows.ps1·setup_macos.sh: 3.5 섹션 추가 - scripts/verify_setup.ps1: 2.5 Live junction 3축 검증 (실측 통과 확인) - .claude/settings.json: SessionStart hook 체인 최우선 삽입 - .gitignore: .live/* 제외 + README 예외 + 백업 제외 - 공유/조직공지/2026-04-18_C34_신설_worktree_격리_근원해결.md 신설 - 공유/조직공지/폐기_규칙_아카이브.md §13 P25 승격 6필드 기록 - memory/org/feedback_worktree_isolation.md + feedback_agent_path_boundary.md 신설 + MEMORY.md 인덱스 대화로그·PD 지시 로그 #39 완료 갱신 포함. Agent 경계 넘기 2차 사건 (개발팀장 Agent 절대 경로 하드코딩으로 레포 루트 유출) stash 이관 복구 + C34-11 Agent 경계 보호 조항 신설. 조직 전원 세션 1회 재시작 필요 — SessionStart hook이 live_junction_ensure.sh 자동 실행하여 junction 설치. verify_setup.ps1 통과 확인 후 작업 재개. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 12:59:41 +00:00
# 3.5. Live 증분 동기화 중앙 저장소 + Symlink (C34, 2026-04-18 PD님 직접 지시)
# worktree 격리로 인한 .live/ 물리 분리 해결을 위해
# $HOME/.claude/nerdnavis-live/ 중앙 디렉토리로 symlink 연결한다.
CENTRAL_LIVE="$HOME/.claude/nerdnavis-live"
LOCAL_LIVE="$NERDNAVIS_ROOT/.live"
MARKER_NAME=".junction-marker"
mkdir -p "$CENTRAL_LIVE"
if [ ! -f "$CENTRAL_LIVE/$MARKER_NAME" ]; then
echo "nerdnavis-live central junction target (C34, 2026-04-18)" > "$CENTRAL_LIVE/$MARKER_NAME"
fi
if [ -L "$LOCAL_LIVE" ]; then
echo "Live symlink 이미 존재. 유지: $LOCAL_LIVE"
elif [ -d "$LOCAL_LIVE" ]; then
BAK="$LOCAL_LIVE.bak-$(date +%s)"
for f in "$LOCAL_LIVE"/*.md "$LOCAL_LIVE"/*.json; do
[ -f "$f" ] || continue
DST="$CENTRAL_LIVE/$(basename "$f")"
[ ! -f "$DST" ] && cp "$f" "$DST"
done
mv "$LOCAL_LIVE" "$BAK"
ln -s "$CENTRAL_LIVE" "$LOCAL_LIVE"
echo "Live Symlink 생성: $LOCAL_LIVE -> $CENTRAL_LIVE (백업: $BAK)"
else
ln -s "$CENTRAL_LIVE" "$LOCAL_LIVE"
echo "Live Symlink 생성: $LOCAL_LIVE -> $CENTRAL_LIVE"
fi
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
# 3.6. memory/org/ 중앙 저장소 + Symlink (C34-16, 2026-04-19 신설)
CENTRAL_MEM="$HOME/.claude/nerdnavis-memory"
MEMORY_MARKER=".memory-junction-marker"
mkdir -p "$CENTRAL_MEM"
if [ ! -f "$CENTRAL_MEM/$MEMORY_MARKER" ]; then
echo "nerdnavis-memory central (C34-16, 2026-04-19)" > "$CENTRAL_MEM/$MEMORY_MARKER"
fi
# 초기 sync 레포 → 중앙
if [ -d "$NERDNAVIS_ROOT/memory/org" ]; then
for f in "$NERDNAVIS_ROOT/memory/org"/*.md "$NERDNAVIS_ROOT/memory/org"/*.json; do
[ -f "$f" ] || continue
BASENAME=$(basename "$f")
[ ! -f "$CENTRAL_MEM/$BASENAME" ] && cp "$f" "$CENTRAL_MEM/$BASENAME"
done
fi
# user memory symlink 중앙 재연결
if [ -d "$CLAUDE_BASE" ]; then
for d in "$CLAUDE_BASE"/E--NerdNavisAi*/; do
[ -d "$d" ] || continue
mem_link="${d}memory"
if [ -L "$mem_link" ] && [ -f "$mem_link/$MEMORY_MARKER" ]; then
continue
fi
if [ -d "$mem_link" ] && [ ! -L "$mem_link" ]; then
mv "$mem_link" "$mem_link.bak-$(date +%s)"
elif [ -L "$mem_link" ]; then
rm -f "$mem_link"
fi
ln -s "$CENTRAL_MEM" "$mem_link"
echo "memory Symlink 중앙 연결: $mem_link -> $CENTRAL_MEM"
done
fi
echo "셋업 완료."