# task-3074 — 이미지 프롬프트 구획 근본 수정 (지시 충돌 해소)

레벨: Lv.2 · repo: InsuRo · 담당: dev1
승인: 제이회장님 2026-08-31 · **회장이 같은 증상을 3회 겪었다. 이번엔 근본에서 고친다.**

## 증상

`AI 콘텐츠 작성` 벤치마킹에서 생성하면 **"이미지 프롬프트 구획을 찾지 못했습니다"** 경고.
"목표 대비 반영 결과" 패널: 이미지 프롬프트 **목표 N개 → 실제 0개**.
t3068·t3070 에서 두 번 고쳤는데 **또 재발**했다.

## ★ 근본 원인 — "이미지를 어떻게 다룰지" 지시가 두 개이고 서로 반대다 (ANU 코드 확인)

**① 채널 프롬프트** `src/data/generateOptions.ts:30-32`
```
4. 이미지 가이드:
   - [이미지 삽입 위치] 표시 3~5곳 (네이버는 이미지 있는 글 우대)
```
→ **본문 안**에 마킹하라

**② 벤치마킹 규칙** `server/main.py:1192` `_BENCHMARK_IMAGE_RULE_TEMPLATE`
```
- 본문을 모두 쓴 뒤, 마지막에 `## 이미지 프롬프트` 별도 구획을 출력한다.
- 본문 안에는 이미지 프롬프트를 넣지 마라.
```
→ **본문 뒤 별도 구획**. ①과 정면 반대.

**③ 프론트가 찾는 것** `src/components/generate/imagePromptSection.ts:18`
```js
/^[ \t]*#{1,6}[ \t]*이미지\s*프롬프트[ \t]*$/m
```
→ ② 형식만 인식.

**모델은 ①을 따랐다.** 회장 스크린샷의 "활용 가이드" 표에 `이미지 위치 | 총 5곳 표시 완료`.
채널 프롬프트는 1위 글 원문(최대 20,000자) **뒤**에 오고 벤치마킹 규칙은 원문 **앞**에 묻힌다.
**모델 잘못이 아니라 모순된 지시를 준 우리 잘못이다.**

## 작업 A — 지시를 하나로 통일 (핵심)

벤치마킹 모드일 때 ①과 ②가 공존하면 모델은 반드시 하나를 버린다.
**둘 중 하나로 정리하라.** 판단은 봇이 하되 근거를 보고서에 남겨라.
- (a) 벤치마킹 모드에서 채널 프롬프트의 이미지 항목을 제거
- (b) 두 형식을 한 구조로 통합(본문에 위치 마킹 + 뒤에 프롬프트 구획, 서로 참조)

★ **비벤치마킹 일반 생성에는 영향을 주지 마라.** 그쪽은 ①만 있으면 된다.

## 작업 B — 열거형 금지를 구조 규칙으로 교체

현재 `server/main.py:1252`:
```
- 품질 체크리스트·메타 데이터·완성본 안내 같은 래퍼 구획을 만들지 마라.
```
모델이 **"활용 가이드"** 라는 **금지 목록에 없는 이름**으로 빠져나갔다(회장 스크린샷).
이름 열거는 계속 뚫린다.

→ **"본문 외 구획은 `## 이미지 프롬프트` 하나뿐이다"** 류의 **구조 규칙**으로 바꿔라.
이름과 무관하게 막히는 형태여야 한다.

## 작업 C — 프론트 폴백 (마지막 안전망)

지시를 고쳐도 모델이 안 따를 수 있다. `splitImagePrompts()` 가 엄격 마커를 못 찾으면
`[이미지 삽입 위치]` 형식도 인식해 살려내라.
- 폴백으로 건진 경우 **화면에 그 사실을 표시**하라(조용히 성공한 척 금지)
- 폴백이 오탐으로 본문을 잘라먹지 않게 하라 — 못 찾으면 **본문 전체 보존**이 현행 계약이다

## ★★ 작업 D — 실호출 재현 강제 (이게 제일 중요하다)

t3070 에서 봇이 46회 실호출했는데 **BASE 도 28/28 마커 정상**이라 결함을 재현하지 못했다.
재현 못 한 채 고치면 고쳤는지 알 수 없다. 실제로 또 재발했다.

**이번에는 재현부터 하라:**
1. **채널 프롬프트를 포함한 실제 조합**으로 프롬프트를 조립하라
   (t3070 하네스는 이 조합이 아니었을 가능성이 높다 — 확인하고 보고하라)
2. BASE 에서 **마커 누락 또는 래퍼 구획 생성을 재현**하라
3. 재현된 조건에서 수정본을 돌려 **개선을 실측**하라
4. **재현에 실패하면 그 사실을 보고서 최상단에 쓰고 ANU 판단을 요청하라.**
   재현 못 했는데 "고쳤다"고 쓰지 마라

프로덕션 실패 산출물 참고: `contents` 테이블 최신 행 · t3070 이 남긴
`teams/dev4/task-3070/prod_failing_output.md`(5,491자, 래퍼 1,112자, `■▶` 소제목 0개)

## 검증

- [ ] D 재현 결과(성공/실패)를 수치로 보고
- [ ] sonnet·haiku 각각 마커 출력률 (t3070 대비)
- [ ] 래퍼 구획 생성률 (수정 전후)
- [ ] 비벤치마킹 일반 생성 영향 0
- [ ] 회귀 0건 (base sha 기준선 재측정 후 대조)
- [ ] **변이 테스트**: A/B/C 각각 되돌리면 테스트가 죽는가.
      변이 주입 전 `assert 원문 in 소스` 로 no-op 아님 입증

## 하지 말 것

- 분량/글자수 관련 수정 금지 (별도 진행 중)
- 모델 제한 추가 금지
- SEO 노하우 on/off 기능은 **후속 태스크(t3075)** 다. 건드리지 마라

## 종결

- **PR 까지만. 머지·배포 금지** (ANU 가 한다)
- `CI_WATCH_HANDOFF` 12필드 · 콜백 prompt UTF-8 **≤3900 bytes**
- `gh` 호출 시 `GH_TOKEN="$BOT_GITHUB_TOKEN"` 주입
- 봉투에 "미해결 없음" 을 근거 없이 쓰지 마라
