# Codegraph-Anu Phase 2 PoC 1주 측정 보고서

- **task**: task-2337 (codegraph-anu Phase 2.5 — KPI 측정 및 정착/폐기 판정)
- **작성일**: 2026-05-08
- **측정 기간**: 2026-05-01 ~ 2026-05-08 (1주)
- **Before 비교 기간**: 2026-04-25 ~ 2026-05-01 (1주)
- **데이터 소스**: `memory/task-timers.json`, `memory/events/*.failed`, InsuRo git log, 프로세스 점검
- **선행**: `codegraph-anu-phase1.md`, `codegraph-anu-phase2-setup.md`

---

## SCQA

**Situation** — 4월 16일 Agent 미팅에서 만장일치(10/10)로 결정한 code-review-graph MCP 도입의 PoC를 5월 1일 셋업 완료. 대상은 dev7-team 1봇 + InsuRo 1프로젝트로 격리. 1주 시한으로 토큰 절감률을 측정하기로 합의.

**Complication** — PoC 셋업 1일 후(2026-05-02) 다른 봇이 InsuRo의 `.mcp.json`을 "작업 외 부산물"로 untrack/삭제하여 PoC 인프라가 무력화됨. 그 결과 dev7-team이 InsuRo cwd에서 MCP를 호출한 task가 **0건**.

**Question** — 토큰 30%+ 절감 / 회귀 0건 / daemon 다운 0건 KPI를 동시 충족하는가? 그렇다면 Phase 3 (8팀 6프로젝트) 확장. 미충족 시 폐기.

**Answer** — **3 조건 동시 충족 불가 → Phase 3 진입 불가, 트랙 B 폐기 결정**. 트랙 A(자체 AST 통합)는 회귀 0건 KPI를 충족하므로 유지. 상세 결정 사유 및 학습 포인트는 `codegraph-anu-decision.md`에 별도 기록.

---

## KPI 결과

| KPI | 목표 | 실측 | 판정 |
|---|---|---|---|
| 토큰 절감률 (input + cache_read) | 30%+ | **측정 불가** (Group A n=0) | ❌ |
| 회귀 (PoC 직접 변경 영역) | 0건 | AST 단위테스트 47/47 + 6/6 PASS, PoC 범위 `.failed` 이벤트 0건 | ✅ (트랙 A 한정) |
| daemon 다운 | 0건 | daemon 미등록 (Phase 3 연기, stdio MCP serve는 on-demand) | N/A |
| 3 조건 동시 충족 | Y | N (토큰 측정 불가) | ❌ |

---

## 측정 디테일

### 1. dev7-team 토큰 추출 (2026-05-01 ~ 2026-05-08)

`memory/task-timers.json` 에서 `team_id == "dev7-team"` AND `status == "completed"` AND `end_time ∈ [2026-05-01, 2026-05-08]` 조건으로 직접 추출:

| task_id | end_time | cwd_project | mcp_used | input_tokens | cache_read_tokens |
|---|---|---|---|---:|---:|
| task-2348 | 2026-05-02 02:59 | (none) | False | 1,035 | 14,422,697 |
| task-2350 | 2026-05-02 03:47 | (none) | False | 99 | 8,957,402 |
| task-2352 | 2026-05-02 06:11 | (none) | False | 126 | 8,959,272 |
| task-2355 | 2026-05-02 16:19 | (none) | False | 148 | 11,635,463 |
| task-2388 | 2026-05-03 03:00 | (none) | False | 285 | 52,573,855 |
| task-2395 | 2026-05-03 08:15 | (none) | False | 177 | 22,340,296 |
| task-2414 | 2026-05-03 17:48 | (none) | False | 17 | 360,516 |

- n = **7**
- 평균 input_tokens = 269.6
- 평균 cache_read_tokens = 17,035,643
- 평균 (input + cache_read) = **17,035,913**

### 2. Before 평균 (2026-04-25 ~ 2026-05-01)

