--- name: Agent 호출 시 절대 경로 하드코딩 금지 — worktree 경계 보호 description: 2026-04-18 worktree 격리 2차 사건. Agent가 절대 경로로 Write 호출 시 레포 루트로 산출물 유출. stash 이관 복구 절차 + 재발 방지 체크리스트 type: feedback originSessionId: 0c3fc143-5c2a-4165-afb1-7becf72eaa0a --- # Agent 호출 시 절대 경로 하드코딩 금지 — worktree 경계 보호 ## 실증 (2026-04-18, worktree 격리 2차 사건) PM(tender-liskov worktree)이 개발팀장 Agent를 호출. Agent가 산출물 경로에 **절대 경로 `E:\BurningTimesAi\공유\소통\개발팀→PM\...`**를 사용하여 Write. 이로 인해 파일이 **레포 루트(main 브랜치 체크아웃)에 기록**되고 본 워크트리는 해당 파일을 볼 수 없음. Agent 응답에 "476줄 산출물 작성 완료"라 보고되었으나 PM 세션의 `공유/소통/개발팀→PM/`에는 없었음. `git -C "E:/BurningTimesAi" status` 확인으로 레포 루트에 uncommitted 변경 3건(PD 지시 로그·대화로그·보고서) 발견. ## 근본 원인 - Agent는 실행 환경의 `cwd`를 계승하나, Write 도구에 **절대 경로**를 전달하면 cwd와 무관하게 해당 경로에 기록 - `E:\BurningTimesAi`는 레포 루트(main 브랜치 체크아웃) — worktree가 아닌 독립 작업 디렉토리 - Agent가 worktree 경계를 인지하지 못하고 "레포 절대 경로 = 안전한 표준"으로 처리 - PM은 Agent 응답만 보고 산출물 실체 위치 미확인 → worktree 경계 이탈을 검증 없이 신뢰 (C23 관점에서도 문제) ## 복구 방법 (2026-04-18 실증) 1. `git -C <레포루트> stash push -u -- <영향 경로>` — Agent가 쓴 변경분을 stash로 수집 2. 본 worktree에서 `git stash pop` — 동일 base라면 conflict 없이 적용 3. `git -C <레포루트> status` 재확인 (clean 여부) 4. 본 worktree에서 변경분 검증 후 commit ## 재발 방지 의무 (세션 리더) 1. **Agent 호출 프롬프트에 경로 규약 명시**: "산출물 경로는 `$(git rev-parse --show-toplevel)` 기준 또는 상대 경로로 작성. 절대 경로 `E:\BurningTimesAi\...` 등 하드코딩 금지." 2. **Agent 응답 수령 직후 2축 검증**: 본 worktree `git status` + `git -C <레포루트> status` 병행 확인 3. **경계 이탈 발견 시**: stash 이관 복구 즉시 수행, PD님께 자진 보고 (C3·C5) 4. **감사 확장**: pm-auditor·dev-auditor 체크리스트에 "Agent 경계 이탈 확인" 항목 추가 안건 ## 연관 - **C34-11** (Agent 경계 보호 조항) - **C23** (허위 보고·역할 연기 금지) - **feedback_worktree_isolation.md** (1차 사건) - **조직공지**: `2026-04-18_C34_신설_worktree_격리_근원해결.md` ## 교훈 **Agent 위임은 PM 책임 해제가 아니다.** Agent 응답의 "완료" 선언을 실체 파일로 검증하지 않으면 worktree 격리 같은 숨겨진 경계로 인한 누락을 놓칠 수 있다. 특히 "절대 경로의 안전성" 직관은 worktree 체제에서 무력화됨 — Agent가 의도치 않게 다른 worktree/레포 루트에 쓸 수 있음. --- ## 관련 사건 로그 | 회차 | 일자 | 에이전트 | 위반 경로 | 복구 방법 | PM 검증 | |------|------|---------|----------|----------|---------| | 1 | 2026-04-18 | 개발팀장 | `E:\BurningTimesAi\공유\소통\개발팀→PM\...` (레포 루트) | `git stash push` → worktree `stash pop` | 사후 git status 2축 확인 | | 2 | 2026-04-21 | content-designer | `E:\BurningTimes\공유\조직자산\시행착오_아카이브\기획_content_designer_v1.md` (BT main 레포) | PowerShell `Move-Item` → worktree 이동 + main 잔존 디렉토리 `Remove-Item -Recurse` | PM이 Phase 2-B 산출물 14종 실측 중 누락 확인 | ## 회차 2 경위 (2026-04-21 Phase 2-B 실증) Phase 2-B "전 14개 에이전트 동원 수상한잡화점 시행착오 노하우 재정리" 집행 중, `content-designer` 에이전트가 산출물 경로에 **절대 경로 `E:\BurningTimes\공유\조직자산\시행착오_아카이브\기획_content_designer_v1.md`**를 사용. BT main 레포(`E:/BurningTimes/`)로 파일이 유출. PM이 Phase 2-B 완료 후 14개 산출물 실측 시 worktree에는 13개만 존재함을 확인 → 누락된 content-designer 산출물이 BT main 레포에 있음을 발견. **근본 원인 재확인**: 프롬프트에 "C34-11 경계 보호: 본 worktree 내 **상대 경로만** 사용. 절대 경로 하드코딩 금지" 명시했으나 에이전트가 **절대 경로 사용이 "명시적 정확성 확보"인 것처럼 판단**. Phase 2-B 14개 에이전트 중 1건(7.1%) 재발. **재발 방지 강화**: 1. Agent 프롬프트에 "본 worktree 절대 경로는 안전 옵션 아님. `git rev-parse --show-toplevel` 결과 외 경로 사용 시 worktree 경계 위반" 명시 강화 2. Phase별 Task 묶음 실행 후 `ls -la` 실측 검증을 PM 체크리스트에 고정 3. `E:\BurningTimes\` (main 레포 루트) 경로도 "BT 레포 내부지만 worktree 외부" 범주로 차단 대상 명확화 4. content-designer 에이전트 정의(`.claude/agents/content-designer.md`)에 C34-11 조항 명시 검토 (Phase 3 안건)