# task-3039 — 유튜브 요약 프롬프트 개정 + 수집 채널 1개로 축소

**레벨**: Lv.2 · **팀**: dev2-team · **회장 승인 완료** (2026-08-27)
**저장소**: `Jeon-Jonghyuk/InsuWiki` (`/home/jay/projects/insuwiki`, 기본 브랜치 **master**)

## ★ 회장 피드백 (원문)
> "요약한 내용을 보니까 마음에 안 들어. **회사 명도 없고**, 더 정확히 필요한 정보가 없는거 같다.
> **세부적으로 언급된 숫자 예시들이 분명 더 있는데, 너무 중요한 내용들을 누락**시킨 것처럼 보인다.
>
> 요약을 명령하는 프롬프트가 있으면, 명확하게 **"채널명, 동영상 업로드 일자, 영상 제목"은
> 누락없이** 진행될 수 있게 만들어야 함!!! 단, **너무 줄글로 이어서 표현하는 건 피해야 하고,
> 가시성 높여서 읽기 편하게** 정리해줘!
>
> 그리고, 원래 채널을 2개 분석하라고 했었는데, **정닥터 1개 채널만** 진행했으면 좋겠어."

---

## ① 요약 프롬프트 개정 (`youtube_pipeline/summarizer.py`)

대상: `YOUTUBE_SUMMARY_PROMPT`

### 반드시 넣을 것
1. **출처 3종을 요약 맨 앞에 고정 배치** — 채널명 · 영상 업로드 일자 · 영상 제목.
   ★ 이 값들은 **자막에 없다.** LLM 이 추측하면 안 된다.
   파이프라인이 이미 정확한 값을 갖고 있으므로(`channel_name`, `published_at`, `title`)
   **프롬프트에 주입해 그대로 쓰게** 하라. 생성·추측 금지
   ★ 업로드 일자는 **KST 기준 날짜**로 표기하고 타임존을 명시하라(파이프라인 값은 UTC ISO).
2. **보험사(회사)명 누락 금지** — 영상에 등장한 보험사·상품명은 빠짐없이 적는다.
   회장이 "회사명도 없다"고 지적한 부분이다.
3. **수치 전수 보존** — 보험료·보장금액·한도·기간·나이·환급률·면책 등
   영상에 나온 **모든 숫자를 빠짐없이** 옮긴다. 대표값 몇 개만 고르지 마라.
   회장 지적: *"세부적으로 언급된 숫자 예시들이 분명 더 있는데 누락"*

### 가시성 — 줄글 금지
회장 지적: *"너무 줄글로 이어서 표현하는 건 피해야 하고, 가시성 높여서 읽기 편하게"*
- **불릿·짧은 문단·표**를 적극 쓴다. 긴 서술형 문단을 이어 붙이지 마라
- 수치는 **목록이나 표**로 정리해 눈에 띄게 한다
- 소제목으로 구획을 나눠 스캔이 가능하게 한다

### 유지할 것 (건드리지 마라)
- **내용 기준 핵심논지 재구성**이다. 단순 글자수 요약이 아니다 (회장 재확인 2026-08-26)
- **자막에 없는 내용 추가 금지** (출처 3종은 파이프라인 주입값이므로 예외)
- 마지막 줄 고지문: `※ 이 요약은 자동 생성이며 약관 원문을 우선합니다`
- 분량 하한 보증 로직 (`SUMMARY_MIN_LENGTH`/`MAX`) — 형식만 바꾸고 하한은 유지.
  ★ 표·불릿로 바꾸면 글자수가 줄 수 있다. **하한 때문에 억지로 늘리는 부작용이 없는지 확인**하고
  필요하면 하한을 조정하되 **근거를 보고서에 적어라**
- ★ **서두 인사말·메타 발화 금지** (t3029 조항). `~분석했습니다` · `아래 결과물을~` 류

---

## ② 수집 채널을 **보험명의정닥터 1개**로

**현재 상태 (ANU 실측, Firestore `youtube_channels`)**
```
ch_ins_king          인스킹 ins-king      active=True   lastCrawledAt=2026-08-27 09:23:48
ch_보험명의정닥터      보험명의정닥터        active=True   lastCrawledAt=2026-08-26 09:40:37
```

**바꿀 것**: `인스킹 ins-king` 을 수집 대상에서 뺀다.
- ★ **데이터를 삭제하지 마라.** 비활성화(`active=False` 등 기존 스키마 방식)로 처리하라.
  나중에 되살릴 수 있어야 한다
- ★ 이미 수집된 인스킹 카드·지식 데이터는 **그대로 둔다**
- 코드에 채널이 하드코딩돼 있으면 그것도 정리하되, **Firestore 가 단일 진실원**이면
  DB 조작만으로 끝내고 코드는 건드리지 마라. 어느 쪽인지 확인하고 근거를 남겨라