| task_id | end_time | cwd_project | mcp_used | input_tokens | cache_read_tokens |
|---|---|---|---|---:|---:|
| task-2179 | 2026-04-25 13:28 | (none) | False | 172 | 6,838,348 |
| task-2308 | 2026-04-29 10:56 | (none) | False | 83 | 3,423,722 |
| task-2324 | 2026-04-30 04:38 | (none) | False | 55 | 958,732 |
| task-2326 | 2026-04-30 09:11 | (none) | False | 107 | 7,263,232 |

- n = **4**
- 평균 input_tokens = 104.2
- 평균 cache_read_tokens = 4,621,008
- 평균 (input + cache_read) = **4,621,113**

### 3. 절감률 산출

| 비교 | Before 평균 | After 평균 | 변화율 |
|---|---:|---:|---:|
| input + cache_read | 4,621,113 | 17,035,913 | **+268.7% (증가)** |

⚠ **경고**: 위 변화율은 MCP 효과가 아니다. AFTER 7건과 BEFORE 4건 모두 `mcp_used == False` 이며 `cwd_project == None` 이다 (즉 InsuRo cwd 작업 아님). 따라서 이 차이는 봇이 수행한 task 종류·범위 차이에서 비롯된 것이며, code-review-graph MCP의 절감 효과를 반영하지 않는다.

### 4. PoC 정의에 부합하는 비교군 (Group A strict)

`team_id == dev7-team AND cwd_project == InsuRo AND mcp_used == True` 인 AFTER 윈도 task:

```
n = 0
```

→ **Group A strict가 0건이므로 절감률 산출 자체 불가**. 2주 전 셋업 보고서에서 식별된 리스크("MCP 등록 후 봇이 자발적으로 graph 도구 호출 안 하면 효과 0")가 그대로 현실화됨.

### 5. PoC 인프라 무력화 추적

```
$ cd /home/jay/projects/InsuRo && git log --all -- .mcp.json
b930ec0 [task-2363] 마르둑: untrack .mcp.json (로컬 MCP 설정, 작업 외 부산물)
```

- 2026-05-01 20:07 — Phase 2 셋업 시 `/home/jay/projects/InsuRo/.mcp.json` 생성
- 2026-05-02 17:27 — task-2363에서 다른 봇(마르둑)이 `.mcp.json`을 untrack 및 삭제
- → PoC 기간 6/7일 동안 dev7-team이 InsuRo에서 MCP를 사용 가능한 상태가 아니었음
- 현 시점 점검: `ls /home/jay/projects/InsuRo/.mcp.json` → No such file or directory

### 6. 회귀 테스트 (`.failed` 이벤트 + 단위테스트)

**`.failed` 이벤트 점검** (`memory/events/*.failed` 중 timestamp ∈ [2026-05-01, 2026-05-08]):

```
n_total = 1
  - task-2479 (team=dev1, fail_reason=QC FAIL, 2026-05-07 19:45)
n_PoC_scope (dev7-team OR codegraph-anu 관련 task) = 0
```

→ PoC 직접 영역 회귀 **0건**. dev1 팀 task-2479는 codegraph-anu 변경과 무관(QC 일반 실패).

**AST 단위테스트** (트랙 A 회귀 검증):

```
$ python3 -m pytest scripts/tests/test_ast_dependency_map.py
============================== 47 passed in 1.04s ==============================

$ python3 -m pytest tests/test_ast_dependency_map.py
============================== 6 passed in 0.10s ==============================
```

→ 53/53 PASS, 트랙 A 회귀 **0건** ✅.

### 7. daemon / serve 다운 횟수

- systemd `code-review-graph.service` **미등록** (Phase 3 연기 사항으로 셋업 단계에서 의도적 보류)
- `ps -eo pid,cmd | grep -E '(code-review-graph|crg-daemon)'` (셸 자체 제외) → 활성 프로세스 **0개**
- v2.3.2 stdio MCP serve는 클라이언트가 호출할 때마다 on-demand 부팅 → "daemon 다운"이라는 사건이 정의되지 않음
- `/home/jay/projects/InsuRo/.code-review-graph/graph.db` mtime = 2026-05-01 20:07 (셋업 시점 이후 갱신 0회 — 사용 0회의 결과)
- → **daemon 다운 = N/A** (해당 사항 없음, 측정 불가능)

