From e04a204833fd6aeca03eadd9b9626ec066ca23ab Mon Sep 17 00:00:00 2001 From: swrring Date: Sat, 18 Apr 2026 22:11:27 +0900 Subject: [PATCH] =?UTF-8?q?feat(rules):=20C34-15=20+=20=EA=B0=90=EC=82=AC?= =?UTF-8?q?=EA=B4=80=203=EC=A2=85=20worktree=20=EC=95=88=EC=A0=84=EC=84=B1?= =?UTF-8?q?=20+=20verify=5Fsetup=20fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD님 지시 "남은 별개 이슈와 유사 사례 재발되지 않도록 교훈으로" 수용. - SKILL.md: C34-15 신설 "신규 설정 도입 시 worktree 경계 체크 의무" (C34-15는 feedback_worktree_isolation.md의 5개 질문 체크리스트 참조) - memory/org/feedback_worktree_isolation.md 확장: · 5개 질문 체크리스트 (PC 단위·경계 안전성·중앙화·레포루트 vs worktree· Agent 경계 보호) · 적용 대상 표 (.live/·memory/org/·paths.local.json·HOME 기존) · 관련 사건 로그 4건 누적 (향후 동일 유형 append) - .claude/agents/pm-auditor·dev-auditor·plan-auditor: "Agent 경계·worktree 안전성 점검" 감사 영역 추가 (C34-11·C34-15 연계) - scripts/verify_setup.ps1: paths.local.json worktree fallback 로직 (git rev-parse --git-common-dir → 메인 레포 경로 추론 → 대체 조회) 본 PC paths.local.json 미생성은 본 PC setup 미실행 상태 (별개 안건, 본 C34 집행 범위 밖). setup 1회 실행 시 자동 해결. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/agents/dev-auditor.md | 7 ++++ .claude/agents/plan-auditor.md | 6 +++ .claude/agents/pm-auditor.md | 8 ++++ .claude/skills/너드나비스-코어룰/SKILL.md | 10 +++++ memory/org/feedback_worktree_isolation.md | 46 +++++++++++++++++++++++ scripts/verify_setup.ps1 | 19 +++++++++- 6 files changed, 94 insertions(+), 2 deletions(-) diff --git a/.claude/agents/dev-auditor.md b/.claude/agents/dev-auditor.md index 60935b2..0ec4db5 100644 --- a/.claude/agents/dev-auditor.md +++ b/.claude/agents/dev-auditor.md @@ -48,6 +48,13 @@ pm-auditor(PM 전담 감사)만으로는 개발팀 내부 세부 검증 불가. - Unity·Framework 버전 변경 공지 - 기획팀 요구사항 ↔ 개발팀 구현 간 차이 추적 +### 6. Agent 경계·worktree 안전성 점검 (2026-04-18 신설 — C34-11·C34-15 연계) +- 개발팀장·클라이언트팀장·서버팀장 Agent 호출 후 **절대 경로 `E:\NerdNavisAi\...` 하드코딩 유출** 여부 — worktree 경계 넘기 사건(2026-04-18 실증) 재발 방지 +- Agent 호출 프롬프트에 "**상대 경로** 또는 **`git rev-parse --show-toplevel` 기준**" 경로 규약 명시 여부 +- 신규 스크립트·hook 도입 시 C34-15 5개 질문 체크리스트 통과 여부 (PC 단위·경계 안전성·중앙화·레포루트 vs worktree 실행·Agent 보호) +- `scripts/` 신규 추가 시 worktree에서 실행되어도 안전한지 검증 (git worktree list 기반 테스트) +- 신규 기술 저장소(빌드 캐시·로그 디렉토리 등) 도입 시 worktree 격리 리스크 평가 + ## 수행 모드 3종 **모드 A. 응답 발신 직전 교차 검증** — 개발팀장이 중요 보고 작성 후 호출 (C31 대리·병행) diff --git a/.claude/agents/plan-auditor.md b/.claude/agents/plan-auditor.md index 78f87a4..26297cc 100644 --- a/.claude/agents/plan-auditor.md +++ b/.claude/agents/plan-auditor.md @@ -45,6 +45,12 @@ pm-auditor(PM 전담)·dev-auditor(개발 전담)만으로는 기획 고유 영 - 수상한 잡화점 고유 규칙(P17) 위반 감지 - 스테이지 기획·몬스터 배치·보스 배치 정합성 +### 6. Agent 경계·worktree 안전성 점검 (2026-04-18 신설 — C34-11·C34-15 연계) +- 기획팀장·balance·content·level·narrative·system·ux-designer Agent 호출 시 **산출물 경로 규약** 준수 (상대 경로 또는 `git rev-parse --show-toplevel` 기준) +- 밸런스 테이블(xlsm·csv·json)·기획 SOT 문서 경로 체계 추가·변경 시 C34-15 5개 질문 체크리스트 통과 여부 +- Agent 응답 수령 후 `git -C <레포루트> status` 병행 확인 수행 여부 (레포 루트 유출 방지) +- 기획 자산 저장소 구조(프로젝트별 디렉토리·버전 태그 백업 등) 도입·변경 시 worktree 안전성 검증 + ## 수행 모드 3종 **모드 A. 응답 발신 직전 교차 검증** — 기획팀장 중요 보고 전 호출 diff --git a/.claude/agents/pm-auditor.md b/.claude/agents/pm-auditor.md index 257ac79..1e454dd 100644 --- a/.claude/agents/pm-auditor.md +++ b/.claude/agents/pm-auditor.md @@ -65,6 +65,14 @@ PM이 **별도 지시 없이 자율 처리해야 할 사안**이 방치·누락 - 동일 실수가 N회 반복되었는가? → 조직공지 발행 검토 - 기존 규칙이 본 패턴을 포착하지 못하는가? → 규칙 신설·개정 안건화 +### 5. Agent 경계·worktree 안전성 점검 (2026-04-18 신설 — C34-11·C34-15 연계) + +Agent 호출 후 및 신규 설정·저장소 도입 시 다음 항목 점검: +- **Agent 경계 이탈 확인** (C34-11): PM이 Agent 호출 후 `git -C <레포루트> status`를 수행했는지, 레포 루트에 uncommitted 변경이 유출되었는지. 유출 발견 시 `git stash push/pop` 이관 복구 수행 여부 +- **Agent 호출 프롬프트에 경로 규약 포함** 여부: "상대 경로 사용" 또는 "`git rev-parse --show-toplevel` 기준"을 Agent 프롬프트에 명시했는지 +- **신규 설정 도입 시 5개 질문 체크리스트** (C34-15): PC 단위 vs worktree 단위 · 경계 안전성 · 중앙화 필요성 · 레포 루트 vs worktree 실행 차이 · Agent 경계 보호 5항목 통과 여부 +- **경계 자산 정기 점검**: `.live/`·`memory/org/`·`paths.local.json` 상태를 `scripts/verify_setup.ps1` 실행으로 확인. 경계 이탈 감지 시 Critical + ## 감사 수행 방식 ### 수행 모드 3종 diff --git a/.claude/skills/너드나비스-코어룰/SKILL.md b/.claude/skills/너드나비스-코어룰/SKILL.md index 2edf0d3..caa3c46 100644 --- a/.claude/skills/너드나비스-코어룰/SKILL.md +++ b/.claude/skills/너드나비스-코어룰/SKILL.md @@ -1632,3 +1632,13 @@ Junction 생성 실패 시 **작업을 차단하지 않고** 로컬 `.live/` 일 - **2026-04-18 오전** worktree 격리 실증 — 세션 B(nifty-wing) `.live/ping.md` Write가 세션 A(tender-liskov) hook에 미주입 - **2026-04-18 오후** PD님 조직 생존급 선언 + "가능한 모든 수단을 써서 개선" 지시 → **헌법급 승격 + 근원 해결(중앙 Junction) + Agent 경계 보호 동시 집행** - 차기 프로젝트 착수 시 `setup_*` 스크립트 호출만으로 본 체계 즉시 재사용 + +### 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님 "유사 사례 재발되지 않도록 교훈으로" 직접 지시 diff --git a/memory/org/feedback_worktree_isolation.md b/memory/org/feedback_worktree_isolation.md index 3f2750f..ac33ec8 100644 --- a/memory/org/feedback_worktree_isolation.md +++ b/memory/org/feedback_worktree_isolation.md @@ -37,3 +37,49 @@ PD님 직접 선언: **"이 문제가 해결되지 않으면 앞으로 우리 ## 교훈 **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하여 패턴 누적. diff --git a/scripts/verify_setup.ps1 b/scripts/verify_setup.ps1 index feae6c4..049a099 100644 --- a/scripts/verify_setup.ps1 +++ b/scripts/verify_setup.ps1 @@ -35,8 +35,23 @@ Write-Host "=== 너드나비스 셋팅 검증 ===" Write-Host "RepoRoot: $repoRoot" Write-Host "" -# 1. paths.local.json 실파일·파싱·필수 키 +# 1. paths.local.json 실파일·파싱·필수 키 (2026-04-18 worktree fallback 추가) $pathsFile = Join-Path $repoRoot "paths.local.json" +if (-not (Test-Path $pathsFile)) { + # worktree 감지 — 공통 git dir 기반 메인 레포 루트 추론 (C34-15 worktree 안전성) + try { + $gitCommon = (& git -C $repoRoot rev-parse --git-common-dir 2>$null) | Out-String + $gitCommon = $gitCommon.Trim() + if ($gitCommon -and (Test-Path $gitCommon)) { + $mainRoot = Split-Path (Resolve-Path $gitCommon).Path -Parent + $altPaths = Join-Path $mainRoot "paths.local.json" + if (Test-Path $altPaths) { + $pathsFile = $altPaths + Warn "paths.local.json worktree fallback" "본 worktree 없음 → 메인 레포 경유: $pathsFile" + } + } + } catch {} +} $paths = $null if (Test-Path $pathsFile) { try { @@ -47,7 +62,7 @@ if (Test-Path $pathsFile) { Check "paths.local.json 존재·JSON 파싱" $false "JSON 파싱 실패: $_" } } else { - Check "paths.local.json 존재" $false "파일 없음. setup_windows.ps1 선행 필요: $pathsFile" + Check "paths.local.json 존재" $false "파일 없음(메인 레포도). setup_windows.ps1 선행 필요: $pathsFile" } $required = @("NERDNAVIS_ROOT","UNITY_PROJECT_ROOT","FRAMEWORK_PKG_ROOT","TABLE_EXPORT_ROOT")