# 미결 목록 · 작업 우선순위 (2026-08-24)

> 근거: 8월 전수조사(InsuRo git log 87건 · 보고서 111건 · 프로덕션 DB · systemd · GitHub API · 라이브 번들 157청크)
> 회장 지시 반영: 2026-08-24. **A 는 인슈위키 개선 완료 후로 후순위 조정.**

---

## ★ 회장 확정 우선순위 (2026-08-24)

```
1. 인슈위키 개선작업          ← 최우선
2. 묵은 PR 정리 (#215 · #202 심층분석 필수)
3. C — 푸시 하위 결함 3건 (M7 · M2 · M3)
4. 기존증권분석 · 신규설계 분석 · 복합설계 개선
5. A — 백업/알림 (인슈위키 개선 마무리 후)
```

---

## 1. 인슈위키 개선작업 (최우선)

**목표**: 유튜브 전사 → 요약 → 인슈위키 `wiki-my-daily` 메뉴 중 **wiki** 에 자동 업로드
- **카드 내용** = 요약
- **첨부파일** = 전사 원문

### ★ 요약 방식 결론 (찾음 — `memory/tasks/task-2980-phase3.md`)

**"요약"이 아니라 「핵심 논지 재구성」이다.**

```
분량: 1,500~2,000자   (현재 Claude Sonnet 실호출 결과는 973자 — "요약"에 그쳐 논지 재구성이 아님)
구조: 주제 한줄 → 핵심 주장 → 수치/조건/예외 → 실무 시사점
★ 숫자·보장한도·기간·면책사항 축약 금지
대상: YOUTUBE_SUMMARY_PROMPT 개정 + 요약 가이드 문서로 박제
```

→ **임의 재설계 금지.** 위 규격을 그대로 따른다.

### Phase 3 작업 4가지 (명세 완비 · 미착수)
1. **전사 정확도** — ① Whisper **large-v3 격상** ② 보험 용어 `initial_prompt` 주입(특약·갱신형·해지환급금·납입면제·3대질병·표적항암) ③ 후처리 교정(반복 오인식·표기 통일 한정, 원문 훼손 금지)
2. **요약 확대** — 위 규격대로
3. **전사파일 권한 = 인슈위키 로그인 사용자만** — 완전 공개 금지. 프록시/서명 URL
4. **시크릿 정리 → 머지**

### 블로커 재측정 (2026-08-24 · 대부분 해소됨)
| 블로커 | 상태 |
|---|---|
| 시크릿 위생 (`.pyc` 평문) | ✅ **해소** — master 추적 `.pyc` **0개**, `.gitignore` 규칙 2건 (task-2989 가 처리) |
| Phase 2 산출물 원격 반영 | ✅ **해소** — `summarizer.py`·`drive_uploader.py`·`firestore_writer.py`·`transcriber.py`·`main.py` 전부 **master 에 존재** (인덱스의 "원격 브랜치 부재·PR 없음"은 낡은 정보) |
| GPU | ✅ **가동 중** — `whisper-gpu.service` running · `cloudflared-whisper.service` running · GTX 1060 6GB |
| 파이프라인 서비스 | ⚠️ `insuwiki-youtube-pipeline.service` **inactive dead** |
| ★ large-v3 적재 | ⚠️ **미검증** — GTX 1060 **6GB**. large-v3 권장 VRAM ~10GB. **하드웨어 한계 가능성**. 착수 시 최우선 확인 항목 |
| 담당 | ⚠️ 명세상 dev1(헤르메스) 인데 **dev1 은 사용 보류 상태**(2026-08-20 미수신) → **재배정 필요** |