- 비활성 처리 후 **파이프라인이 실제로 1개 채널만 도는지** 확인하라

---

## ★ 하지 말 것
- **커서 가드 완화·제거 금지** (t3021 결과물, 라이브 발화 확인됨)
- **fail-closed 완화 금지** (전사 없으면 카드 생성 안 함)
- **1회 처리량 상한 로직 변경 금지** (t3028 결과물, OOM 재발 방지)
- `firestore_writer.py` 의 `properties` 저장 로직 변경 금지 (t3029 결과물 — 채널명·게시일)
- `nextapp/**` 변경 금지 (ANU 가 별건으로 다루는 중)
- 기존 카드 일괄 재생성 금지 — 필요하면 **설계만 제안**하고 ANU 승인을 받아라
- 자격증명 값을 저장소에 커밋

## allowed_resources
```yaml
allowed_resources:
  paths:
    - "scripts/youtube-pipeline/youtube_pipeline/summarizer.py"
    - "scripts/youtube-pipeline/youtube_pipeline/main.py"
    - "scripts/youtube-pipeline/docs/**"
    - "scripts/youtube-pipeline/tests/**"
    - "memory/reports/task-3039.md"
  forbidden_paths:
    - "scripts/youtube-pipeline/youtube_pipeline/firestore_writer.py"
    - "scripts/youtube-pipeline/youtube_pipeline/transcriber.py"
    - "scripts/youtube-pipeline/youtube_pipeline/drive_uploader.py"
    - "nextapp/**"
    - ".github/workflows/**"
    - "functions/**"
  commands: ["bash", "python3", "pytest", "gh"]
  merge_policy: "tiered"
  ttl_hours: 24
```
★ `main.py` 는 **프롬프트에 출처 3종을 주입하는 배선**에 한해 허용한다. 그 외 수정 금지.

## 검증 (실측 강제)
1. **실제 요약 1건 생성** — 진짜 영상 자막으로 Sonnet 을 호출해 **결과 전문을 보고서에 붙여라**.
   "테스트 통과"가 아니라 **생성물 그 자체**를 보여라
2. **출처 3종 확인** — 그 결과물 맨 앞에 채널명·업로드일(KST)·영상제목이 **정확히** 있는지.
   파이프라인 실제 값과 대조하라 (지어낸 값이 아님을 증명)
3. **수치 보존 확인** — 자막에 나온 숫자를 **세어서**, 요약에 몇 개가 옮겨졌는지 대조표로.
   누락이 있으면 사유를 적어라
4. **가시성 확인** — 줄글이 아니라 불릿·표로 정리됐는지. 결과물로 판단 가능하게
5. **채널 축소 확인** — 파이프라인 1회 수동 실행에서 **정닥터만** 도는지 로그로 증명.
   ★ GPU·RAM 장시간 점유 금지, 짧게. 타이머 실행 시각과 겹치지 마라
6. **회귀** — `pytest` **base 재측정 기준선**
7. **봉인** — 출처 3종을 빼는 변이, 채널을 다시 2개로 되돌리는 변이를 만들어
   테스트가 FAIL 하는지 확인·복원. 변이가 no-op 이 아님을 `assert` 로 먼저 증명하라

## 완료 조건 (DoD)
**실제 생성된 요약 맨 앞에 채널명·업로드일(KST)·영상제목이 파이프라인 실제 값 그대로 들어가고,
보험사명과 수치가 누락 없이 불릿·표 형태로 정리되며, 파이프라인이 정닥터 1개 채널만 수집한다.**

## ★ 세션 조기 종료 대책
시작 즉시 브랜치 + 드래프트 PR 을 먼저 열어라. **단계마다 커밋하라.**
검증에서 오래 붙잡히지 마라 — 요약 1건 생성은 30~40초면 된다.
★ ANU 명세 전제가 틀렸다고 판단되면 구현하지 말고 **반증을 먼저 기록한 뒤 보고하라.**

## 운영 계약
- `origin/master`(=`a72c946`) 기준 `git pull --ff-only` 후 시작
- ★ **worktree 를 써라.** 메인 저장소 `/home/jay/projects/insuwiki` 는 **systemd 러너가 직접 실행**한다
- ★ `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` 금지.
- ★ PR Check `validate` 는 이 저장소에서 **상시 적색**이다(`scripts/*.ts` tsc). 교집합 없으면 선재로 판정하고 근거를 적어라

## 보고
**PR 생성까지가 범위다. 머지는 ANU 가 한다. 자동 머지 금지.**
`memory/reports/task-3039.md` 작성 후 표준 완료 콜백 등록. 콜백 프롬프트 **UTF-8 3900 bytes 이하**.
★ 봉투 첫 줄에 **"출처 3종 실제 반영 여부 + 채널 1개 축소 여부"** 를 담아라.