# task-3002 — 묵은 PR #215 · #202 심층분석 및 정리안 (분석 우선 · 실행은 ANU 승인 후)

**레벨**: Lv.2 · **팀**: dev3-team (다그다) · **회장 승인 완료** (2026-08-24)

## 회장 지시
> 묵은 PR 은 어떻게 정리해서 **배포까지** 할지 고민해야 해.
> 너무 옛날건 그냥 무시해도 되지만, **215, 202 는 심층분석해서 PR 정리**해야 함.

---

## ★ ANU 선행 실측 (2026-08-24) — 이걸 출발점으로 삼아라

```
PR #215  task/task-2954-dev2  head=64111fb  state=dirty  +995/-0  files=6
         origin/main 대비 34커밋 뒤처짐
PR #202  task/task-2927-dev1  head=8f6692a  state=dirty  +941/-22 files=9
         origin/main 대비 45커밋 뒤처짐
```

**두 PR 이 건드리는 파일이 전부 `origin/main` 에 이미 존재한다.**
blob 대조 결과:

| PR | 결과 |
|---|---|
| #215 | 6파일 **전부 차이** |
| #202 | 9파일 중 **4개 일치**(`test_drive_file_id_parser.py` · `test_parse_premium_file_id.py` · `test_verify_jwt_es256.py` · `20260808120000_drive_file_id_normalization.sql`), 5개 차이 |

**정황**: 후속 작업이 같은 영역을 이미 머지했을 가능성이 높다.
- #202 (Drive 프록시) → **PR #203 `[P0-1] Drive 공개제거→서버 프록시 (Phase 1/1.5/2)`** 가 2026-08-09 머지됨
- #215 (실손 세대지식 노출 B:배선) → **PR #216 task-2955 `silson_summary 배선`** 이 2026-08-15 머지됨

★ 그러나 이건 **정황이지 결론이 아니다.** 네가 실측으로 판정하라.

---

## 판정하라 — 각 PR 에 대해 다음 셋 중 하나

| 판정 | 조건 | 조치 |
|---|---|---|
| **(a) 흡수됨** | PR 의 기능·의도가 main 에 이미 전부 반영 | PR 을 **닫는다**. 닫는 사유를 PR 코멘트로 남긴다 |
| **(b) 고유 가치 있음** | main 에 없는 기능·수정이 남아 있음 | **그 부분만** 추려 새 PR 로 재작성. 낡은 PR 은 닫는다 |
| **(c) 일부만** | 일부는 흡수, 일부는 미반영 | 미반영분만 새 PR. 무엇을 버리고 무엇을 살렸는지 명시 |

★ **rebase 로 되살리려 하지 마라.** 34~45커밋 뒤처졌고 `dirty` 상태다.
   충돌 해소 과정에서 **의미 충돌**(텍스트는 합쳐지는데 동작이 깨지는 것)을 놓치기 쉽다.
   필요한 것만 새로 옮기는 편이 안전하다.

## 판정 방법 (실측 강제)
1. **diff 방향 판별** — 각 차이 파일에 대해 "PR 이 더 새것인가, main 이 더 새것인가"를 확인하라.
   main 이 34~45커밋 앞서 있으므로 **대개 PR 이 낡았을 것이나 단정하지 마라.**
   PR 에만 있는 함수·엔드포인트·필드를 찾아 `origin/main` 에서 **이름으로 직접 검색**해 존재 여부를 확인하라.
2. **기능 단위로 보라** — 파일 diff 가 아니라 **"이 PR 이 하려던 일이 지금 되는가"** 로 판정하라.
   - #215: 실손 세대지식이 설계사 화면에 실제로 노출되는가? (`silson_summary` 경로)
   - #202: Drive 파일이 서버 프록시(file ticket)로 제공되는가? 공개 링크가 제거됐는가?
   ★ **라이브/main 에서 실제로 확인**하라. 코드 존재만으로 판단하지 마라.
3. **미반영분 식별** — (b)(c) 라면 무엇이 왜 필요한지 근거와 함께 목록화하라.

## ★ 이 태스크의 경계 — 어디까지 하나
- **분석 + 정리안 제시까지가 이번 범위다.**
- **(a) 판정 시 PR 닫기는 실행해도 된다** (되돌리기 쉬움, 코드 변경 0). 사유 코멘트 필수.
- **(b)(c) 의 재작성 코드는 ANU 승인 후에 착수한다.** 먼저 "무엇을 어떻게 옮길지" 안을 제출하라.
- ★ `PolicyAnalysis.tsx` 는 **후속 작업(신규설계 비교 입력 UI)이 대기 중**이다.
  이 파일을 건드리는 재작성은 특히 신중히 판단하고 **반드시 ANU 승인을 받아라.**

## 범위 · 금지
**허용**: PR 조회·diff 분석 · PR 닫기(+코멘트) · 분석 보고서 작성

**금지**:
- **(b)(c) 재작성 코드를 ANU 승인 없이 작성·푸시** — 안 제출이 먼저다
- **PR #106 · #105 · #94 · #92 · #8 손대기** — 회장이 "무시 가능"으로 분류했다. 범위 밖
- `origin/main` 직접 커밋 (Ruleset 이 차단하며, 시도 자체를 하지 마라)
- 진행 중 타 작업 영역 침범: `scripts/youtube-pipeline/**`(InsuWiki·별 저장소) · `supabase/functions/send-push/**`(task-3003 동시 진행)

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "memory/reports/task-3002.md"
    - "memory/reports/task-3002-*.md"
  forbidden_paths:
    - "src/**"
    - "server/**"
    - "supabase/**"
    - "ops/**"
    - ".github/**"
  commands:
    - "gh"
    - "git"
    - "python3"
  merge_policy: "analysis_only"
  ttl_hours: 48
```
★ 분석 태스크라 코드 경로를 전부 forbidden 으로 뒀다. (b)(c) 재작성은 ANU 승인 후 **별도 태스크**로 발급한다.

## 운영 계약
- 저장소 `/home/jay/projects/InsuRo`, `origin/main`(=`51718e8`) 기준
- ★ `gh` 호출 시 `GH_TOKEN="$BOT_GITHUB_TOKEN"` 주입 필수 (회장 개인 PAT 금지 — 감사기록 오염)
- 워크플로우 `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` · QC `/home/jay/workspace/teams/shared/QC-RULES.md`
- `WORKSPACE_ROOT=/home/jay/workspace` · `CHAT_ID=6937032012` · 수집자 key `ANU_KEY=c119085addb0f8b7`
- 완료 경로는 `finish-task.sh` 실행이 유일하다. 수동 `.done` 금지.
- **명세와 실측이 다르면 임의 판단하지 말고 ANU 에 보고하라.**

## 완료 조건
#215 · #202 각각 (a)/(b)/(c) 판정 + 근거(기능 단위 실측) · (a) 는 닫기 실행 ·
(b)(c) 는 "무엇을 어떻게 옮길지" 실행안 제출 · 배포 필요 여부와 순서 명시

## 보고
`memory/reports/task-3002.md` 작성 후 표준 완료 콜백 등록. 콜백 프롬프트 **UTF-8 3900 bytes 이하**.
판정 결과를 **PR 별로 한 줄씩** 요약해 봉투에 담아라.