**연관 기존 작업**
- task-2980 Phase 1/2
- task-2987 / task-2989 (임베딩 · 벡터검색 수복, PR #5 머지됨)

---

## 2. 묵은 PR 정리

### 심층분석 필수 (회장 지시)
| PR | 생성일 | 내용 | 상태 |
|---|---|---|---|
| **#215** | 2026-08-14 | task-2954 실손 세대지식 설계사 노출 MVP (B: 배선) | files=6 · base 대비 크게 뒤처짐 · `PolicyAnalysis.tsx` 충돌 이력 |
| **#202** | 2026-08-08 | task-2927 Drive 프록시 Phase1 (백엔드 코어) | files=9 · IDOR 보안 이력 · 이전에 "머지보다 재작성" 판단 있었음 |

★ 단순 머지/폐기 판단이 아니라 **심층분석 후 정리 → 배포까지** 고려할 것.

### 무시 가능 (회장 판단)
- #106 · #105 (2026-05-07) — 3개월 반 방치
- #94 · #92 (2026-05-03) — 자동 되돌림(auto-revert) PR
- #8 (2026-04-20) — 4개월 방치

### InsuWiki
- 열린 PR #3 (task-2450 multi-repo enforcement)
- 원격 브랜치 **30개** 누적
- PR Check CI **failure** (2026-08-20) — "선재 실패"로 넘기며 머지해온 상태

---

## 3. C — 푸시 알림 하위 결함 3건 (회장 진행 지시)

전부 현재 실사용 0 (대화 1건 · 푸시 구독 0행). 그러나 회장 지시로 진행한다.

| ID | 내용 | 실측 |
|---|---|---|
| **M7** | 푸시 발송 미완성 | `supabase/functions/send-push/index.ts` 가 `Content-Length: 0` 으로 body 없이 POST. `payload` 인자를 받고도 안 실음. 주석: "For now, send unencrypted - simplified push" |
| **M2** | 상담 링크 만료 수단 없음 | `customer_chat_tokens` 에 만료 컬럼 자체가 없음. RPC 3종은 `is_active` 를 검사하므로 **DB 에서 비활성화는 가능**. 진짜 문제는 **설계사용 회수 UI 부재**(앱 코드 0건) + 자동 만료 부재 |
| **M3** | 대화 분기 시 무성 실패 | `conversations` 에 `(customer_id, agent_id)` UNIQUE 부재 + RPC 내부 `ORDER BY created_at ASC LIMIT 1` 타이브레이커 부재. 분기 시 고객이 메시지·알림을 **모두** 못 받음. 현재 분기 0건 |

### ★ M7 순서 제약 (반드시 지킬 것)
```
H2(완료) → 3단계(완료) → M7
```
M7 을 먼저 고치면 상담 미리보기가 공격자 서버로 평문 전송된다.
H2(엔드포인트 오리진 화이트리스트)와 3단계(anon 정책 제거)가 **이미 완료**되었으므로
지금은 M7 착수 가능하다.

**M7 난이도 주의**: 웹푸시 payload 를 실으려면 **암호화(ECDH + HKDF + AES-GCM)** 구현이 필수다.
단순 버그 수정이 아니다. 라이브러리 사용 가능 여부를 먼저 조사할 것.

---

## 4. 기존증권분석 · 신규설계 분석 · 복합설계 개선 (회장 지시)

### 신규설계 비교 입력 UI — 조사 완료 (2026-08-23)
현재 화면은 **JSON 두 개를 손으로 입력**해야 해서 설계사가 쓸 수 없다.

**이미 있는 것**
- `server/policy_extract/proposal_parser.py` — 가입제안서 담보 표 파서 (task-2981)
  - `pdfplumber.extract_tables()` 기반. 출력 `ProposalExtract{insurer, product_name, rows[], total_premium}`
  - `ProposalRow{name, amount, premium, parse_state, row_kind}`
- 기존 분석 JSON(`analysis_table`)은 **증권분석 화면이 이미 생성**해 들고 있음
  (`PolicyAnalysis.tsx:426` `job.results[].analysis_table`)

**없는 것**
- 파서의 **API 노출 0건** (`routes/` 에 없음)
- 업로드 UI
- 검증 범위: **메리츠 샘플 1건뿐**. 파일 주석에 "레이아웃이 다른 보험사 샘플이 쌓이면 그때 일반화한다(지금 추측 금지)"

**★ 구조상 중요**: 비교 엔진은 `coverages[].premiums_won{회사명: 금액}` 형태로 **회사별 보험료를 나란히** 요구한다.
제안서 1장 = 보험사 1곳이므로 **여러 장을 올려야 비교가 성립**한다. "PDF 하나 올리면 끝"이 아니다.
(회장이 말한 **1·2·3사 최적조합**이 정확히 이 구조)

**4단계 안**
1. **기존 분석 자동 연결** — 증권분석 결과에서 "이 고객 신규설계 비교" 로 넘김. 입력칸 2개 중 1개 제거. **샘플 불요, 배선만**
2. **제안서 1장 업로드** — 파서 API 노출 + 업로드 UI + 파싱 결과를 표로 보여주고 설계사가 수정
3. **여러 장 → 회사별 병합** — 담보명 매칭해 `premiums_won` 조립. **엑셀 수기비교 대체 지점**
4. **보험사별 레이아웃 일반화** — 샘플 축적 후

**회장 제공 필요**: 보험사별 가입제안서 PDF **3~4건** (2단계 이상 설계 전제)

### 복합설계 워크벤치
- 단일소스: `memory/plans/insuro-policy-analysis_260812/composite-design-workbench-vision_260820.md`
- 설계사용(고객 비노출) · 엑셀 수기비교 대체 · (제안서+약관) 세트 → 담보파싱 · 매칭 · 가성비 · 조립
- T3(A/G/C) 하부엔진 완료. 상부(제안서파싱 · 가성비 · 화면) 신규
- 회장 제공 필요: 증권/약관 대응 세트 샘플

---

## 5. A — 백업/알림 (인슈위키 개선 마무리 후)

### A-1. InsuWiki 백업 3개월 부재 ★
```
Firestore Backup: 총 98회 실행 · 성공 0회 · 실패 98회
2026-05-18 최초 실행 이래 한 번도 성공한 적 없음
실패 지점: google-github-actions/auth@v2  (GCP 인증)
```
지식 데이터(임베딩 303건 · 유튜브 전사 · 크롤링 축적분)에 **복구 수단 없음.**

★ 2026-08-23 ANU 1차 보고 "3일 연속 실패"는 **최근 3건만 보고 낸 과소보고**였다.
전수 확인 결과 3개월·98회 전건 실패. 최근 N건만으로 결론 내지 말 것.

### A-2. 드리프트 감시 알림 미배선
```
insuro-drift-monitor.service : timer active · service exit 1
  → 고장이 아니다. verdict=CRITICAL 을 정상 판정한 결과다(설계상 exit 1)
알림 경로: EnvironmentFile=...drift-monitor.env  → 유닛에서 주석 처리 + 파일 자체 부재
```
CRITICAL 을 탐지해도 **어디로도 알리지 못한다.** 감시 목적이 무력화된 상태.

★ 2026-08-23 ANU 1차 보고 "유닛 미설치"는 오류. **설치돼 있고 작동 중**이었다.
systemd `failed` 표시만 보고 판단한 것이 원인.

---

## 6. 참고 — 미결이 아닌 것 (확인 완료)

| 항목 | 판정 근거 |
|---|---|
| 백엔드 미배포 (`server/silson/disputes.py` 외 5파일 1,512줄) | 라우터 등록 **0건** + 라이브 프론트 **157청크 전체 호출 0건** → 영향 없음 |
| 라이브 프론트 최신 여부 | `96ad2b2`→`51718e8` 사이 `src/` 변경 **0건** → 재배포 불요 |
| 고객 채팅 접근제어 | 4테이블 익명 정책 **0건**. 회장 요구(담당 설계사 + 링크 공유 고객만) **프로덕션 4프로브 전건 통과** |
| 롤백 SQL 되살림 위험 | 위험 파일 2개 봉인 후 **실제 실행해 차단 확인**. t3000 롤백은 정당 복구 수단이라 미봉인 |

---

## 7. 저장소 위생 (사소)
- `/home/jay/projects/InfoKeyword` 와 `/home/jay/projects/InforKeyword` 둘 다 존재(오타 중복 의심). 확인 필요
- 미검토 완료보고 2건: task-2926(InfoKeyword 홍보성 판단, 머지 HOLD) · task-2980(InsuWiki 유튜브 Phase2, 머지 HOLD)
