BurningTimesAi/memory/org/feedback_worktree_isolation.md

6.2 KiB

🟢 역사 보존 (해결 완료 2026-04-26) — worktree 자동 생성·Junction 체계 폐기로 본 패턴 구조 차단. 본 메모리는 조직 학습 자산으로 보존.


name: worktree 격리로 인한 조직 실시간 동기화 체계 실패 — 재발 방지 description: 2026-04-18 PD님 조직 생존급 선언. P25→C34 승격 + 중앙 Junction 근원 해결. worktree 경계는 실시간 공유 체계의 숨겨진 경계이므로 새 체계 설계 시 최우선 검토 대상 type: feedback originSessionId: 0c3fc143-5c2a-4165-afb1-7becf72eaa0a

worktree 격리로 인한 조직 실시간 동기화 체계 실패

실증 (2026-04-18)

세션 A(tender-liskov-844a72 worktree)와 세션 B(nifty-wing-4752bd worktree)에서 P25 Live 증분 동기화 테스트 수행. 세션 B가 .live/ping.md에 PING 마커 작성 후 세션 A에서 hook 주입 확인 → 미수신. 원인은 git worktree가 각 worktree에 독립 파일시스템 디렉토리를 부여하므로 .live/가 물리적으로 분리됨.

왜 중요한가 (조직 생존급)

PD님 직접 선언: "이 문제가 해결되지 않으면 앞으로 우리 조직은 유지될 수 없어." 헌법 제1원칙 ⑤ "세션·PC 연속성 보장"의 근본 위협. P25(조직 핵심 자산 선언)가 특정 조건(같은 worktree)에서만 작동한다는 사실이 조직 기반 전제를 훼손.

근본 원인

live_inject.sh hook이 git rev-parse --show-toplevel로 얻은 경로의 .live/를 스캔하는데, 이 명령은 worktree별로 다른 경로를 반환함. 따라서 worktree A와 B의 .live/가 서로 다른 디렉토리이며 hook이 상호 주입 불가.

해결 (C34 신설 + 중앙 Junction)

  1. 실 저장 경로를 $HOME/.claude/nerdnavis-live/로 중앙화 (PC 로컬 단일)
  2. 각 worktree의 .live/를 중앙 디렉토리로 Junction(Windows mklink /J) / Symlink(Unix ln -s) 연결
  3. scripts/live_junction_ensure.sh가 SessionStart hook 체인에서 보장 (git fetch 직후 최우선 삽입)
  4. setup_* 스크립트 3.5 섹션에서 자동 설치
  5. Sentinel 파일 .junction-marker로 OS-agnostic 판정

재발 방지 체크 (세션 리더 의무)

  • 신 PC·신 worktree 첫 세션 시 verify_setup.ps1의 2.5 "Live 중앙 저장소 실체·reparse·marker 경유 읽기" 3축 통과 확인
  • .live/가 실체 디렉토리로 남아있으면 setup_windows.ps1 재실행
  • 조직 전원 세션 1회 재시작 필수 안내 (C1 사전 고지)
  • 새 조직 공유 체계 설계 시 worktree 경계 조건을 첫 검토 항목에 포함 (본 사건 재발 방지)

연관

  • C34 (헌법급 본 체계 — P25 승격)
  • C16-1 (.live/ junction 자동 연결 편입)
  • feedback_agent_path_boundary.md (Agent 경계 넘기 2차 사건)
  • 조직공지: 2026-04-18_C34_신설_worktree_격리_근원해결.md

교훈

worktree 기능은 편리하나 조직 공유 체계의 숨겨진 경계를 만든다. "같은 PC = 같은 파일시스템"이라는 직관은 worktree 앞에서 성립하지 않음. 앞으로 공유 체계 설계 시 "실 저장 = 중앙 1곳, 접근 = junction/symlink"을 기본 패턴으로 채택 (C16-1 memory junction과 동일 원칙).


🛡️ 신규 설정·저장소 도입 체크리스트 (2026-04-18 PD님 "유사 사례 재발 방지" 지시 수용)

조직에 새로운 설정 파일·저장소·공유 체계·hook·스크립트를 도입할 때 반드시 다음 5개 질문을 통과해야 한다. 미통과 시 근원 해결안을 포함하여 재설계 후 재상정.

5개 질문 (설계·집행 전 필수 통과)

  1. 단위 판정: 이 자산은 PC 단위(모든 worktree 공유)인가 worktree 단위(worktree별 독립)인가?
  2. 경계 안전성: worktree에서 쓰여도 다른 worktree·레포 루트에 의도치 않게 기록되지 않는가?
  3. 중앙화 필요성: PC 단위 공유가 필요하면 $HOME/.claude/nerdnavis-*/ 중앙화 + junction 패턴을 채택했는가?
  4. 레포 루트 vs worktree 실행 차이: setup·verify 스크립트가 레포 루트에서 실행될 때와 worktree에서 실행될 때의 동작 차이가 검토되었는가?
  5. Agent 경계 보호 (C34-11): Agent 도구로 호출된 서브에이전트가 해당 경로를 절대 경로로 하드코딩해도 안전한가?

확인된 적용 대상 (2026-04-18 기준)

자산 단위 중앙화 상태 재발 방지
.live/ PC 단위 HOME 중앙화 (C34-3) 해결 완료
memory/org/ PC 단위 (git-tracked SOT) 🟡 레포 루트 junction (git 추적 유지 위해) 운영 규율 + verify_setup 경고 + 감사관 체크
paths.local.json PC 단위 (.gitignore) 🟡 레포 루트 (worktree fallback) verify_setup worktree fallback 추가
~/.claude/.nerdnavis_bus/·.nerdnavis_throttle/ PC 단위 HOME (기존 구조) 정합
향후 신규 자산 본 체크리스트 통과 후 도입

본 체크리스트 위반 시

  • 설계 단계: 도입 검토자가 본 체크리스트 미통과 시 근원 해결안 포함하여 재설계 후 재상정
  • 집행 후 발견: C34-11 준용 → stash 이관 복구 + feedback 메모리 기록 + 관련 감사관 체크 항목 추가

감사관 상시 점검 (C34-15 연계)

  • pm-auditor: 규칙·설정 변경 시 본 체크리스트 수행 여부 검증
  • dev-auditor: 스크립트·hook 도입 시 worktree 안전성 검증
  • plan-auditor: 기획 자산(밸런스 테이블 등) 경로 체계 worktree 안전성 검증

관련 사건 로그 (패턴 축적)

일자 사건 해결
2026-04-18 오전 .live/ worktree 격리 실증 C34 신설 + 중앙 Junction
2026-04-18 오후 개발팀장 Agent 절대 경로 → 레포 루트 유출 C34-11 + feedback_agent_path_boundary.md
2026-04-18 오후 memory junction 타깃이 레포 루트라 Write가 레포 루트에 기록 운영 규율(stash 이관) + verify_setup 경고 + 감사관 체크
2026-04-18 오후 paths.local.json이 worktree에 없어 verify FAIL verify_setup worktree fallback 추가

향후 동일 유형 사건은 본 표에 append하여 패턴 누적.