feat(C34 폐기): worktree 자동 생성 우회 중앙 Junction 체계 (나) 전면 폐기
PD 직접 결정 2026-04-26 — Claude Code MSIX 자동 worktree 생성 우회용 중앙 Junction 체계 폐기. CLI 전환(`claude` 명령 직접 호출, --no-worktree 기본값)으로 worktree 자체 미생성. 폐기: - SKILL.md C34 본문 156행 + 잔존 11건 정정 - scripts 7종 git rm - .claude/settings.json SessionStart 5개 + UserPromptSubmit 2개 hook 제거 - CLAUDE.md C34 요약 라인 + 폐기 표기 갱신 유지: - .live/ 일반 디렉토리 + UserPromptSubmit live_inject.sh hook - memory/org/ 레포 git 추적 SOT 직접 저장 - NerdNavis 영역 보존 (PD 결정) 라벨링·아카이브: - feedback 4종 역사 보존 배너 추가 - 폐기 규칙 아카이브 C34 6필드 기록 데이터: 중앙 백업 .claude/backups/central-2026-04-26/ (680 파일 2.7MB) 토큰 절감: 매 응답 3.2K~3.6K / 월 6.4M~7.2M 후속: 단계 4-D (setup·verify) + 단계 5 (잔존 worktree 2개 정리) 매니페스트: 2026-04-26_BT-WT-PURGE-S4 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5112a2f6b4
commit
9768dff722
|
|
@ -96,26 +96,6 @@
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출 — 자동 병합 중:'; echo \"$CHANGES\"; git merge origin/main --no-edit 2>/dev/null && echo '✅ 자동 병합 완료' || echo '⚠️ 자동 병합 실패 (충돌 발생 — 수동 해결 필요)'; else echo '✅ [SessionStart] main 동기화 상태'; fi"
|
"command": "git fetch origin 2>/dev/null; CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -10); if [ -n \"$CHANGES\" ]; then echo '📌 [SessionStart] origin/main 변경 검출 — 자동 병합 중:'; echo \"$CHANGES\"; git merge origin/main --no-edit 2>/dev/null && echo '✅ 자동 병합 완료' || echo '⚠️ 자동 병합 실패 (충돌 발생 — 수동 해결 필요)'; else echo '✅ [SessionStart] main 동기화 상태'; fi"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/live_junction_ensure.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/memory_junction_ensure.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/sync_memory_repo_to_central.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/audit_junction_ensure.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/sync_audit_repo_to_central.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "bash scripts/unity_project_sync.sh 2>/dev/null || true"
|
"command": "bash scripts/unity_project_sync.sh 2>/dev/null || true"
|
||||||
|
|
@ -171,14 +151,6 @@
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "bash scripts/hold_watch.sh 2>/dev/null || true"
|
"command": "bash scripts/hold_watch.sh 2>/dev/null || true"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/live_junction_ensure.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "command",
|
|
||||||
"command": "bash scripts/audit_junction_ensure.sh 2>/dev/null || true"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "bash scripts/live_inject.sh 2>/dev/null || true"
|
"command": "bash scripts/live_inject.sh 2>/dev/null || true"
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ description: BurningTimes 조직의 헌법 제1원칙(5항 ①~⑤) + 헌법급
|
||||||
|
|
||||||
### 조직 핵심 자산 — Live 더미 파일 프로세스
|
### 조직 핵심 자산 — Live 더미 파일 프로세스
|
||||||
|
|
||||||
세션이 변경되기 전까지 갱신이 안 되는 문서의 경우, **더미 파일(`.live/`)과 조직 기억(`memory/org/`)을 활용해 세션이 변경되지 않아도 확인할 수 있는 프로세스를 구축했으며 이것은 우리의 핵심 자산이다.** 상세 규정: C34 PC 로컬 실시간 공유 중앙화 체계 — Live + memory (2026-04-18 헌법급 승격 + 2026-04-19 memory 편입, worktree 경계 무관 중앙 Junction + sync 4계층).
|
세션이 변경되기 전까지 갱신이 안 되는 문서의 경우, **더미 파일(`.live/`)과 조직 기억(`memory/org/`)을 활용해 세션이 변경되지 않아도 확인할 수 있는 프로세스를 구축했으며 이것은 우리의 핵심 자산이다.** `.live/`는 레포 내 일반 디렉토리(.gitignore)이며 UserPromptSubmit hook `scripts/live_inject.sh`이 변경분을 증분 주입하여 PC 내 다중 세션 간 즉시 공유한다.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -514,8 +514,8 @@ CLAUDE.md 신규 항목, 매 턴 로드 대상 확대, `MEMORY.md` 인덱스 확
|
||||||
### C16-1. PC 독립성 보장 메커니즘 (조직 공용 자산은 git 단일 SOT)
|
### C16-1. PC 독립성 보장 메커니즘 (조직 공용 자산은 git 단일 SOT)
|
||||||
- 조직 공용 승인은 **루트 `.claude/settings.json` 단일 파일**에 선언하며 git 커밋으로 유지한다 (루트가 SOT). 단일 세션 구조이므로 부서별 별도 settings.json 복제는 불필요.
|
- 조직 공용 승인은 **루트 `.claude/settings.json` 단일 파일**에 선언하며 git 커밋으로 유지한다 (루트가 SOT). 단일 세션 구조이므로 부서별 별도 settings.json 복제는 불필요.
|
||||||
- PC별 변동값(`paths.local.json`)은 `.gitignore`로 추적 제외하고 `paths.local.json.template`만 커밋한다.
|
- PC별 변동값(`paths.local.json`)은 `.gitignore`로 추적 제외하고 `paths.local.json.template`만 커밋한다.
|
||||||
- 사용자 메모리(`memory/org/`)는 setup 스크립트가 `~/.claude/projects/<해시>/memory` junction으로 자동 연결한다.
|
- 사용자 메모리(`memory/org/`)는 레포 git 추적 SOT로 직접 저장한다 (junction 폐기, 2026-04-26).
|
||||||
- **Live 증분 동기화 `.live/`**는 setup 스크립트 + SessionStart hook(`scripts/live_junction_ensure.sh`)이 `$HOME/.claude/nerdnavis-live/`로 junction 자동 연결한다 — **worktree 경계 무관 실시간 공유 보장** (C34 근원 해결, 2026-04-18 PD님 직접 지시 신설).
|
- **`.live/`**는 레포 내 일반 디렉토리(.gitignore). UserPromptSubmit hook `scripts/live_inject.sh`이 변경분을 증분 주입하여 PC 내 다중 세션 간 즉시 공유한다.
|
||||||
- `.claude/settings.local.json`은 `.gitignore` 대상이므로 **PC 이동 시 소실된다 — 조직 공용 승인은 절대 local 파일에 두지 않는다**.
|
- `.claude/settings.local.json`은 `.gitignore` 대상이므로 **PC 이동 시 소실된다 — 조직 공용 승인은 절대 local 파일에 두지 않는다**.
|
||||||
|
|
||||||
### C16-2. 세션 시작 표준 절차 (단일 세션 — 레포 루트에서 시작)
|
### C16-2. 세션 시작 표준 절차 (단일 세션 — 레포 루트에서 시작)
|
||||||
|
|
@ -1118,7 +1118,7 @@ C20-7 자기검증 5문항에 다음 항목 추가:
|
||||||
|
|
||||||
### C30-1. 점검 대상 프로젝트 (예시, 비한정)
|
### C30-1. 점검 대상 프로젝트 (예시, 비한정)
|
||||||
- 조직 레포(`BurningTimesAi`) — SessionStart hook으로 자동 점검 중
|
- 조직 레포(`BurningTimesAi`) — SessionStart hook으로 자동 점검 중
|
||||||
- Unity 프로젝트(`${UNITY_PROJECT_ROOT}`) — **외부 저장소**(예: `BurningTimes/DeckBuilding.git`). PC별 클론 경로는 `paths.local.json`에 등록. **SessionStart hook `scripts/unity_project_sync.sh`로 자동 pull 이행** (2026-04-20 PD 옵션 A 승인). git 레포 아닌 경우 C34-12 Degraded 운영으로 경고만 출력
|
- Unity 프로젝트(`${UNITY_PROJECT_ROOT}`) — **외부 저장소**(예: `BurningTimes/DeckBuilding.git`). PC별 클론 경로는 `paths.local.json`에 등록. **SessionStart hook `scripts/unity_project_sync.sh`로 자동 pull 이행** (2026-04-20 PD 옵션 A 승인). git 레포 아닌 경우 경고만 출력 (작업 차단 안 함)
|
||||||
- BT.Framework 코어 레포 — 수동 점검 필요
|
- BT.Framework 코어 레포 — 수동 점검 필요
|
||||||
- 차기 프로젝트 레포 — 추가 시 본 규칙 적용
|
- 차기 프로젝트 레포 — 추가 시 본 규칙 적용
|
||||||
- 기타 git 기반 모든 프로젝트
|
- 기타 git 기반 모든 프로젝트
|
||||||
|
|
@ -1164,162 +1164,6 @@ C20-7 자기검증 5문항에 다음 항목 추가:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## C34. PC 로컬 실시간 공유 중앙화 체계 — Live + memory (🏆 조직 핵심 자산, 2026-04-18 P25 승격 + 2026-04-19 memory 편입)
|
|
||||||
|
|
||||||
> **승격·격상·확장 근거**: 2026-04-18 worktree 격리로 P25 체계 실패 실증. PD님 직접 선언 — **"이 문제가 해결되지 않으면 앞으로 우리 조직은 유지될 수 없어"** · **"철저히 검토해서 관련 문서에 일괄 반영하고 재발되지 않도록 가능한 모든 수단을 써서 개선해"**. 2026-04-19 PD님 추가 선언 — **"근본 해결이 아닌 임시 방편은 코어 룰 위반. C34와 동급의 생존성 이슈는 '권고' 수준이 아니었어"** → memory junction 경계 이슈도 C34 패턴으로 근원 해결(옵션 A) 확장. 헌법 제1원칙 ⑤(세션·PC 연속성 보장)의 근본 위협 차단. 구 P25 경위: [폐기 규칙 아카이브](../../../공유/조직공지/폐기_규칙_아카이브.md).
|
|
||||||
|
|
||||||
### C34-1. 개요
|
|
||||||
세션 시작 후 변경된 설정·규칙·에이전트 정의·조직 기억·감사 로그를 **세션 갱신 없이 즉시 반영** + **모든 PC에서 일관 관리**하기 위한 **중앙 저장소 + Junction** 체계. 같은 PC 내 모든 Claude 세션이 네트워크 비용 0으로 실시간 공유하는 BurningTimes 고유 메커니즘이며, **worktree 경계에 관계없이 동일하게 작동**한다. 대상 자산은 **`.live/` (설정·규칙·에이전트 변경분, 2026-04-18 편입)** · **`memory/org/` (조직 기억·feedback 메모리, 2026-04-19 편입)** · **audit (C35 감사 로그·BYPASS 이력, 2026-04-20 #48 G 편입)** 3종이다.
|
|
||||||
|
|
||||||
### C34-2. 작동 경계 (2026-04-18 worktree 격리 해결 반영)
|
|
||||||
- ✅ 동일 PC 내 모든 Claude 세션 (**worktree 경계 무관** — C34-3 중앙 junction 구조)
|
|
||||||
- ✅ 레포 루트·worktree·다른 worktree에서 세션 시작해도 동일 파일시스템 참조
|
|
||||||
- ❌ 다른 PC 간 실시간 공유 (이 경우 `git push` 경유 명시 공유, P21-2)
|
|
||||||
|
|
||||||
### C34-3. 중앙 저장소 구조 (근원 해결 핵심)
|
|
||||||
|
|
||||||
#### 3종 중앙 저장소 병립 (2026-04-19 memory 편입 · 2026-04-20 audit 편입)
|
|
||||||
|
|
||||||
| 자산 | 중앙 실 저장 | 연결 대상 | git 추적 | 자동 설치 | 검증 |
|
|
||||||
|------|-------------|----------|----------|----------|------|
|
|
||||||
| **`.live/`** (설정·규칙·에이전트 변경분) | `$HOME/.claude/nerdnavis-live/` | 각 worktree `.live/` → 중앙 | ❌ (`.gitignore`) | `scripts/live_junction_ensure.sh` + setup 3.5 | verify_setup 2.5 |
|
|
||||||
| **`memory/org/`** (조직 기억·feedback) | `$HOME/.claude/nerdnavis-memory/` | Claude user memory junction 11+개 해시 폴더 → 중앙 | ✅ (git-tracked SOT 유지) | `scripts/memory_junction_ensure.sh` + setup 3.6 | verify_setup 2.6 |
|
|
||||||
| **audit** (C35 감사 로그·BYPASS 이력) | `$HOME/.claude/nerdnavis-audit/` | `$HOME/.claude/.nerdnavis_{auditor_calls,warning_ignored,bypass_log}` → 중앙 하위 | ✅ (git-tracked SOT: `memory/org/audit_logs/`) | `scripts/audit_junction_ensure.sh` + setup 3.7 | verify_setup 2.7 |
|
|
||||||
|
|
||||||
#### 공통 원칙
|
|
||||||
- **Sentinel 방식 판정**: `$CENTRAL_*/.*-junction-marker` 파일로 OS-agnostic 연결 확인
|
|
||||||
- **Junction/Symlink**: Windows `mklink /J` (또는 PowerShell `New-Item -ItemType Junction`) / Unix `ln -s`
|
|
||||||
- **Degraded 운영**: Junction 생성 실패 시 작업 차단 없이 경고 출력, 다음 세션에서 자동 재시도
|
|
||||||
- **Sentinel 자동 보호 (2026-04-19 신설)**: `live_junction_ensure.sh`가 SessionStart hook 외에 **UserPromptSubmit hook에도 편입**되어 매 프롬프트마다 marker 부재 시 자동 재생성. 세션 진행 중 외부 작업으로 sentinel 손실 시 손실 윈도우를 **1프롬프트 이내**로 축소. 근거: `memory/org/feedback_central_sentinel_loss.md` (2026-04-19 1회 실증)
|
|
||||||
|
|
||||||
#### `.live/` vs `memory/org/` 차별 (git 추적 양립)
|
|
||||||
|
|
||||||
`.live/`는 `.gitignore` 제외라 symlink 자유. `memory/org/`는 **git 추적 SOT**이므로 **레포 `memory/org/`는 실체 디렉토리 유지** + **sync 스크립트로 중앙 ↔ 레포 양방향 동기화** (git symlink 추적은 Windows core.symlinks 이슈·clone 후 접근 불가·한국어 경로 리스크 등 5종 근거로 거부).
|
|
||||||
|
|
||||||
#### `memory/org/` 동기화 4계층 (2026-04-19 신설)
|
|
||||||
|
|
||||||
| 시점 | 방식 | 스크립트 | 방향 |
|
|
||||||
|------|------|---------|------|
|
|
||||||
| SessionStart hook | 자동 | `sync_memory_repo_to_central.sh` | 레포 → 중앙 (pull 직후 중앙 최신화) |
|
|
||||||
| post-commit hook | 자동 | `sync_memory_central_to_repo.sh` | 중앙 → 레포 (commit 최신본 보장) |
|
|
||||||
| 수동 비상 | 개발자 명시 | `scripts/sync_memory.sh both` | 양방향 강제 sync |
|
|
||||||
| 감사관 주기 | 상시 | pm-auditor·dev-auditor | 분기 상태 감지 → 자동 복구 요청 |
|
|
||||||
|
|
||||||
#### 역방향 sync 충돌 3층 해결 (`memory/org/` 전용)
|
|
||||||
|
|
||||||
1. **기본 정책**: 레포가 SOT. pull 후 SessionStart hook이 중앙 덮어쓰기 (자동 백업)
|
|
||||||
2. **unflushed 중앙 변경 대피**: 중앙 mtime > 레포 mtime + 레포가 HEAD 커밋에 반영 안 된 상태면 `$CENTRAL_MEM.conflict-<stamp>/`로 대피 후 레포본 복원
|
|
||||||
3. **감사관 백업**: pm-auditor가 `*.conflict-*/` 발견 시 즉시 보고 + 수동 병합 안내
|
|
||||||
|
|
||||||
### C34-4. 대상 (세션 중 반영 불가 9종)
|
|
||||||
|
|
||||||
> **층위 주의 (2026-04-20 m-2 명료화)**: C34-1·C34-3 "**저장소 3종**"(`.live/`·`memory/org/`·audit)은 **중앙 통합 자산 분류**이고, 본 C34-4 "**대상 파일 9종**"은 **`.live/` 변경 증분 주입 대상 파일 목록**이다. 두 개념은 층위가 다르며 교차 관계 아님.
|
|
||||||
|
|
||||||
CLAUDE.md, CLAUDE.local.md, .claude/settings.json, settings.local.json, .claude/skills/*/SKILL.md, .claude/agents/*.md, .claude/rules/*.md, .claude/commands/*.md, .mcp.json
|
|
||||||
|
|
||||||
### C34-5. 변경 발생 시 절차
|
|
||||||
1. **원본 파일 즉시 수정** (다음 세션·다른 PC를 위해)
|
|
||||||
2. **`.live/{파일명}`에 변경 요지 append** — junction 경유로 중앙 저장소에 실제 기록
|
|
||||||
3. UserPromptSubmit hook `live_inject.sh`가 증분 감지 → **모든 세션(worktree 무관)에 자동 주입**
|
|
||||||
|
|
||||||
### C34-6. 증분 읽기 원리
|
|
||||||
- hook이 파일별 "마지막 읽은 줄 번호" 기록 (`$HOME/.claude/.nerdnavis_throttle/`)
|
|
||||||
- 다음 턴에 추가된 줄만 stdout 출력 → 에이전트 컨텍스트 주입
|
|
||||||
- 변경 없으면 출력 없음 (토큰 비용 0)
|
|
||||||
|
|
||||||
### C34-7. 서브에이전트 의무 (Agent 경계 보호 강화)
|
|
||||||
모든 에이전트는 작업 착수 전 `.live/` 디렉토리에 더미 파일이 존재하는지 확인하고, 존재하면 Read하여 변경사항을 인지한다.
|
|
||||||
- **절대 경로 `E:\BurningTimesAi\...` 등 하드코딩 금지** — 항상 `.live/` 상대 경로 또는 `git rev-parse --show-toplevel` 기반 경로 사용 (C34-11 위반 사건 재발 방지)
|
|
||||||
|
|
||||||
### C34-8. Write 권한
|
|
||||||
- **PM만 Write** (서브에이전트는 Read 전용)
|
|
||||||
- 각 더미 파일 최대 8,000자
|
|
||||||
|
|
||||||
### C34-9. "세션 공유" 시 동기화 (P21-2 연계)
|
|
||||||
1. 더미 내용이 원본에 이미 반영되어 있는지 확인
|
|
||||||
2. `.live/` 더미 파일 비우기 (README.md·.junction-marker 제외)
|
|
||||||
3. commit + push
|
|
||||||
|
|
||||||
### C34-10. C14 준수
|
|
||||||
- 변경 없는 턴: 토큰 비용 0 (sentinel 비교만)
|
|
||||||
- 변경 감지 턴: 추가분만 주입 (전체 재읽기 없음)
|
|
||||||
- 세션 시작 시: `live_junction_ensure.sh`가 junction 보장 후 `live_session_load.sh`가 전량 1회 로드
|
|
||||||
|
|
||||||
### C34-11. Agent 경계 보호 — 절대 경로 하드코딩 금지 (2026-04-18 실증 신설)
|
|
||||||
Agent 도구로 호출된 서브에이전트가 **절대 경로로 레포 루트를 하드코딩하면 worktree 경계를 넘어 main 체크아웃 디렉토리에 변경이 기록되는 이슈 실증** (2026-04-18 worktree 격리 2차 사건: 개발팀장 Agent가 `E:\BurningTimesAi\공유\...`로 Write 호출하여 본 워크트리가 아닌 레포 루트에 파일 생성).
|
|
||||||
|
|
||||||
**재발 방지 의무**:
|
|
||||||
- Agent 호출 프롬프트에 **"현재 cwd 기준 상대 경로 사용 의무"** 명시
|
|
||||||
- 산출물 경로는 `$(git rev-parse --show-toplevel)` 기준 또는 상대 경로
|
|
||||||
- PM은 Agent 응답 수령 직후 `git -C <레포루트> status` + 본 워크트리 `git status` 병행 확인
|
|
||||||
- 경계 이탈 발견 시 `git -C <레포루트> stash push -u -- 공유/` → 본 워크트리 `git stash pop`으로 복구
|
|
||||||
- 재발 방지 메모리: `memory/org/feedback_agent_path_boundary.md`
|
|
||||||
|
|
||||||
### C34-12. Degraded 운영 (작업 차단 금지 원칙)
|
|
||||||
Junction 생성 실패 시 **작업을 차단하지 않고** 로컬 `.live/` 일반 디렉토리로 동작(경고 출력). 이유:
|
|
||||||
- 조직 생존 해결이 또 다른 생산성 저하 역설 유발 방지
|
|
||||||
- Degraded 모드 감지 시 다음 세션 시작마다 자동 재시도 (최대 3회/세션)
|
|
||||||
- 영구 실패 시 관리자 권한 setup 스크립트 재실행 또는 `공유/조직공지/` 수동 이슈 보고
|
|
||||||
|
|
||||||
### C34-13. 연관 규칙·자산
|
|
||||||
- **헌법 제1원칙 ⑤** (세션·PC 연속성): 본 규칙의 상위 근거
|
|
||||||
- **C16-1** (PC 독립 셋업): Live junction 자동 연결이 본 조항에 편입됨 (2026-04-18 보강)
|
|
||||||
- **C17** (최신 세션 관리 기준): 세션 시작 시 junction 실체 검증 의무
|
|
||||||
- **C21-①** (내부 공유 상태): 핵심 수단
|
|
||||||
- **C18** (조직 공유 완료 판정): main push로의 전환
|
|
||||||
- **P21-2** (세션 공유 프로토콜): 다른 PC 간 실시간 공유의 명시 수단
|
|
||||||
- **`scripts/live_junction_ensure.sh`** (SessionStart hook 최우선 삽입)
|
|
||||||
- **`scripts/live_inject.sh`** (UserPromptSubmit hook)
|
|
||||||
- **`scripts/sync_signal.sh`** (post-commit hook 시그널)
|
|
||||||
|
|
||||||
### C34-14. 격상 경위 (조직 기억)
|
|
||||||
- **2026-04-16** P25 신설 (PD님 직접 지시)
|
|
||||||
- **2026-04-17** PD님 "조직 핵심 자산" 직접 명시
|
|
||||||
- **2026-04-18 오전** worktree 격리 실증 — 세션 B(nifty-wing) `.live/ping.md` Write가 세션 A(tender-liskov) hook에 미주입
|
|
||||||
- **2026-04-18 오후** PD님 조직 생존급 선언 + "가능한 모든 수단을 써서 개선" 지시 → **헌법급 승격 + 근원 해결(`.live/` 중앙 Junction) + Agent 경계 보호 동시 집행**
|
|
||||||
- **2026-04-19** memory junction 경계 이슈 재발 실증 — PM이 "권고" 수준으로 축소 보고 후 PD님 직접 지적: "근본 해결이 아닌 임시 방편은 코어 룰 위반. C34와 동급의 생존성 이슈는 '권고' 수준이 아니었어" → **옵션 A 집행 지시로 `memory/org/` 중앙화 C34 편입**. PM 과도 보수 해석 4회차 변종 재발. C42-7 E 체크리스트(구 C31-E 원형 이관 · 2026-04-24 BT9)에 "동급 생존성 이슈 축소 보고 감지" 항목 추가 안건화.
|
|
||||||
- 차기 프로젝트 착수 시 `setup_*` 스크립트 호출만으로 `.live/` + `memory/org/` 양체계 즉시 재사용
|
|
||||||
|
|
||||||
### C34-15. 신규 조직 설정·저장소 설계 시 worktree 경계 체크 의무 (2026-04-18 PD님 "유사 사례 재발 방지" 지시 수용)
|
|
||||||
|
|
||||||
조직에 **새로운 설정 파일·공유 저장소·hook·스크립트**를 도입할 때 반드시 `memory/org/feedback_worktree_isolation.md`의 **5개 질문 체크리스트**를 통과한다.
|
|
||||||
|
|
||||||
- **5개 질문**: (1) PC 단위 vs worktree 단위 판정 · (2) 경계 안전성 · (3) 중앙화 필요성 · (4) 레포 루트 vs worktree 실행 차이 · (5) Agent 경계 보호 (C34-11)
|
|
||||||
- **미통과 시**: 근원 해결안 포함하여 재설계 후 재상정
|
|
||||||
- **감사관 상시 점검**: pm-auditor·dev-auditor·plan-auditor 3종이 규칙·설정·스크립트·기획 자산 변경 시 본 체크리스트 수행 여부를 검증
|
|
||||||
- **실증 이력 누적**: `feedback_worktree_isolation.md` 말미 "관련 사건 로그" 표에 신 사건 append하여 패턴 학습
|
|
||||||
- **근거 사건**: 2026-04-18 단일 세션 내 4건 연속 실증 (`.live/` 격리 · Agent 절대 경로 유출 · memory junction 레포 루트 타깃 · paths.local.json worktree 누락) → PD님 "유사 사례 재발되지 않도록 교훈으로" 직접 지시
|
|
||||||
|
|
||||||
### C34-16. memory junction 특수 조항 (2026-04-19 신설)
|
|
||||||
|
|
||||||
`.live/`와 달리 `memory/org/`는 **git 추적 SOT**이므로 다음 특수 의무를 가진다.
|
|
||||||
|
|
||||||
1. **레포 `memory/org/` 실체 디렉토리 유지 의무** — 어떤 경우에도 junction/symlink로 전환 금지. PC clone 직후·setup 실행 전에도 `memory/org/` 접근 가능해야 함 (개발자·감사관 직접 Read 보장)
|
|
||||||
2. **sync 방향 규약** — 기본 SOT는 **레포 `memory/org/`**. 중앙 `$HOME/.claude/nerdnavis-memory/`는 Claude user memory 실시간 공유를 위한 **미러**이지 정본이 아님
|
|
||||||
3. **Write 경로 선택 의무 (신규, C34-11 확장)** — Write 도구로 memory 파일 기록 시 다음 중 택1:
|
|
||||||
- (우선) **본 worktree 절대 경로 직접 지정** (예: `E:\BurningTimesAi\.claude\worktrees\<name>\memory\org\...`) — junction 경유 회피, 본 worktree git status 즉시 반영
|
|
||||||
- (대체) `$HOME/.claude/projects/*/memory/...` — junction 경유로 중앙에 기록, 이후 post-commit hook이 레포로 자동 sync
|
|
||||||
- **혼용 금지** — 같은 세션에서 두 경로 혼용 시 분기 리스크. PM은 전 세션 단일 경로 유지
|
|
||||||
4. **마이그레이션 시 3층 백업 의무** — 레포 루트·worktree들·junction 타깃 3축 백업 후에만 중앙화 전환 (C6-1 원본 보호)
|
|
||||||
5. **정(正) 판정 규칙 A·B·C** — 초기 마이그레이션·충돌 시 (A) worktree에만 있는 파일은 worktree본 흡수, (B) 양쪽 내용 상이면 mtime 최신본, (C) junction 부재 해시 폴더의 일반 디렉토리 내용은 전수 스캔 후 중앙 흡수
|
|
||||||
6. **sync 스크립트 덮어쓰기 보호 의무 (2026-04-19 D안 신설)** — `sync_memory_central_to_repo.sh`는 **레포 mtime이 중앙보다 최신이면 덮어쓰기 스킵 + 경고** 출력. 본 세션 12차 commit(`1b409a0`) 직후 Edit 내용이 post-commit sync로 덮어씌워진 실증(2026-04-19)으로 근거 확립. 반대 방향(`sync_memory_repo_to_central.sh`)은 레포 SOT 정책 유지 + unflushed 중앙 대피 로직 유지. 근거: `memory/org/feedback_memory_sync_overwrite.md`
|
|
||||||
|
|
||||||
### C34-17. audit 자산 특수 조항 (2026-04-20 #48 G 집행 신설)
|
|
||||||
|
|
||||||
C35 감사 로그 3종(`auditor_calls`·`warning_ignored`·`bypass_log`)은 본래 **PC별 로컬 상태**로 설계되었으나, PD님 2026-04-20 직접 지시 "어떤 PC에서 작업을 하든 항상 일관 된 상태로 업무를 진행할 수 있도록 철저하게 동시화되어야만 해"에 따라 **중앙 통합** 전환. 헌법 제1원칙 ⑤(세션·PC 연속성) 직결.
|
|
||||||
|
|
||||||
1. **중앙 저장소 구조**: `$HOME/.claude/nerdnavis-audit/{auditor_calls,warning_ignored,bypass_log}/` 3종 하위 디렉토리
|
|
||||||
2. **junction 연결**: `$HOME/.claude/.nerdnavis_auditor_calls` 등 3개 경로를 각각 중앙 하위로 junction 연결. 기존 스크립트(`auditor_call_log.sh`·`auditor_guard.sh`·`audit_pattern_analyzer.sh`) 경로 참조 수정 불필요 (junction 경유로 자동 중앙 기록)
|
|
||||||
3. **BYPASS 플래그·사유 파일 동일 처리**: `$HOME/.claude/.nerdnavis_bypass_active`·`.nerdnavis_bypass_reason`도 중앙 단일 파일로 통합 (PC 간 BYPASS 상태 일관)
|
|
||||||
4. **git 추적 SOT**: `memory/org/audit_logs/` 디렉토리에 일자별 로그 sync (memory 패턴 준용). `YYYY-MM-DD/{calls,warnings,bypass}.log` 형태
|
|
||||||
5. **sync 4계층**: SessionStart(레포→중앙) · post-commit(중앙→레포) · 수동(`scripts/sync_audit.sh both`) · 감사관 주기
|
|
||||||
6. **PC별 PC 식별자 접두**: 레포 git 추적 SOT에 기록 시 `{hostname}_YYYY-MM-DD_calls.log` 형태로 PC별 구분 + 통합 집계. PC 간 로그 혼재 리스크는 hostname 접두로 해소
|
|
||||||
7. **역방향 sync 충돌**: `memory/org/` 로직 준용. 레포 mtime > 중앙 mtime이면 중앙 덮어쓰기 스킵 (C34-16 조항 6 동형)
|
|
||||||
8. **매니페스트 하위 디렉토리 편입 (2026-04-20 #50)**: `$HOME/.claude/nerdnavis-audit/manifest/{active,archived}/` 추가. C35-9 Layer 3 PreToolUse 차단 워크플로우의 집행 계획 저장. 파일 포맷 md + YAML frontmatter. active/*.md는 PM이 `manifest_register.sh`로 생성, post-commit 시 `manifest_archive.sh`로 archived 이동. PC 간 실시간 공유 불요 (각 PC 자기 매니페스트만 생성)
|
|
||||||
|
|
||||||
### C34-18. (placeholder — 필요 시 확장)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## C35. pm-auditor 의무 참여 체계 (2026-04-19 PD님 직접 지시 신설 — 조직 내 공유 작업 원천 차단)
|
## C35. pm-auditor 의무 참여 체계 (2026-04-19 PD님 직접 지시 신설 — 조직 내 공유 작업 원천 차단)
|
||||||
|
|
||||||
|
|
@ -1380,7 +1224,6 @@ pm-auditor 자신의 호출 이력도 감사 대상. 특정 작업에서 **호
|
||||||
|
|
||||||
- **C29** 업무 자율 수행 (감사관 참여는 PM 자율에 결합되는 안전망)
|
- **C29** 업무 자율 수행 (감사관 참여는 PM 자율에 결합되는 안전망)
|
||||||
- **C42** 사전 검증 절차 (C42-7 F 그룹에 C35 준수 문항 · 구 C31 → C42-7 이관 2026-04-24 BT9)
|
- **C42** 사전 검증 절차 (C42-7 F 그룹에 C35 준수 문항 · 구 C31 → C42-7 이관 2026-04-24 BT9)
|
||||||
- **C34** PC 로컬 실시간 공유 중앙화 (감사관 호출 결과 축적의 인프라)
|
|
||||||
- **C33** 조직 업무 공유·기록 체계 일관성 (3축 감사의 상위 규칙)
|
- **C33** 조직 업무 공유·기록 체계 일관성 (3축 감사의 상위 규칙)
|
||||||
|
|
||||||
### C35-9. pm-auditor 호출 강제 hook 3층 구조 (2026-04-20 #50 근본 해결 — 차단 + 해제 워크플로우)
|
### C35-9. pm-auditor 호출 강제 hook 3층 구조 (2026-04-20 #50 근본 해결 — 차단 + 해제 워크플로우)
|
||||||
|
|
@ -1401,7 +1244,7 @@ pm-auditor 자신의 호출 이력도 감사 대상. 특정 작업에서 **호
|
||||||
**차단 조건**:
|
**차단 조건**:
|
||||||
- `scripts/auditor_gate.sh` PreToolUse hook (Edit/Write/MultiEdit/Bash(git commit·push))
|
- `scripts/auditor_gate.sh` PreToolUse hook (Edit/Write/MultiEdit/Bash(git commit·push))
|
||||||
- 대상: 의무 영역(SKILL.md·memory/org/feedback_*·조직공지·PD_지시_트래킹) 또는 git commit/push
|
- 대상: 의무 영역(SKILL.md·memory/org/feedback_*·조직공지·PD_지시_트래킹) 또는 git commit/push
|
||||||
- 활성 매니페스트(`$HOME/.claude/nerdnavis-audit/manifest/active/*.md`) **부재** → `exit 2` 차단
|
- 활성 매니페스트(`$HOME/.claude/burningtimes-audit/manifest/active/*.md`) **부재** → `exit 2` 차단
|
||||||
- 매니페스트 있으나 대상 파일이 **target_files 범위 밖** → `exit 2` 차단
|
- 매니페스트 있으나 대상 파일이 **target_files 범위 밖** → `exit 2` 차단
|
||||||
- BYPASS 플래그로 **우회 불가** (M-1 수용 — 근본 해결 자체 우회 차단)
|
- BYPASS 플래그로 **우회 불가** (M-1 수용 — 근본 해결 자체 우회 차단)
|
||||||
|
|
||||||
|
|
@ -1410,7 +1253,7 @@ pm-auditor 자신의 호출 이력도 감사 대상. 특정 작업에서 **호
|
||||||
2. `bash scripts/manifest_register.sh <plan_id> <target_files_csv> <goal>` 명시 실행 → 매니페스트 생성
|
2. `bash scripts/manifest_register.sh <plan_id> <target_files_csv> <goal>` 명시 실행 → 매니페스트 생성
|
||||||
3. Edit/Write 재시도 → target_files 범위 내면 자동 통과
|
3. Edit/Write 재시도 → target_files 범위 내면 자동 통과
|
||||||
|
|
||||||
**매니페스트 구조** (md + YAML frontmatter, C34-15 5문항 체크 통과):
|
**매니페스트 구조** (md + YAML frontmatter):
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
plan_id: 2026-04-20_134530
|
plan_id: 2026-04-20_134530
|
||||||
|
|
@ -1430,14 +1273,6 @@ completion_criteria: "commit + push 완료"
|
||||||
- 매니페스트 밖 수정 있으면 경고 (범위 축소 조작 감지)
|
- 매니페스트 밖 수정 있으면 경고 (범위 축소 조작 감지)
|
||||||
- 매니페스트 `archived/` 이동
|
- 매니페스트 `archived/` 이동
|
||||||
|
|
||||||
#### C34-15 worktree 경계 5문항 체크 결과 (m-2 수용)
|
|
||||||
|
|
||||||
1. **PC 단위 vs worktree 단위**: PC 단위 + hostname 필드로 PC 구분. worktree 경계 무관
|
|
||||||
2. **경계 안전성**: C34-17 audit junction 경유 (중앙 저장소 hostname 폴더 격리)
|
|
||||||
3. **중앙화 필요성**: 각 PC가 자기 매니페스트만 생성. PC 간 실시간 공유 불요. post-commit sync로 레포 경유 충분
|
|
||||||
4. **레포 루트 vs worktree 실행 차이**: `$HOME/.claude/` 경로라 worktree 무관
|
|
||||||
5. **Agent 경계 보호**: target_files는 **레포 상대 경로** 강제 (C34-11 준수)
|
|
||||||
|
|
||||||
#### 한계 및 잔여 리스크 (C35-7 진실 인정)
|
#### 한계 및 잔여 리스크 (C35-7 진실 인정)
|
||||||
|
|
||||||
본 차단 방식도 **완벽 강제 아님**:
|
본 차단 방식도 **완벽 강제 아님**:
|
||||||
|
|
@ -2077,7 +1912,6 @@ C42-7 체크리스트 K 그룹 신설:
|
||||||
- [ ] C28: md 파일 수정 전 PD님에게 승인을 요청하는 표현이 있는가? (있으면 제거)
|
- [ ] C28: md 파일 수정 전 PD님에게 승인을 요청하는 표현이 있는가? (있으면 제거)
|
||||||
- [ ] C29-4: 완료 작업에 대한 PD 지시 로그·대화로그·소통 채널·Live 더미 동기화를 수행했는가?
|
- [ ] C29-4: 완료 작업에 대한 PD 지시 로그·대화로그·소통 채널·Live 더미 동기화를 수행했는가?
|
||||||
- [ ] C30: 대상 프로젝트(Unity·코어 프레임워크 등) 수정 전 git 최신 상태 점검을 수행했는가?
|
- [ ] C30: 대상 프로젝트(Unity·코어 프레임워크 등) 수정 전 git 최신 상태 점검을 수행했는가?
|
||||||
- [ ] **C34-16**: memory 파일 Write 시 본 worktree 절대 경로 직접 지정했는가? 아니면 user memory 경로 사용 시 동일 세션 내 일관 유지? (혼용 금지)
|
|
||||||
- [ ] **C6-1**: 신규·수정 스크립트의 백업 로직이 `{원본명}.bak_{YYYYMMDD_HHMM}.{확장자}` 표준 포맷을 따르는가? (`.bak-*`·Unix timestamp 금지)
|
- [ ] **C6-1**: 신규·수정 스크립트의 백업 로직이 `{원본명}.bak_{YYYYMMDD_HHMM}.{확장자}` 표준 포맷을 따르는가? (`.bak-*`·Unix timestamp 금지)
|
||||||
- [ ] **P28-8**: 본 응답에 **PD님 별도 히스토리 요청 없는 종결·완료·폐기 확정 안건**이 재언급되지 않았는가? "고착·영구 종료·재논의 대상 아님" 표현 등장 시 삭제 검토
|
- [ ] **P28-8**: 본 응답에 **PD님 별도 히스토리 요청 없는 종결·완료·폐기 확정 안건**이 재언급되지 않았는가? "고착·영구 종료·재논의 대상 아님" 표현 등장 시 삭제 검토
|
||||||
- [ ] **안건 프레이밍 중복**: "PM 재량"과 "PD 결정" 카테고리에 동일 안건이 중복 등장하지 않는가? PD님 이전 턴 결정 사안을 재질문하지 않는가?
|
- [ ] **안건 프레이밍 중복**: "PM 재량"과 "PD 결정" 카테고리에 동일 안건이 중복 등장하지 않는가? PD님 이전 턴 결정 사안을 재질문하지 않는가?
|
||||||
|
|
@ -2098,7 +1932,7 @@ C42-7 체크리스트 K 그룹 신설:
|
||||||
|
|
||||||
#### E. 기존 조직 자산 우선 활용 확인
|
#### E. 기존 조직 자산 우선 활용 확인
|
||||||
- [ ] 새로운 문제·지시에 대한 해법을 설계할 때, **조직에 이미 있는 체계** 중 본 문제를 해결할 수 있는 것을 가장 먼저 검토했는가?
|
- [ ] 새로운 문제·지시에 대한 해법을 설계할 때, **조직에 이미 있는 체계** 중 본 문제를 해결할 수 있는 것을 가장 먼저 검토했는가?
|
||||||
- 필수 검토 대상: **C34 Live 증분 동기화**(🏆 조직 핵심 자산) · 3축 감사 · memory/feedback 패턴 · 기존 `scripts/`·`git-hooks`·UserPromptSubmit/SessionStart/SessionEnd hook
|
- 필수 검토 대상: **`.live/` 디렉토리 + UserPromptSubmit `live_inject.sh` hook** · 3축 감사 · memory/feedback 패턴 · 기존 `scripts/`·`git-hooks`·UserPromptSubmit/SessionStart/SessionEnd hook
|
||||||
- [ ] 기존 자산을 무시하고 새로 만들거나 양적 조정(숫자 단순 변경)으로 회피하지 않았는가?
|
- [ ] 기존 자산을 무시하고 새로 만들거나 양적 조정(숫자 단순 변경)으로 회피하지 않았는가?
|
||||||
- [ ] PD님 지시를 **결과 단독으로 축소 해석**하지 않고, **설계 경로까지 암묵 포함**으로 읽었는가?
|
- [ ] PD님 지시를 **결과 단독으로 축소 해석**하지 않고, **설계 경로까지 암묵 포함**으로 읽었는가?
|
||||||
- [ ] **자산 가치 보존 ≠ 저장 위치 보존** 구분했는가? — 자산(조직 기억·교훈·폐기 선언·기각 근거)의 **가치는 반드시 유지**하되 **저장 위치는 C14 관점에서 최적화 가능**. 활성 본문에 고정 = 과도 보수 해석. 외부 SOT(`memory/org/`·`공유/조직공지/폐기_규칙_아카이브.md`)로 이관하되 1줄 참조 유지 방식 검토. 근거: `memory/org/feedback_pm_over_conservative_interpretation.md`
|
- [ ] **자산 가치 보존 ≠ 저장 위치 보존** 구분했는가? — 자산(조직 기억·교훈·폐기 선언·기각 근거)의 **가치는 반드시 유지**하되 **저장 위치는 C14 관점에서 최적화 가능**. 활성 본문에 고정 = 과도 보수 해석. 외부 SOT(`memory/org/`·`공유/조직공지/폐기_규칙_아카이브.md`)로 이관하되 1줄 참조 유지 방식 검토. 근거: `memory/org/feedback_pm_over_conservative_interpretation.md`
|
||||||
|
|
@ -2209,7 +2043,7 @@ PD가 **단순 반복 업무 카탈로그 매칭** 작업 지시 시:
|
||||||
- **PD 지시 즉시 PD 지시 로그 등록** (P19) — 팀장 자체 책임
|
- **PD 지시 즉시 PD 지시 로그 등록** (P19) — 팀장 자체 책임
|
||||||
- 작업 진행·완료·중단 4단계 가시화 (C13)
|
- 작업 진행·완료·중단 4단계 가시화 (C13)
|
||||||
- 완료 시 PM 사후 통보 — Live 더미 또는 대화로그 엔트리 (C29-4)
|
- 완료 시 PM 사후 통보 — Live 더미 또는 대화로그 엔트리 (C29-4)
|
||||||
- C39·C34-11 표준 헤더 자체 적용 (산하 호출 시)
|
- C39·C5·C23 표준 헤더 자체 적용 (산하 호출 시)
|
||||||
- C36-2 판정 매칭 시 PM 안건 상신 (헌법·외연 변경 영역)
|
- C36-2 판정 매칭 시 PM 안건 상신 (헌법·외연 변경 영역)
|
||||||
|
|
||||||
### C43-5. PM 사후 트래킹 의무
|
### C43-5. PM 사후 트래킹 의무
|
||||||
|
|
@ -3158,11 +2992,10 @@ BurningTimes의 게임 개발 프로젝트에서 **기획팀은 모든 산출물
|
||||||
|
|
||||||
병렬 호출 시 다음 전수 준수:
|
병렬 호출 시 다음 전수 준수:
|
||||||
|
|
||||||
- **C34-11 Agent 경계 보호** — 모든 호출 프롬프트에 "상대 경로 사용 · 절대 경로 금지" 명시
|
- **C5·C23 Agent 경계 보호** — 모든 호출 프롬프트에 "상대 경로 사용 · 절대 경로 금지" 명시
|
||||||
- **C23 역할 연기 금지** — 팀장이 병렬 호출 결과 종합 시 **실제 호출 검증** (tool_use 결과 첨부 의무)
|
- **C23 역할 연기 금지** — 팀장이 병렬 호출 결과 종합 시 **실제 호출 검증** (tool_use 결과 첨부 의무)
|
||||||
- **C27 로그 갱신 확인** — 병렬 호출 수만큼 PD 지시 로그 갱신 항목 증가 가능성 점검
|
- **C27 로그 갱신 확인** — 병렬 호출 수만큼 PD 지시 로그 갱신 항목 증가 가능성 점검
|
||||||
- **C42-7 D 그룹 축소 프레이밍 방지** — 각 서브에이전트 프롬프트 실체 범위 검증
|
- **C42-7 D 그룹 축소 프레이밍 방지** — 각 서브에이전트 프롬프트 실체 범위 검증
|
||||||
- **C34-15 5문항 체크** — 병렬 호출이 신규 설정·저장소 도입 시 전수 수행
|
|
||||||
|
|
||||||
### P33-5. C35-1 #7과의 경계
|
### P33-5. C35-1 #7과의 경계
|
||||||
|
|
||||||
|
|
@ -3194,7 +3027,7 @@ P33은 **병렬 호출 조율 원칙** (위임 자체가 아닌 병렬 패턴).
|
||||||
- **C14** 토큰 최소화 우선 설계 (본 원칙 상위)
|
- **C14** 토큰 최소화 우선 설계 (본 원칙 상위)
|
||||||
- **C23** 허위 보고·역할 연기 금지
|
- **C23** 허위 보고·역할 연기 금지
|
||||||
- **C27** Agent 호출 완료 시 PD 지시 로그 갱신 의무
|
- **C27** Agent 호출 완료 시 PD 지시 로그 갱신 의무
|
||||||
- **C34-11** Agent 경계 보호
|
- **C5·C23** Agent 경계 보호 (절대 경로 하드코딩 금지)
|
||||||
- **C35-1** pm-auditor 의무 호출 (매니페스트·pm-auditor 의무)
|
- **C35-1** pm-auditor 의무 호출 (매니페스트·pm-auditor 의무)
|
||||||
- **C42-7 D 그룹** Task 프롬프트 축소 프레이밍 방지
|
- **C42-7 D 그룹** Task 프롬프트 축소 프레이밍 방지
|
||||||
- **P7** 위임 원칙
|
- **P7** 위임 원칙
|
||||||
|
|
@ -3204,7 +3037,7 @@ P33은 **병렬 호출 조율 원칙** (위임 자체가 아닌 병렬 패턴).
|
||||||
|
|
||||||
## 교훈 및 노하우
|
## 교훈 및 노하우
|
||||||
|
|
||||||
> **2026-04-18 외부화 완료**: 교훈 상세는 `memory/org/feedback_*` 20+종 단일 SOT + [`memory/org/MEMORY.md`](../../../memory/org/MEMORY.md) 인덱스로 이관. 본 섹션은 **인덱스 참조 1줄**만 유지하여 SKILL.md 고정비 최적화 (C14-4 참조 무결성 + 원칙 1 외연 "고정비 문서 내 활성 결합 없는 섹션 외부화" 적용). 근거: 2026-04-18 pm-auditor·plan-auditor 공통 Major 권고. **주의**: feedback 메모리는 반드시 `memory/org/` 하위 저장 — C16-1 junction 연결 대상이며 `memory/` 루트는 자동 메모리 시스템 접근 불가.
|
> **2026-04-18 외부화 완료**: 교훈 상세는 `memory/org/feedback_*` 20+종 단일 SOT + [`memory/org/MEMORY.md`](../../../memory/org/MEMORY.md) 인덱스로 이관. 본 섹션은 **인덱스 참조 1줄**만 유지하여 SKILL.md 고정비 최적화 (C14-4 참조 무결성 + 원칙 1 외연 "고정비 문서 내 활성 결합 없는 섹션 외부화" 적용). 근거: 2026-04-18 pm-auditor·plan-auditor 공통 Major 권고. **주의**: feedback 메모리는 반드시 `memory/org/` 하위 저장 — `memory/` 루트는 자동 메모리 시스템 접근 불가.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
# `.live/` 실시간 공유 체계 — 실무 사용 안내
|
|
||||||
|
|
||||||
> **역할 분담**: 본 README는 **실무 사용 쿡북**이며, 규칙·헌법급 정의는 [`.claude/skills/너드나비스-코어룰/SKILL.md`](../../.claude/skills/너드나비스-코어룰/SKILL.md) **C34** 단일 SOT. 본 파일은 레포 `.live/` 경로에서 junction 경유로 접근하며, 중앙 저장소는 `$HOME/.claude/nerdnavis-live/`.
|
|
||||||
|
|
||||||
## 1. `.live/` 용도
|
|
||||||
|
|
||||||
세션 중 변경된 설정·규칙·에이전트 정의·조직 기억을 **세션 갱신 없이 즉시 반영**하기 위한 PC 로컬 실시간 공유 채널. 같은 PC 내 모든 세션(worktree 경계 무관)이 자동 주입받는다.
|
|
||||||
|
|
||||||
## 2. 더미 파일 패턴
|
|
||||||
|
|
||||||
- 파일명: `{변경 대상 파일명 또는 주제}.md`
|
|
||||||
- 예: `CLAUDE.md.live`·`C34_memory_확장.md`·`pd_지시_50.md`
|
|
||||||
- 본문: 변경 요지 append-only. 최대 8,000자
|
|
||||||
|
|
||||||
## 3. 생명주기
|
|
||||||
|
|
||||||
| 시점 | 상태 | 처리 |
|
|
||||||
|------|------|------|
|
|
||||||
| 변경 발생 | PM이 `.live/{파일명}` append | 원본 수정과 동시 수행 |
|
|
||||||
| 같은 PC 다른 세션 | UserPromptSubmit hook 자동 주입 | 증분만 읽기 (토큰 비용 최소) |
|
|
||||||
| "세션 공유"·push 시점 | P21-2 트리거 | 원본 반영 확인 후 `.live/` 비움(README.md·.junction-marker 제외) + commit + push |
|
|
||||||
|
|
||||||
## 4. 세션 간 공유 시나리오
|
|
||||||
|
|
||||||
### 같은 PC 내
|
|
||||||
1. 세션 A에서 원본 수정 + `.live/` append
|
|
||||||
2. 세션 B 다음 프롬프트 → UserPromptSubmit hook `live_inject.sh` 증분 주입
|
|
||||||
3. 즉시 인지 (git 개입 없음)
|
|
||||||
|
|
||||||
### 다른 PC 간
|
|
||||||
1. 세션 A "세션 공유" (P21-2) → `.live/` 비움 + commit + push
|
|
||||||
2. 세션 B (다른 PC) "세션 갱신" (P21) → git pull → SessionStart hook 자동 복원
|
|
||||||
|
|
||||||
## 5. 참조
|
|
||||||
|
|
||||||
- **SKILL.md C34** — PC 로컬 실시간 공유 중앙화 체계 (단일 SOT, 헌법급)
|
|
||||||
- **SKILL.md C21** — 작업 완료 즉시 공유·PM 능동 확인 (내부 공유/공유 완료 2단계)
|
|
||||||
- **scripts/live_junction_ensure.sh** — junction 자동 보장 (SessionStart + UserPromptSubmit hook)
|
|
||||||
- **scripts/live_inject.sh** — UserPromptSubmit hook 증분 주입
|
|
||||||
- **scripts/live_session_load.sh** — SessionStart 전량 1회 로드
|
|
||||||
|
|
||||||
## 변경 이력
|
|
||||||
|
|
||||||
- 2026-04-19: 전 세션 초기 sentinel 손실 시 원본 소실
|
|
||||||
- 2026-04-20: #48 D 집행으로 복구. 중앙 저장소에 신규 작성 (모든 PC 자동 동기화)
|
|
||||||
|
|
@ -33,7 +33,7 @@ PD님
|
||||||
| 구분 | 성격 | 변경 권한 |
|
| 구분 | 성격 | 변경 권한 |
|
||||||
|------|------|----------|
|
|------|------|----------|
|
||||||
| **헌법 제1원칙** (5항 ①~⑤) | 조직의 **최상위 원칙** | **PD님만** 수정 가능 (2026-04-18 전면 재작성) |
|
| **헌법 제1원칙** (5항 ①~⑤) | 조직의 **최상위 원칙** | **PD님만** 수정 가능 (2026-04-18 전면 재작성) |
|
||||||
| **핵심 규칙** (코어 룰, C1~C50, C31 폐기) | 조직의 **헌법** | **PD님만** 수정 가능 (총괄PM이 팀장급과 상의 후 제안 → PD님 승인) |
|
| **핵심 규칙** (코어 룰, C1~C50, C31·C34 폐기) | 조직의 **헌법** | **PD님만** 수정 가능 (총괄PM이 팀장급과 상의 후 제안 → PD님 승인) |
|
||||||
| **프로젝트 규칙** (조직 규칙, P1~P33) | 조직의 **법률** | **팀장급 재량 + PD님 최종 승인 필수** (2026-04-18 개정 — 사전 승인 체계) |
|
| **프로젝트 규칙** (조직 규칙, P1~P33) | 조직의 **법률** | **팀장급 재량 + PD님 최종 승인 필수** (2026-04-18 개정 — 사전 승인 체계) |
|
||||||
|
|
||||||
### 헌법 제1원칙 (2026-04-18 PD님 직접 전면 재작성)
|
### 헌법 제1원칙 (2026-04-18 PD님 직접 전면 재작성)
|
||||||
|
|
@ -59,7 +59,6 @@ PD님
|
||||||
- **C28** 문서 수정 무승인 원칙 / **C29** 업무 자율 수행 체계 (조직 생존급)
|
- **C28** 문서 수정 무승인 원칙 / **C29** 업무 자율 수행 체계 (조직 생존급)
|
||||||
- **C30** git 동기화 프로젝트 작업 전 최신 상태 점검
|
- **C30** git 동기화 프로젝트 작업 전 최신 상태 점검
|
||||||
- **C32** 대화로그 기록 의무 (헌법급, 구 P22·P24 흡수) / **C33** 조직 업무 공유·기록 체계 일관성 보장 (헌법급, 구 P26·P27 흡수)
|
- **C32** 대화로그 기록 의무 (헌법급, 구 P22·P24 흡수) / **C33** 조직 업무 공유·기록 체계 일관성 보장 (헌법급, 구 P26·P27 흡수)
|
||||||
- 🏆 **C34** PC 로컬 실시간 공유 중앙화 체계 — Live + memory + audit (헌법급·조직 핵심 자산, 구 P25 승격 + 2026-04-19 memory 편입 + 2026-04-20 audit 편입, 3종 중앙 Junction + sync 4계층)
|
|
||||||
- **C35** pm-auditor 의무 참여 체계 (2026-04-19 신설 — 조직 내 공유 작업 7종 사전 호출 의무 · **C35-9 Layer 3 전면 개정 2026-04-20 #50**: PostToolUse 경고·30분 윈도우 폐기 → PreToolUse 차단 + 해제 워크플로우 근본 해결 · 매니페스트(`auditor_gate.sh`·`manifest_register.sh`·`manifest_archive.sh`) · BYPASS 우회 불가 · C35-10 장기 패턴 분석)
|
- **C35** pm-auditor 의무 참여 체계 (2026-04-19 신설 — 조직 내 공유 작업 7종 사전 호출 의무 · **C35-9 Layer 3 전면 개정 2026-04-20 #50**: PostToolUse 경고·30분 윈도우 폐기 → PreToolUse 차단 + 해제 워크플로우 근본 해결 · 매니페스트(`auditor_gate.sh`·`manifest_register.sh`·`manifest_archive.sh`) · BYPASS 우회 불가 · C35-10 장기 패턴 분석)
|
||||||
- **C36** PM 자율 판단 범위 상한 — 방향·원칙 수준 축소·희석 금지 (2026-04-20 헌법급 신설, 판정 기준 3종 · 실질 필요성 4문항 적용 범위 제한 · C42-7 H 체크리스트 편입 · pm-auditor 5-E 연계)
|
- **C36** PM 자율 판단 범위 상한 — 방향·원칙 수준 축소·희석 금지 (2026-04-20 헌법급 신설, 판정 기준 3종 · 실질 필요성 4문항 적용 범위 제한 · C42-7 H 체크리스트 편입 · pm-auditor 5-E 연계)
|
||||||
- **C37** 규칙 문서 관리 원칙 (2026-04-20 헌법급 신설 — 중복 금지·의미 보존·참조 무결성·표기법 통일·순서 정렬·변경 아카이브·3중 전파 8조항. 규칙 추가·변경 시 본 원칙 준수 의무)
|
- **C37** 규칙 문서 관리 원칙 (2026-04-20 헌법급 신설 — 중복 금지·의미 보존·참조 무결성·표기법 통일·순서 정렬·변경 아카이브·3중 전파 8조항. 규칙 추가·변경 시 본 원칙 준수 의무)
|
||||||
|
|
@ -76,7 +75,7 @@ PD님
|
||||||
- **C48** 불필요한 Agent Task 배제 최우선 (2026-04-24 BT12 헌법급 신설 — Task 호출 직전 3자문 의무·C35·C39·C42·C43 의무 호출은 적용 외·PM·팀장 직접 처리 우선)
|
- **C48** 불필요한 Agent Task 배제 최우선 (2026-04-24 BT12 헌법급 신설 — Task 호출 직전 3자문 의무·C35·C39·C42·C43 의무 호출은 적용 외·PM·팀장 직접 처리 우선)
|
||||||
- **C49** 팀장 설계 → 팀원 작업 → 팀장 검증 표준 프로세스 (2026-04-24 BT12 헌법급·전 조직 신설 — 1 팀장(Opus) 설계 · 2 팀원(Sonnet) 작업 · 3 팀장(Opus) 검증 · 단순 반복 카탈로그 v1 잠정 절충 · PD 후속 결정 영역)
|
- **C49** 팀장 설계 → 팀원 작업 → 팀장 검증 표준 프로세스 (2026-04-24 BT12 헌법급·전 조직 신설 — 1 팀장(Opus) 설계 · 2 팀원(Sonnet) 작업 · 3 팀장(Opus) 검증 · 단순 반복 카탈로그 v1 잠정 절충 · PD 후속 결정 영역)
|
||||||
- **C50** 과도한 토큰 소비 사전 PD 승인 의무 (2026-04-24 BT12 헌법급 신설 — PM·팀장 자체 판단·추정 분량·분할·간소화·생략 옵션 사전 보고 의무·수치 기준 고정 금지)
|
- **C50** 과도한 토큰 소비 사전 PD 승인 의무 (2026-04-24 BT12 헌법급 신설 — PM·팀장 자체 판단·추정 분량·분할·간소화·생략 옵션 사전 보고 의무·수치 기준 고정 금지)
|
||||||
- 폐기 규칙: **C31** (2026-04-24 C42 대체) / 폐기·통합·강등·재활용 규칙 상세: [폐기 규칙 아카이브](공유/조직공지/폐기_규칙_아카이브.md)
|
- 폐기 규칙: **C31** (2026-04-24 C42 대체) · **C34** (2026-04-26 worktree 자동 생성·Junction 체계 폐기) / 폐기·통합·강등·재활용 규칙 상세: [폐기 규칙 아카이브](공유/조직공지/폐기_규칙_아카이브.md)
|
||||||
|
|
||||||
### 프로젝트 규칙 요약 (활성 24개, 번호 구멍 허용)
|
### 프로젝트 규칙 요약 (활성 24개, 번호 구멍 허용)
|
||||||
- **P1~P11** 기본 운영 (호칭·현황·이슈·토큰·의사결정·커뮤니케이션·위임·모델·트래킹·노하우·자율효율화)
|
- **P1~P11** 기본 운영 (호칭·현황·이슈·토큰·의사결정·커뮤니케이션·위임·모델·트래킹·노하우·자율효율화)
|
||||||
|
|
@ -84,7 +83,7 @@ PD님
|
||||||
- **P18** 설계 문서화 의무 / **P19** PD님 직접 지시 트래킹 및 공유 의무
|
- **P18** 설계 문서화 의무 / **P19** PD님 직접 지시 트래킹 및 공유 의무
|
||||||
- **P21** 세션 갱신 프로토콜 / **P21-2** 세션 공유 프로토콜
|
- **P21** 세션 갱신 프로토콜 / **P21-2** 세션 공유 프로토콜
|
||||||
- **P23** 기획 결정 재량 범위
|
- **P23** 기획 결정 재량 범위
|
||||||
- **P28** 조직 업무 현황 보고 표준 포맷 (P25는 C34로 헌법급 승격 — 2026-04-18)
|
- **P28** 조직 업무 현황 보고 표준 포맷
|
||||||
- **P29** 코어 코드 프레임워크 프로젝트 규칙 (조직 자산 계승·차기 프로젝트 활용·현 프로젝트 인사이트)
|
- **P29** 코어 코드 프레임워크 프로젝트 규칙 (조직 자산 계승·차기 프로젝트 활용·현 프로젝트 인사이트)
|
||||||
- **P30** 재미 우선 원칙 (기획팀 전용) / **P31** PD님 경어 사용 원칙
|
- **P30** 재미 우선 원칙 (기획팀 전용) / **P31** PD님 경어 사용 원칙
|
||||||
- **P32** 내부 계획 맥락 분할·순차 진행 원칙 (2026-04-24 BT9 신설 — 전체 설계 유지 + 맥락 단위 분할 집행)
|
- **P32** 내부 계획 맥락 분할·순차 진행 원칙 (2026-04-24 BT9 신설 — 전체 설계 유지 + 맥락 단위 분할 집행)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
> 🟢 **역사 보존 (해결 완료 2026-04-26)** — worktree 자동 생성·Junction 체계 폐기로 본 패턴 구조 차단. 본 메모리는 조직 학습 자산으로 보존.
|
||||||
|
|
||||||
---
|
---
|
||||||
name: Agent 호출 시 절대 경로 하드코딩 금지 — worktree 경계 보호
|
name: Agent 호출 시 절대 경로 하드코딩 금지 — worktree 경계 보호
|
||||||
description: 2026-04-18 worktree 격리 2차 사건. Agent가 절대 경로로 Write 호출 시 레포 루트로 산출물 유출. stash 이관 복구 절차 + 재발 방지 체크리스트
|
description: 2026-04-18 worktree 격리 2차 사건. Agent가 절대 경로로 Write 호출 시 레포 루트로 산출물 유출. stash 이관 복구 절차 + 재발 방지 체크리스트
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
> 🟢 **역사 보존 (해결 완료 2026-04-26)** — worktree 자동 생성·Junction 체계 폐기로 본 패턴 구조 차단. 본 메모리는 조직 학습 자산으로 보존.
|
||||||
|
|
||||||
---
|
---
|
||||||
name: C34 중앙 저장소 sentinel(`.junction-marker`) 손실 — 자동 보호 강화
|
name: C34 중앙 저장소 sentinel(`.junction-marker`) 손실 — 자동 보호 강화
|
||||||
description: 2026-04-19 다른 세션 verify_setup이 marker 부재 정확 감지. 본 worktree 동시 실측으로 confirm. git 외 작업으로 sentinel 손실. 본 사건 직접 차단 안건 A(UserPromptSubmit hook 편입)로 재발 윈도우 1프롬프트 이내로 축소
|
description: 2026-04-19 다른 세션 verify_setup이 marker 부재 정확 감지. 본 worktree 동시 실측으로 confirm. git 외 작업으로 sentinel 손실. 본 사건 직접 차단 안건 A(UserPromptSubmit hook 편입)로 재발 윈도우 1프롬프트 이내로 축소
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
> 🟢 **역사 보존 (해결 완료 2026-04-26)** — worktree 자동 생성·Junction 체계 폐기로 본 패턴 구조 차단. 본 메모리는 조직 학습 자산으로 보존.
|
||||||
|
|
||||||
---
|
---
|
||||||
name: C34 memory sync 덮어쓰기 사고 — post-commit hook이 최신 Edit 덮어씀
|
name: C34 memory sync 덮어쓰기 사고 — post-commit hook이 최신 Edit 덮어씀
|
||||||
description: 2026-04-19 본 세션 12차 commit 직후 feedback 파일 Edit 내용이 post-commit sync로 덮어씌워진 구조적 결함. D안 집행으로 sync_memory_central_to_repo.sh에 mtime 비교 추가하여 레포 최신본 보호. C34-16 Write 경로 혼용 금지 규약의 정확한 실증
|
description: 2026-04-19 본 세션 12차 commit 직후 feedback 파일 Edit 내용이 post-commit sync로 덮어씌워진 구조적 결함. D안 집행으로 sync_memory_central_to_repo.sh에 mtime 비교 추가하여 레포 최신본 보호. C34-16 Write 경로 혼용 금지 규약의 정확한 실증
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
> 🟢 **역사 보존 (해결 완료 2026-04-26)** — worktree 자동 생성·Junction 체계 폐기로 본 패턴 구조 차단. 본 메모리는 조직 학습 자산으로 보존.
|
||||||
|
|
||||||
---
|
---
|
||||||
name: worktree 격리로 인한 조직 실시간 동기화 체계 실패 — 재발 방지
|
name: worktree 격리로 인한 조직 실시간 동기화 체계 실패 — 재발 방지
|
||||||
description: 2026-04-18 PD님 조직 생존급 선언. P25→C34 승격 + 중앙 Junction 근원 해결. worktree 경계는 실시간 공유 체계의 숨겨진 경계이므로 새 체계 설계 시 최우선 검토 대상
|
description: 2026-04-18 PD님 조직 생존급 선언. P25→C34 승격 + 중앙 Junction 근원 해결. worktree 경계는 실시간 공유 체계의 숨겨진 경계이므로 새 체계 설계 시 최우선 검토 대상
|
||||||
|
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# SessionStart + UserPromptSubmit hook — C35 audit 로그 3종 디렉토리 중앙 junction 보장
|
|
||||||
# 2026-04-20 #48 G 집행 신설 — PD님 직접 지시 "어떤 PC에서도 일관 상태 동시화"
|
|
||||||
# 관련 규칙: C34-17 audit 특수 조항 · C36 PM 재량 상한 · 헌법 제1원칙 ⑤
|
|
||||||
|
|
||||||
CENTRAL_AUDIT="$HOME/.claude/burningtimes-audit"
|
|
||||||
MARKER_NAME=".junction-marker"
|
|
||||||
|
|
||||||
# 디렉토리 매핑: 로컬 디렉토리명(점 제외) | 중앙 하위 디렉토리명
|
|
||||||
MAPPINGS=(
|
|
||||||
"burningtimes_auditor_calls|auditor_calls"
|
|
||||||
"burningtimes_warning_ignored|warning_ignored"
|
|
||||||
"burningtimes_bypass_log|bypass_log"
|
|
||||||
)
|
|
||||||
|
|
||||||
# 1. 중앙 저장소 최상위 + marker 보장
|
|
||||||
mkdir -p "$CENTRAL_AUDIT" 2>/dev/null
|
|
||||||
if [ ! -f "$CENTRAL_AUDIT/$MARKER_NAME" ]; then
|
|
||||||
echo "burningtimes-audit central junction target (C34-17, 2026-04-20 #48 G)" > "$CENTRAL_AUDIT/$MARKER_NAME" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. 각 매핑 처리
|
|
||||||
for MAPPING in "${MAPPINGS[@]}"; do
|
|
||||||
LOCAL_NAME="${MAPPING%|*}"
|
|
||||||
CENTRAL_SUB="${MAPPING#*|}"
|
|
||||||
LOCAL_DIR="$HOME/.claude/.$LOCAL_NAME"
|
|
||||||
CENTRAL_DIR="$CENTRAL_AUDIT/$CENTRAL_SUB"
|
|
||||||
|
|
||||||
# 중앙 하위 디렉토리 + sub marker 보장
|
|
||||||
mkdir -p "$CENTRAL_DIR" 2>/dev/null
|
|
||||||
if [ ! -f "$CENTRAL_DIR/$MARKER_NAME" ]; then
|
|
||||||
echo "burningtimes-audit/$CENTRAL_SUB junction target (C34-17)" > "$CENTRAL_DIR/$MARKER_NAME" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# sentinel 판정: 로컬에서 marker 접근 가능하면 이미 연결 완료
|
|
||||||
if [ -f "$LOCAL_DIR/$MARKER_NAME" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 로컬이 실체 디렉토리이면 백업 후 이관 (C6-1 원본 보호)
|
|
||||||
if [ -d "$LOCAL_DIR" ] && [ ! -L "$LOCAL_DIR" ]; then
|
|
||||||
BAK="$LOCAL_DIR.bak_$(date +%Y%m%d_%H%M)"
|
|
||||||
# 기존 파일 중앙으로 이관 (덮어쓰기 안 함)
|
|
||||||
for f in "$LOCAL_DIR"/*.log "$LOCAL_DIR"/*.txt; do
|
|
||||||
[ -f "$f" ] || continue
|
|
||||||
BASENAME=$(basename "$f")
|
|
||||||
[ ! -f "$CENTRAL_DIR/$BASENAME" ] && cp "$f" "$CENTRAL_DIR/$BASENAME" 2>/dev/null
|
|
||||||
done
|
|
||||||
mv "$LOCAL_DIR" "$BAK" 2>/dev/null || { echo "⚠️ [Audit Junction:$CENTRAL_SUB] 백업 실패 — Degraded" >&2; continue; }
|
|
||||||
echo "📦 [Audit Junction:$CENTRAL_SUB] 기존 백업: $BAK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Junction 생성 (3회 재시도)
|
|
||||||
ATTEMPT=0
|
|
||||||
while [ "$ATTEMPT" -lt "3" ]; do
|
|
||||||
ATTEMPT=$((ATTEMPT + 1))
|
|
||||||
if command -v powershell >/dev/null 2>&1; then
|
|
||||||
CENTRAL_WIN=$(cygpath -w "$CENTRAL_DIR" 2>/dev/null || echo "$CENTRAL_DIR")
|
|
||||||
LOCAL_WIN=$(cygpath -w "$LOCAL_DIR" 2>/dev/null || echo "$LOCAL_DIR")
|
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -Command "New-Item -ItemType Junction -Path '$LOCAL_WIN' -Target '$CENTRAL_WIN' -Force | Out-Null" >/dev/null 2>&1
|
|
||||||
else
|
|
||||||
ln -s "$CENTRAL_DIR" "$LOCAL_DIR" 2>/dev/null
|
|
||||||
fi
|
|
||||||
if [ -f "$LOCAL_DIR/$MARKER_NAME" ]; then
|
|
||||||
[ "$ATTEMPT" -eq 1 ] && echo "✅ [Audit Junction:$CENTRAL_SUB] $LOCAL_DIR → $CENTRAL_DIR"
|
|
||||||
[ "$ATTEMPT" -gt 1 ] && echo "✅ [Audit Junction:$CENTRAL_SUB] 연결 성공 (재시도 $ATTEMPT회)"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ ! -f "$LOCAL_DIR/$MARKER_NAME" ]; then
|
|
||||||
mkdir -p "$LOCAL_DIR" 2>/dev/null
|
|
||||||
echo "⚠️ [Audit Junction:$CENTRAL_SUB] 생성 실패 — Degraded 모드 (로컬 사용)" >&2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# SessionStart hook — .live/ 디렉토리를 $HOME/.claude/burningtimes-live/로 junction 보장
|
|
||||||
# worktree 격리를 제거하여 모든 세션이 동일한 실제 .live/ 디렉토리를 공유한다.
|
|
||||||
# 2026-04-18 신설 — C34 헌법급 Live 증분 동기화 체계의 근원 해결 장치
|
|
||||||
# 관련 규칙: C34 · C16-1 PC 독립 셋업 · 헌법 제1원칙 ⑤ 세션·PC 연속성
|
|
||||||
|
|
||||||
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
||||||
[ -z "$REPO_ROOT" ] && exit 0
|
|
||||||
|
|
||||||
CENTRAL_LIVE="$HOME/.claude/burningtimes-live"
|
|
||||||
LOCAL_LIVE="$REPO_ROOT/.live"
|
|
||||||
MARKER_NAME=".junction-marker"
|
|
||||||
|
|
||||||
# 1. 중앙 저장소 + marker 보장
|
|
||||||
mkdir -p "$CENTRAL_LIVE" 2>/dev/null
|
|
||||||
if [ ! -f "$CENTRAL_LIVE/$MARKER_NAME" ]; then
|
|
||||||
echo "burningtimes-live central junction target (C34, 2026-04-18)" > "$CENTRAL_LIVE/$MARKER_NAME" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. 이미 올바르게 junction 연결되어 있으면 조기 종료 (sentinel 경유 판정)
|
|
||||||
if [ -f "$LOCAL_LIVE/$MARKER_NAME" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. 로컬 .live/ 가 실체 디렉토리인 경우 → 백업 후 junction 전환 (C6-1 원본 보호)
|
|
||||||
if [ -d "$LOCAL_LIVE" ] && [ ! -L "$LOCAL_LIVE" ]; then
|
|
||||||
BAK="$LOCAL_LIVE.bak_$(date +%Y%m%d_%H%M)"
|
|
||||||
# 기존 파일 중앙으로 복사 (기존 중앙 파일 덮어쓰기 안 함)
|
|
||||||
for f in "$LOCAL_LIVE"/*.md "$LOCAL_LIVE"/*.json; do
|
|
||||||
[ -f "$f" ] || continue
|
|
||||||
BASENAME=$(basename "$f")
|
|
||||||
[ ! -f "$CENTRAL_LIVE/$BASENAME" ] && cp "$f" "$CENTRAL_LIVE/$BASENAME" 2>/dev/null
|
|
||||||
done
|
|
||||||
mv "$LOCAL_LIVE" "$BAK" 2>/dev/null || { echo "⚠️ [Live Junction] 기존 .live/ 백업 실패 — Degraded 모드" >&2; exit 0; }
|
|
||||||
echo "📦 [Live Junction] 기존 .live/ 백업: $BAK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. Junction 생성 (OS별·3회 재시도)
|
|
||||||
ATTEMPT=0
|
|
||||||
MAX_ATTEMPTS=3
|
|
||||||
while [ "$ATTEMPT" -lt "$MAX_ATTEMPTS" ]; do
|
|
||||||
ATTEMPT=$((ATTEMPT + 1))
|
|
||||||
|
|
||||||
if command -v powershell >/dev/null 2>&1; then
|
|
||||||
# Windows — PowerShell New-Item Junction (git-bash의 cmd //c mklink 대비 신뢰성 우위, 2026-04-18 실증)
|
|
||||||
CENTRAL_WIN=$(cygpath -w "$CENTRAL_LIVE" 2>/dev/null || echo "$CENTRAL_LIVE")
|
|
||||||
LOCAL_WIN=$(cygpath -w "$LOCAL_LIVE" 2>/dev/null || echo "$LOCAL_LIVE")
|
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -Command "New-Item -ItemType Junction -Path '$LOCAL_WIN' -Target '$CENTRAL_WIN' -Force | Out-Null" >/dev/null 2>&1
|
|
||||||
else
|
|
||||||
# Unix — symlink
|
|
||||||
ln -s "$CENTRAL_LIVE" "$LOCAL_LIVE" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$LOCAL_LIVE/$MARKER_NAME" ]; then
|
|
||||||
[ "$ATTEMPT" -eq 1 ] && echo "✅ [Live Junction] $LOCAL_LIVE → $CENTRAL_LIVE"
|
|
||||||
[ "$ATTEMPT" -gt 1 ] && echo "✅ [Live Junction] 연결 성공 (재시도 $ATTEMPT회)"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# 5. 실패 — Degraded 모드 (작업 차단 안 함, C34 기본 원칙)
|
|
||||||
mkdir -p "$LOCAL_LIVE" 2>/dev/null
|
|
||||||
echo "⚠️ [Live Junction] 생성 실패 — Degraded 모드 (로컬 .live/ 사용). worktree 간 동기화 불가" >&2
|
|
||||||
echo "⚠️ [Live Junction] 해결: 관리자 권한으로 setup 스크립트 재실행 또는 수동 mklink/ln -s 필요" >&2
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
@ -1,102 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# SessionStart hook — memory/org junction을 $HOME/.claude/burningtimes-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/burningtimes-memory"
|
|
||||||
MARKER_NAME=".memory-junction-marker"
|
|
||||||
CLAUDE_PROJECTS="$HOME/.claude/projects"
|
|
||||||
LOCK_FILE="$HOME/.claude/.burningtimes_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 "burningtimes-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--BurningTimesAi* 패턴 해시 폴더 순회 (루트·worktree 모두 포괄)
|
|
||||||
RECONNECTED=0
|
|
||||||
CREATED=0
|
|
||||||
SKIPPED=0
|
|
||||||
FAILED=0
|
|
||||||
|
|
||||||
for hash_dir in "$CLAUDE_PROJECTS"/E--BurningTimesAi*; 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
|
|
||||||
mv "$mem_link" "$mem_link.bak_$(date +%Y%m%d_%H%M)" 2>/dev/null || continue
|
|
||||||
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
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# 롤백 스크립트 — memory 중앙화 이전 상태로 복귀
|
|
||||||
# Junction 해제 + 중앙 백업 + 레포 memory/org/ 원본 복구
|
|
||||||
# 2026-04-19 신설 — C34 집행 실패 시 사용 (C6-1 롤백 경로 확보 의무)
|
|
||||||
|
|
||||||
CENTRAL_MEM="$HOME/.claude/burningtimes-memory"
|
|
||||||
CLAUDE_PROJECTS="$HOME/.claude/projects"
|
|
||||||
|
|
||||||
echo "=== memory 중앙화 롤백 시작 ==="
|
|
||||||
|
|
||||||
# 1. 중앙 저장소 백업 (소실 방지)
|
|
||||||
if [ -d "$CENTRAL_MEM" ]; then
|
|
||||||
BAK="$CENTRAL_MEM.rollback-$(date +%Y%m%d%H%M%S)"
|
|
||||||
mv "$CENTRAL_MEM" "$BAK"
|
|
||||||
echo "📦 중앙 저장소 백업: $BAK"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. 모든 worktree 해시 폴더의 user memory junction 제거
|
|
||||||
REMOVED=0
|
|
||||||
for hash_dir in "$CLAUDE_PROJECTS"/E--BurningTimesAi*; do
|
|
||||||
[ -d "$hash_dir" ] || continue
|
|
||||||
mem_link="$hash_dir/memory"
|
|
||||||
[ -e "$mem_link" ] || [ -L "$mem_link" ] || continue
|
|
||||||
|
|
||||||
if command -v powershell >/dev/null 2>&1; then
|
|
||||||
powershell -NoProfile -ExecutionPolicy Bypass -Command "Remove-Item '$mem_link' -Force -ErrorAction SilentlyContinue" >/dev/null 2>&1
|
|
||||||
else
|
|
||||||
rm -f "$mem_link" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
REMOVED=$((REMOVED + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "🔗 user memory junction $REMOVED 개 제거"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "⚠️ 다음 setup 스크립트 실행 시 현 체계 재구축됨."
|
|
||||||
echo " 완전 롤백이 필요하면 scripts/memory_junction_ensure.sh 와 setup_windows.ps1 3.6 섹션을 복구 전 상태로 revert 후 재실행."
|
|
||||||
echo "=== 롤백 완료 ==="
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# 수동 비상 sync — 양방향 memory 동기화 강제 실행
|
|
||||||
# 사용: bash scripts/sync_memory.sh {both|repo-to-central|central-to-repo}
|
|
||||||
# 2026-04-19 신설 — C34-3 동기화 4계층 (수동 비상)
|
|
||||||
|
|
||||||
DIR_ARG="${1:-both}"
|
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
||||||
|
|
||||||
case "$DIR_ARG" in
|
|
||||||
repo-to-central)
|
|
||||||
echo "▶️ 레포 → 중앙 (단방향)"
|
|
||||||
bash "$SCRIPT_DIR/sync_memory_repo_to_central.sh"
|
|
||||||
;;
|
|
||||||
central-to-repo)
|
|
||||||
echo "▶️ 중앙 → 레포 (단방향)"
|
|
||||||
bash "$SCRIPT_DIR/sync_memory_central_to_repo.sh"
|
|
||||||
;;
|
|
||||||
both)
|
|
||||||
echo "▶️ 양방향 sync (레포 → 중앙 → 레포)"
|
|
||||||
bash "$SCRIPT_DIR/sync_memory_repo_to_central.sh"
|
|
||||||
bash "$SCRIPT_DIR/sync_memory_central_to_repo.sh"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "사용: bash scripts/sync_memory.sh {both|repo-to-central|central-to-repo}" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "✅ sync 완료. git status로 반영 확인."
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# post-commit hook — 중앙 $HOME/.claude/burningtimes-memory/ → 레포 memory/org/ 단방향 sync
|
|
||||||
# Claude user memory에 Write된 내용을 commit 포함시키기 위해 commit 직후 레포로 반영.
|
|
||||||
# 2026-04-19 신설 — C34-3 동기화 4계층 (commit 최신본 보장)
|
|
||||||
|
|
||||||
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
||||||
[ -z "$REPO_ROOT" ] && exit 0
|
|
||||||
|
|
||||||
REPO_MEM="$REPO_ROOT/memory/org"
|
|
||||||
CENTRAL_MEM="$HOME/.claude/burningtimes-memory"
|
|
||||||
MARKER_NAME=".memory-junction-marker"
|
|
||||||
LOCK_FILE="$HOME/.claude/.burningtimes_memory_sync.lock"
|
|
||||||
|
|
||||||
[ ! -d "$CENTRAL_MEM" ] && exit 0
|
|
||||||
[ ! -d "$REPO_MEM" ] && exit 0
|
|
||||||
|
|
||||||
# Lock (5초 타임아웃)
|
|
||||||
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
|
|
||||||
|
|
||||||
# 중앙 → 레포 복사 (2026-04-19 D안 개선: mtime 비교로 레포 최신본 보호)
|
|
||||||
# 삭제 동기화 안 함 (파일 소실 리스크 회피, 안전망)
|
|
||||||
# 레포가 중앙보다 최신이면 덮어쓰기 스킵 — C34-16 Write 경로 혼용 시
|
|
||||||
# post-commit sync가 최신 Edit을 덮어쓰던 구조적 결함 차단
|
|
||||||
# 근거: memory/org/feedback_memory_sync_overwrite.md (2026-04-19 실증)
|
|
||||||
CHANGED=0
|
|
||||||
SKIPPED_PROTECT=0
|
|
||||||
for f in "$CENTRAL_MEM"/*.md "$CENTRAL_MEM"/*.json; do
|
|
||||||
[ -f "$f" ] || continue
|
|
||||||
basename=$(basename "$f")
|
|
||||||
[ "$basename" = "$MARKER_NAME" ] && continue
|
|
||||||
dst="$REPO_MEM/$basename"
|
|
||||||
|
|
||||||
# 내용 동일 시 스킵 (정상 상태)
|
|
||||||
if [ -f "$dst" ] && diff -q "$f" "$dst" >/dev/null 2>&1; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 레포가 중앙보다 최신 → 덮어쓰기 차단 (D안 보호)
|
|
||||||
if [ -f "$dst" ] && [ "$dst" -nt "$f" ]; then
|
|
||||||
echo "⚠️ [Memory Sync] 레포본이 중앙보다 최신 — 중앙→레포 덮어쓰기 스킵: $basename" >&2
|
|
||||||
echo " C34-16 Write 경로 혼용 시그널 가능성 — 수동 sync_memory_repo_to_central.sh로 중앙 최신화 권장" >&2
|
|
||||||
SKIPPED_PROTECT=$((SKIPPED_PROTECT + 1))
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 중앙이 더 최신 또는 레포 부재 → 정상 복사
|
|
||||||
cp "$f" "$dst" 2>/dev/null
|
|
||||||
CHANGED=$((CHANGED + 1))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ "$CHANGED" -gt 0 ]; then
|
|
||||||
echo "🧠 [Memory Sync] 중앙 → 레포 $CHANGED 건 반영 (다음 commit에 포함 예정이면 재commit 필요)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$SKIPPED_PROTECT" -gt 0 ]; then
|
|
||||||
echo "⚠️ [Memory Sync] 레포 최신본 보호로 $SKIPPED_PROTECT 건 덮어쓰기 방지 (C34 memory sync 구조 결함 재발 차단)" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# SessionStart hook — 레포 memory/org/ → 중앙 $HOME/.claude/burningtimes-memory/ 단방향 sync
|
|
||||||
# git pull 직후 원격 반영분을 중앙에 최신화. unflushed 중앙 변경은 대피 백업.
|
|
||||||
# 2026-04-19 신설 — C34-3 동기화 4계층 (레포 SOT 원칙)
|
|
||||||
|
|
||||||
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
||||||
[ -z "$REPO_ROOT" ] && exit 0
|
|
||||||
|
|
||||||
REPO_MEM="$REPO_ROOT/memory/org"
|
|
||||||
CENTRAL_MEM="$HOME/.claude/burningtimes-memory"
|
|
||||||
MARKER_NAME=".memory-junction-marker"
|
|
||||||
LOCK_FILE="$HOME/.claude/.burningtimes_memory_sync.lock"
|
|
||||||
|
|
||||||
[ ! -d "$REPO_MEM" ] && exit 0
|
|
||||||
|
|
||||||
# 0. Lock (race condition 방지, 5초 타임아웃)
|
|
||||||
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. 중앙 저장소 보장
|
|
||||||
mkdir -p "$CENTRAL_MEM" 2>/dev/null
|
|
||||||
[ ! -f "$CENTRAL_MEM/$MARKER_NAME" ] && echo "burningtimes-memory central (C34-16, 2026-04-19)" > "$CENTRAL_MEM/$MARKER_NAME"
|
|
||||||
|
|
||||||
# 2. unflushed 중앙 변경 탐지 (중앙 mtime > 레포 mtime + HEAD 미반영 의심)
|
|
||||||
CONFLICT_COUNT=0
|
|
||||||
for cf in "$CENTRAL_MEM"/*.md "$CENTRAL_MEM"/*.json; do
|
|
||||||
[ -f "$cf" ] || continue
|
|
||||||
basename=$(basename "$cf")
|
|
||||||
[ "$basename" = "$MARKER_NAME" ] && continue
|
|
||||||
rf="$REPO_MEM/$basename"
|
|
||||||
|
|
||||||
if [ -f "$rf" ]; then
|
|
||||||
# 양쪽 존재: mtime 비교 (중앙이 더 새로우면 unflushed 후보)
|
|
||||||
if [ "$cf" -nt "$rf" ]; then
|
|
||||||
# 내용 비교로 확정 (mtime만 다르고 내용 같으면 touch)
|
|
||||||
if ! diff -q "$cf" "$rf" >/dev/null 2>&1; then
|
|
||||||
CONFLICT_COUNT=$((CONFLICT_COUNT + 1))
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# 중앙에만 있고 레포에 없음 — unflushed 신규 파일
|
|
||||||
CONFLICT_COUNT=$((CONFLICT_COUNT + 1))
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# 3. 충돌 있으면 중앙 대피 후 진행
|
|
||||||
if [ "$CONFLICT_COUNT" -gt 0 ]; then
|
|
||||||
STAMP=$(date +%Y%m%d%H%M%S)
|
|
||||||
CONFLICT_DIR="$CENTRAL_MEM.conflict-$STAMP"
|
|
||||||
cp -r "$CENTRAL_MEM" "$CONFLICT_DIR" 2>/dev/null
|
|
||||||
echo "⚠️ [Memory Sync] unflushed 중앙 변경 $CONFLICT_COUNT 건 감지 — 대피: $CONFLICT_DIR" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. 레포 → 중앙 복사 (marker·conflict 제외, 삭제 동기화 안 함 — 안전망)
|
|
||||||
for f in "$REPO_MEM"/*.md "$REPO_MEM"/*.json; do
|
|
||||||
[ -f "$f" ] || continue
|
|
||||||
basename=$(basename "$f")
|
|
||||||
cp "$f" "$CENTRAL_MEM/$basename" 2>/dev/null
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
@ -585,3 +585,16 @@ P17 번호 재사용 금지 (C14-5 확장 "번호 구멍 허용" · C37-2 "번
|
||||||
### 연관 자산
|
### 연관 자산
|
||||||
- **P29-3** EerieVillage 활용 방침 (차기 프로젝트 고유 규약 신규 개발 원칙)
|
- **P29-3** EerieVillage 활용 방침 (차기 프로젝트 고유 규약 신규 개발 원칙)
|
||||||
- **C22-5** 용어 일관 (폐기 규칙 문구 혼용 금지)
|
- **C22-5** 용어 일관 (폐기 규칙 문구 혼용 금지)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## C34. PC 로컬 실시간 공유 중앙화 체계 — Live + memory + audit (2026-04-26 폐기)
|
||||||
|
|
||||||
|
| 필드 | 내용 |
|
||||||
|
|------|------|
|
||||||
|
| **규칙 번호·명** | C34. PC 로컬 실시간 공유 중앙화 체계 — Live + memory + audit |
|
||||||
|
| **신설일** | 2026-04-18 (구 P25에서 헌법급 승격) · 2026-04-19 memory 편입 · 2026-04-20 #48 G audit 편입 |
|
||||||
|
| **폐기일** | 2026-04-26 |
|
||||||
|
| **상태** | 폐기 |
|
||||||
|
| **대체 관계** | `.live/` 레포 내 일반 디렉토리(.gitignore) + UserPromptSubmit hook `scripts/live_inject.sh` 증분 주입 (단순 유지). `memory/org/` 레포 git 추적 SOT 직접 저장. audit 로그 사용자 홈 일반 디렉토리(`$HOME/.claude/.burningtimes_*`) |
|
||||||
|
| **경위·근거** | 본 체계는 Claude Code MSIX 데스크톱 앱이 매 세션마다 `.claude/worktrees/<hash>/` 디렉토리를 자동 생성하여 발생하는 worktree 격리 사건을 우회하기 위해 설계됨 (중앙 Junction + sync 4계층). 그러나 2026-04-26 PD 직접 결정으로 **CLI 전환 채택** — PD가 PowerShell에서 `claude` CLI를 직접 호출하면 `--no-worktree` 기본값으로 worktree 자체 미생성. worktree 격리 사건 원천 차단 → C34 중앙 Junction·sync 4계층 모두 불요. PD 결정 안건 (나) 전면 폐기. 부산 효과: 매 세션·매 응답 토큰 약 3,200~3,600 절감 (월 6.4M~7.2M). 백업: `.claude/backups/central-2026-04-26/` (680 파일 2.7MB). 폐기 영향 조항: C34-1~C34-18 본문 + C16-1·C42-7 B/E·C43·P33 등 다른 조항의 C34 참조 일괄 정정. 신설 1조 — `.live/` 일반 디렉토리 + `live_inject.sh` 단순 유지로 PC 내 다중 PowerShell 세션 즉시 공유 자산은 보존 |
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue