---
name: memory junction 타깃 오연결 — 레포 루트에서 중앙으로 근원 해결
description: 2026-04-18~19 실증. Claude user memory junction이 레포 루트 `memory/org/`를 타깃으로 연결되어 있어 Claude Code Write 시 본 worktree가 아닌 레포 루트에 기록되는 결함. C34 패턴(옵션 A) 동형으로 HOME 중앙 저장소 + 양방향 sync 해결
type: feedback
---

# memory junction 타깃 오연결 — HOME 중앙화 근원 해결

## 실증 (2026-04-18~19)

### 결함 구조
- `$HOME/.claude/projects/E--BurningTimesAi*/memory` → Junction → **`E:\BurningTimesAi\memory\org`** (레포 루트)
- Claude Code가 `$HOME/.claude/projects/<hash>/memory/...` 경로로 Write하면 junction 경유 → **레포 루트 memory/org/**에 기록
- 본 worktree의 `git status`에는 감지 안 됨 (물리적으로 다른 디렉토리)
- worktree에서 commit하려면 매번 `git stash push -u` (레포 루트) → `git stash pop` (본 worktree) 수동 이관 필요

### 재발 이력 (2회 세션 총 4건)
- **2026-04-18 오후** C34 집행 세션 3건:
  1. `feedback_worktree_isolation.md` Write → 레포 루트 유출
  2. `feedback_agent_path_boundary.md` Write → 레포 루트 유출
  3. `MEMORY.md` 인덱스 2건 append → 레포 루트 유출
- **2026-04-19 오전** 1건:
  4. `feedback_active_archive_promotion_omission.md` Write → 레포 루트 유출

매번 stash 이관으로 복구했으나 **근본 해결 미수행** — PM이 "운영 규율로 커버" 완화 판정 (`feedback_issue_under_reporting.md` 근거 사건).

### 실측 부가 결함 (개발팀장 감사 2026-04-19)
- user memory junction 자체가 없는 worktree 해시 폴더 **13개 이상** — Claude Code 자동 생성 worktree(tender-liskov 등)가 setup 스크립트 filter를 통과하지 못함
- 해당 worktree에서 Write 시 junction 없어 `$HOME/.claude/projects/<hash>/memory/`에 **일반 디렉토리**로 기록되어 git 완전 단절 상태

## 근본 원인

1. **`.live/`와 달리 `memory/org/`는 git 추적 SOT** — symlink 추적 어려워 "junction 경유" 방식을 초기 설계 시 채택
2. **setup 스크립트 filter 한계** — `E--BurningTimesAi` 접두사 worktree 해시 폴더(`E--BurningTimesAi------claude-worktrees-*`) 패턴을 불완전 포괄
3. **sync 인프라 부재** — 레포 `memory/org/`와 user memory junction 타깃 간 양방향 동기화 구조 미설계

## 해결 (C34 패턴 옵션 A 완전 동형, 2026-04-19 집행)

### 중앙 저장소 구조 (Live와 동형)

```
$HOME/.claude/nerdnavis-memory/           # 중앙 실 저장 (PC 로컬)
├── .memory-junction-marker
├── MEMORY.md (최신)
└── feedback_*.md (32+종)

user memory junction 23+개 → 중앙 경로로 재연결

레포 memory/org/ (git 추적 실체)
    ↔ sync 스크립트 4계층 (SessionStart·post-commit·수동·감사관)
```

### 양방향 sync 4계층
- **SessionStart hook**: `sync_memory_repo_to_central.sh` — pull 직후 레포 → 중앙 (unflushed 중앙 변경은 `$CENTRAL.conflict-<stamp>/` 대피)
- **post-commit hook**: `sync_memory_central_to_repo.sh` — commit 직후 중앙 → 레포 (Lock 파일 race condition 방어)
- **수동**: `scripts/sync_memory.sh {both|repo-to-central|central-to-repo}`
- **감사관 주기**: pm-auditor·dev-auditor가 분기 상태 감지 시 자동 복구 요청

### Write 경로 규약 (C34-16 신설)

Claude Code가 memory 파일 기록 시 **택1**:
- (우선) **본 worktree 절대 경로 직접 지정** — junction 경유 회피, 본 worktree git status 즉시 반영
- (대체) `$HOME/.claude/projects/*/memory/...` — junction 경유 중앙 기록, post-commit에서 레포 자동 sync
- **혼용 금지** — 같은 세션에서 두 경로 혼용 시 분기 리스크

## 거부된 대안 (옵션 b: git symlink 추적)

5종 근거로 거부:
1. Windows `core.symlinks` 설정 + 관리자 권한 필수
2. PC clone 후 setup 전 symlink가 42바이트 텍스트 파일로 체크아웃되는 사고
3. 한국어 경로 호환성 예측 불가
4. `.live/` Junction(디렉토리) + memory Symlink(파일) 혼용으로 감사 난이도 증가
5. 기존 커밋 이력에 실 파일 → symlink 전환 시 history rewrite 위험 (C19-2 되돌리기 어려움)

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

- **Write 도구로 memory 파일 기록 전 경로 선택 확인** — 본 worktree 절대 경로 vs user memory 경로. 전 세션 단일 경로 유지
- **Agent 호출 시 프롬프트에 경로 규약 명시** (C34-11) — Agent가 레포 루트 절대 경로 하드코딩하지 않도록
- **`verify_setup.ps1` 2.6 섹션 정기 실행** — junction 타깃 일관성 + unflushed 대피본 감지
- **감사관 주기 점검**: `$HOME/.claude/nerdnavis-memory.conflict-*` 발견 시 수동 병합 + 기록

## 연관

- **C34** (PC 로컬 실시간 공유 중앙화 — Live + memory)
- **C34-16** (memory junction 특수 조항, 2026-04-19 신설)
- **C16-1** (PC 독립 셋업)
- **헌법 제1원칙 ⑤** (세션·PC 연속성 보장)
- `feedback_issue_under_reporting.md` (2026-04-19 동반 신설, PM 반성 경위)
- `feedback_worktree_isolation.md` (2026-04-18, `.live/` 동형 사건)
- `feedback_pm_over_conservative_interpretation.md` (4회차 변종 구조 모집단)
- 조직공지: `2026-04-19_C34_확장_memory_junction_중앙화.md`

## 교훈

**같은 PC 내 실시간 공유가 필요한 조직 자산은 모두 `$HOME/.claude/nerdnavis-*/` 중앙화 + junction/symlink + sync 패턴으로 설계한다.** git 추적이 걸림돌로 보이면 "sync 스크립트 + junction 투명 경유" 조합으로 양립 가능. "git 추적 때문에 symlink 불가" 결론은 잘못된 이분법.
