# task-869.1 완료 보고서: 이미지 생성 스킬 오너십 배분 및 라우팅 검증

**담당**: 다그다 (Dagda) — dev3 팀장
**팀원**: 루(백엔드), 브리짓(프론트), 아네(UX/UI), 모리건(테스터)
**완료일시**: 2026-03-24

---

## SCQA 요약

**S**: task-867.1에서 4개 이미지 생성 스킬(image-gen-guide, gemini-image, satori-cardnews, hybrid-image)이 신설되어 `/home/jay/.claude/skills/`와 `/home/jay/workspace/skills/` 양 경로에 배포된 상태다.

**C**: 스킬의 코드 오너십이 명시되지 않았고, 라우팅 트리거 키워드에 누락(SNS 이미지, A/B 테스트, 보험 광고 등 3건)과 정량 기준 불일치가 있었으며, gemini-image의 gcloud 스코프 코드가 단축형으로 기재되어 실제 토큰 발급이 실패하는 버그가 존재했다.

**Q**: 4개 스킬이 설계대로 동작하고 오너십과 라우팅 정책이 명확히 수립되었는가?

**A**: 3개 스킬 모두 실제 실행 검증 완료(satori PNG 3장/962ms, Gemini API HTTP 200/401KB, hybrid PNG 1.03MB). gcloud 스코프 버그 및 트리거 키워드 누락 4건 모두 자체 수정. `memory/specs/skill-ownership.md` 신규 생성. 스킬 판단 주체는 image-gen-guide 자동 라우터가 1차, 다그다(팀장)가 모호한 경우 2차로 판단하는 구조로 확정.

---

## 1. 팀원 오너십 배분

`memory/specs/skill-ownership.md` 신규 생성 (112줄).

| 스킬 | 코드 오너 | 역할 |
|------|-----------|------|
| image-gen-guide | 다그다 (dev3 팀장) | 라우팅 정책 유지보수, 의사결정 허브 |
| gemini-image | 루 (dev3 백엔드) | Gemini Pro API 호출, gcloud 인증 관리 |
| satori-cardnews | 브리짓 (dev3 프론트) | Satori Node.js 파이프라인, 템플릿 유지보수 |
| hybrid-image | 루 + 브리짓 공동 | 루: API 배경 생성, 브리짓: HTML 오버레이 |

task-867.1 합의 dev1 코드 오너십도 명시:
- `image_router.py` / `gcloud_auth.py` → 불칸 (dev1 백엔드)
- `carousel-gen/` 템플릿 → 이리스 (dev1 프론트)
- `design-tokens.json` → 비너스 (디자인)

---

## 2. 스킬 라우팅 검증 결과

| 라우팅 경로 | 결과 | 비고 |
|-------------|------|------|
| 포토리얼 → gemini-image | 정상 | 트리 및 gemini-image 용도와 일치 |
| 카드뉴스/배너 → satori-cardnews | 정상 | 트리 및 satori 적합 용도와 일치 |
| 한글+포토리얼 → hybrid-image | 정상 | 트리 및 hybrid "언제 사용하나" 일치 |
| 교차 참조 (satori→gemini-image) | 정상 | satori "부적합한 용도" 섹션에 명시 |
| 교차 참조 (hybrid→gemini-image) | 정상 | hybrid "한글이 적으면?" 섹션에 명시 |

---

## 3. 스킬 동작 검증 결과

### gemini-image
- gcloud 인증 계정: `anu2026@insuwiki-j2h.iam.gserviceaccount.com` (ACTIVE)
- 토큰 발급: 성공 (`--scopes=https://www.googleapis.com/auth/generative-language`)
- API 호출: HTTP 200, 이미지 크기 401,305 bytes
- 모델: `gemini-3-pro-image-preview` — 정상

### satori-cardnews
- Node.js v24.14.0, `@vercel/satori` + `@resvg/resvg-js` 설치 확인
- 실행 결과: PNG 3장 생성 성공
  - `scenario-a-recruiting.png`: 208,911 bytes (546ms)
  - `scenario-b-branding.png`: 210,631 bytes (186ms)
  - `scenario-c-career.png`: 268,425 bytes (230ms)
  - 전체 실행 시간: 962ms
- 한글 폰트 (`NotoSansCJKkr-Regular.otf`, `NotoSansCJKkr-Bold.otf`) 확인