---

## 분석: 왜 Group A가 0건인가

### 1차 원인: `.mcp.json`이 즉시 untrack됨
InsuRo는 dev7-team 외 다른 봇들도 작업하는 공유 프로젝트. 셋업 다음 날 다른 봇이 `.mcp.json`을 자기 워크플로 외 부산물로 인식하고 정리 작업(task-2363) 중 untrack/삭제. dev7-team과 사전 협의 없이 진행됨.

### 2차 원인: dev7-team 작업 cwd가 InsuRo가 아님
PoC 기간 dev7-team의 7개 task는 모두 `cwd_project = None` 으로 기록됨. dev7-team은 측정 기간 동안 workspace 자체의 인프라 task(예: dispatch.py 모듈 분리 task-2388)에 집중했으며, InsuRo 도메인 작업이 사실상 없었다. 즉 PoC 설계가 봇 활동 패턴과 미스매치.

### 3차 원인: 봇 prompt에 명시적 MCP 호출 지시 부재
plan.md 리스크 섹션 #2에서 이미 식별된 위험: "MCP 등록 후 봇이 자발적으로 graph 도구 호출 안 하면 효과 0". 셋업 단계에서 dev7 봇 system prompt에 graph 도구 호출 가이드를 주입하지 않아 사용 동기 자체가 부재.

---

## 판정 및 다음 단계

### ❌ Phase 3 진입 불가
3 KPI 조건 동시 충족 실패. 핵심은 **측정 자체가 불가능했다**는 점이며, 이는 PoC 설계의 운영 가정이 봇 활동 패턴과 어긋났음을 의미한다.

### ✅ 트랙 A (자체 AST) 유지
- timeout 0% 달성, dry-run 0.18~5.56s, 단위테스트 53/53 PASS
- dispatch.py에 통합(`_get_ast_blast_radius`, `_enrich_affected_files_with_ast`)
- 운영 부담 낮음, 회귀 없음 → **그대로 유지**

### ❌ 트랙 B (code-review-graph MCP) 폐기
- PoC 결과 측정 불가 + 인프라 자동 정리됨 → 정착 불가
- 구체적 폐기 사유 / 사후 정리(`pipx uninstall code-review-graph`, `/home/jay/projects/InsuRo/.code-review-graph/` 정리)는 별도 cleanup task 또는 `codegraph-anu-decision.md` 에서 처리

### 4월 흐지부지 패턴 비교

| 4월 실패 | 5월 학습 |
|---|---|
| 측정 지표 모호 | KPI는 명확했으나 **측정 데이터 자체가 0건** — 다음 PoC는 봇 활동 시뮬레이션을 셋업 단계에서 검증해야 함 |
| 워크스페이스 612MB 단일 그래프 | InsuRo 단독 27MB 빌드 성공 — 기술적 인프라는 OK |
| 8봇 일괄 시도 | 1봇 PoC로 줄였으나 **그 1봇이 InsuRo 작업을 안 한다는 게 함정** |
| 시한 없음 | 1주 시한 + 본 보고서로 폐기 결정 명확화 — 흐지부지 방지 ✅ |

---

## 산출물

- 본 보고서: `/home/jay/workspace/memory/reports/codegraph-anu-phase2-poc.md`
- 폐기 결정: `/home/jay/workspace/memory/reports/codegraph-anu-decision.md` (별도)
- 데이터: `/home/jay/workspace/memory/task-timers.json` (dev7-team 윈도 11건)
- 회귀 검증: `scripts/tests/test_ast_dependency_map.py` (47 PASS) + `tests/test_ast_dependency_map.py` (6 PASS)
- `.failed` 이벤트: `memory/events/task-2479.failed` (PoC 무관)
