- name
- collapsing-per-item-dirs-merges-state-keyed-on-the-path
- description
- 태스크마다 만들던 임시 디렉터리를 "아무도 안 쓰니까" 하나로 합치면, **그 경로로 키잉된 남의 상태**가 전부 하나로 합쳐진다 — 우연히 있던 격리가 사라지는데 런타임 동작 변화는 0으로 보인다. "안 쓰인다"를 내 코드에서만 grep 했기 때문이다. 트리거 - per-task/per-run 디렉터리 제거, "고정 cwd 하나로", 임시 디렉터리 정리 PR, 벤더 CLI/툴을 subprocess 로 띄우는 코드, 멀티테넌트 워커, "이 디렉터리는 아무도 읽거나 쓰지 않는다" 주석.
# 경로를 공유하면, 그 경로로 키잉된 모든 것이 공유된다
## Problem
정리 PR 의 논리는 흠잡을 데 없어 보인다:
> "프로젝트는 디렉터리 하나와 1:1인데 왜 태스크마다 임시 디렉터리를 만드나?
> **아무도 그 디렉터리를 읽거나 쓰지 않는다** — CLI 는 그냥 *cwd* 가 필요할 뿐이다.
> 태스크별 디렉터리는 격리를 사준 게 없고, 영구 상태만 남겼다."
전부 사실이었다. 그런데 **내 코드가 안 쓴다는 것**이지, 내가 띄우는 **벤더 툴이 그 경로를
키로 쓰지 않는다는 뜻이 아니다.** 실제로 그 CLI 는 cwd 경로로:
* 프로젝트 상태를 키잉하고 (그래서 `~/.claude/projects` 에 994개 중 972개가 태스크 잔재였다)
* **auto-memory 저장소**를 키잉한다 — 턴 컨텍스트에 주입되고, **에이전트 런이 거기에 쓴다**
⇒ 태스크별 임시 디렉터리는 **우연히** 저장소를 격리하고 있었다. 하나로 합치는 순간
그 저장소는 **한 워커의 모든 태스크·모든 테넌트가 공유하는 하나**가 된다.
한 테넌트의 런이 쓴 메모가 다음 테넌트의 답변에 인용된다.
### 왜 안 잡히는가
* **PR 의 자기평가가 "런타임 동작 변화 0" 이다.** 유닛 테스트는 cwd 문자열만 보고,
벤더가 그 경로 아래 무엇을 쌓는지는 테스트 밖이다
* **합친 직후에는 비어 있다.** 새 디렉터리라 저장소가 0바이트 → 프로브해도 안전해 보인다.
**잠복이지 안전이 아니다** — 며칠 쓰이면 채워진다
* 증거는 대개 **지운 쪽에** 남아 있다: 합치기 전의 태스크별 디렉터리들을 열어 보면
에이전트가 쓴 파일이 그대로 있다. *"뭐가 쌓였었나"* 를 보면 1분이면 끝난다
## Solution
경로 하나로 합치기 전에:
1. **합치려는 경로 아래에 지금 무엇이 있는지 실제로 세라** — 내 코드가 아니라
**파일시스템에게** 물어라. `find <old-per-task-dirs> -type f` 한 번
2. 벤더 툴이 그 경로를 키로 쓰는지 확인해라. 홈 디렉터리 아래 `projects/<경로-슬러그>/`
같은 **경로를 슬러그로 박은 디렉터리**가 있으면 그게 답이다
3. 남는 게 있으면, 합치는 대신 **그 상태를 끄는 스위치**를 찾아라
(설정 키 하나가 대개 있다 — 디렉터리 유일성보다 싸고 명시적이다)
4. 주석의 "안전하게 공유된다" 옆에 **예외를 적어라**. 나중에 스위치가 빠지면
그 주장이 거짓이 된다는 것까지
## Key Insights
- **"안 쓰인다"를 내 레포에서만 grep 하면 절반만 증명한 것이다.** subprocess 로 띄우는
남의 프로그램은 내 grep 에 안 걸리면서 그 경로로 상태를 쌓는다
- **유일성이 격리를 사주고 있었는지 아닌지는, 유일성을 없애 봐야 안다** — 그리고 그때는
이미 합쳐진 뒤다. 없애기 전에 세라
- **빈 저장소는 무해의 증거가 아니라 방금 만들어졌다는 증거다.** "지금 0건" 과
"구조상 0건" 을 구분해라
- 격리가 **의도의 산물이 아니라 부작용**이었을 때 가장 조용히 사라진다. 정리 PR 이
없애는 게 '쓰레기'인지 '우연한 벽'인지는 이름만 봐서는 구분이 안 된다
- 관련: [[an-isolation-flag-covers-a-mechanism-not-its-goal]] ·
[[deleting-a-layer-reopens-what-the-layer-was-covering]] ·
[[agent-executor-host-cwd-leak]]
GitHubで見る