### hybrid-image
- Python playwright 1.58.0 설치 확인
- `generate_hybrid.py` 실행: `--scenario A`
- 출력: `/home/jay/workspace/tools/ai-image-gen/output/v4-hybrid/hybrid_A.png` (1,054,405 bytes)
- 파이프라인(Gemini 배경 + Playwright HTML 캡처) 정상 완료

---

## 4. 스킬 사용 판단 주체

| 상황 | 판단 주체 |
|------|-----------|
| 요청에 이미지 종류가 명확한 경우 | image-gen-guide 자동 라우터 (1차) |
| 모호하거나 복합 요청 | 다그다 (dev3 팀장, 라우팅 정책 책임자) |
| 팀 외부 요청 (전체 공개) | 아누 → image-gen-guide로 진입 |
| Gemini 장애 시 | image_router.py 자동 fallback (GPT Image v2 high) |

---

## 5. 생성/수정 파일 목록

### 신규 생성
- `/home/jay/workspace/memory/specs/skill-ownership.md` — 스킬별 오너, 트리거, 판단 주체 매핑 (112줄)

### 수정 (이슈 해결)
- `/home/jay/.claude/skills/image-gen-guide/SKILL.md` — description 키워드 5개 추가, 라우팅 트리 "3줄 이상" 정량 기준 추가
- `/home/jay/workspace/skills/image-gen-guide/SKILL.md` — 동일 내용 동기화
- `/home/jay/.claude/skills/gemini-image/SKILL.md` — gcloud 스코프 단축형 → 전체 URL 수정 (bash + Python 코드)
- `/home/jay/workspace/skills/gemini-image/SKILL.md` — 동일 내용 동기화

---

## 6. 발견 이슈 및 해결

### 자체 해결 (4건)

1. **gcloud 스코프 버그** — `--scopes=generative-language` → `--scopes=https://www.googleapis.com/auth/generative-language` (전체 URL 형태 필수)
   - 수정: `.claude/skills/gemini-image/SKILL.md` bash + Python 코드, `workspace/skills/gemini-image/SKILL.md`, `skill-ownership.md`

2. **image-gen-guide 트리거 키워드 누락** — SNS 이미지, 인스타그램 이미지, A/B 테스트 이미지, 보험 광고, 텍스트 많은 광고 5개 키워드 추가
   - 수정: `.claude/skills/image-gen-guide/SKILL.md`, `workspace/skills/image-gen-guide/SKILL.md`

3. **image-gen-guide 라우팅 트리 정량 기준 없음** — "한글 텍스트 많음 (3줄 이상)", "한글 적거나 없음 (2줄 이하)" 기준 추가, A/B테스트 대량 생산 경로 명시
   - 수정: 동일 파일 2개

4. **Node.js playwright 전역 미설치 (낮은 위험)** — hybrid-image 파이프라인이 Python 기반(`generate_hybrid.py`)이므로 실제 영향 없음. 문서에 Python 기반 명시로 해결.

### 범위 외 미해결 (2건)

1. **image_router.py 미구현** — Gemini→GPT fallback 자동화 미완. 다른 팀(불칸, dev1) 소관. task-867.1 선결 과제 #4.
2. **gcloud 인증 영구화** — 서비스 계정 토큰 1시간 만료 이슈. 다른 팀(불칸, dev1) 소관. task-867.1 선결 과제 #1.

---

## 7. QC 자동 검증 결과

```json
{
  "task_id": "task-869.1",
  "overall": "PASS (보고서 생성 후 재실행 기준)",
  "checks": {
    "file_check": "PASS (skill-ownership.md 8066B, 스킬 4개 파일 모두 존재)",
    "data_integrity": "PASS",
    "test_runner": "SKIP (테스트 파일 0개, 문서 작업 정당한 SKIP)",
    "tdd_check": "SKIP (문서/설정 작업, Lv.1)",
    "schema_contract": "SKIP (workers/ 없음)",
    "pyright_check": "SKIP (Python 파일 없음)",
    "spec_compliance": "PASS"
  },
  "summary": "2 PASS, 1 FAIL→PASS (보고서 생성 후), 9 SKIP"
}
```

---

## 8. 비고

- Node.js playwright 전역 패키지는 미설치이나, hybrid-image 파이프라인은 Python 기반(`generate_hybrid.py`)으로 실제 동작에 영향 없음
- image-gen-guide description 업데이트는 `.claude/skills/`와 `workspace/skills/` 양쪽 동기화 완료 — 시스템 리마인더에서 업데이트된 description 확인됨
- GPT Image v2 백업 스킬(`gpt-image-backup`) 미존재 — 향후 신설 검토 권장 (현재는 수동 전환)
