# task-3073 — 생성물 계측 하네스 (T-C)

레벨: Lv.2 · repo: InsuRo · 담당: dev2
승인: 제이회장님 2026-08-31 (Agent 미팅 결론)

## 배경 — 왜 필요한가

회장님이 직접 겪으신 문제: 목표 1,975자 지정 → 실제 5,093자. 이미지 프롬프트 6개 지정 → 0개.
**저희가 미리 못 잡았다.** 단위 테스트는 "프롬프트에 규칙이 들어갔는가"만 보고
**"모델이 그 규칙을 따랐는가"는 보지 않기 때문**이다(t3068 에서 실증 — 테스트 통과·라이브 실패).

Agent 미팅(2026-08-30) 결론: **자동 재생성 루프는 넣지 않는다. 측정 기록만 먼저 붙인다.**
단일소스: `memory/meetings/2026-08-30-benchmark-priority.md`

## 범위 — 측정 전용. 프로덕션 코드 0줄 수정

- 산출물 위치: `server/scripts/bench_harness/` (신규 디렉터리)
- **`server/main.py` 를 수정하지 마라.** import 해서 쓰는 것은 허용
- 다른 태스크(t3071·t3072)와 파일 교집합이 0이어야 한다

## 무엇을 재는가 — ★ 다지표 5개 동시 (단일 게이트 금지)

미팅 합의: 자수비 하나만 보면 Goodhart 함정에 빠진다.
"하나만 좋아지고 나머지가 나빠지는 것"을 잡으려면 **동시에** 기록해야 한다.

1. **자수비** = 실제 본문 글자수 / 목표 글자수
2. **소제목 수** — ★ 주의: 채널 프롬프트는 `■`/`▶` 기호를 지시한다. `##` 만 세면 틀린다
3. **질문형 소제목 비율** (`base.txt` 가 "소제목은 질문형으로" 를 요구)
4. **FAQ 블록 수**
5. **키워드 횟수** — 정확일치 / 공백제거 후 substring **2가지 모두**

### ★★ 래퍼 구획을 반드시 분리해서 재라 (ANU 실측 근거)

프로덕션 실패 산출물(5,491자)을 ANU 가 직접 분석한 결과, `##` 헤딩 3개가 전부
`## 네이버 블로그 완성본` · `## 품질 체크리스트 결과` · `## 메타 데이터` — **모델이 만든 래퍼**였다.
본문 소제목(`■`/`▶`)은 **0개**. 실제 본문은 4,379자이고 **래퍼가 1,112자**다.

→ 래퍼를 본문에 합산하면 자수비가 **부풀려진다**. 반드시 분리 집계하라.
→ 래퍼 발생 여부 자체도 **지표로 기록**하라(6번째 지표).

## ★ 하드 요구사항 — 프롬프트 구조 스탬프 (미팅 필수 조건)

기록 행마다 **프롬프트 구조 해시 + 커밋 sha** 를 함께 남겨라.

이유: 오늘 하루에만 t3064·3067·3068·3069·3070·3071 워크트리가 살아 있었고
프롬프트 구조가 계속 바뀌는 중이다. 스탬프가 없으면 서로 다른 구조 2~3종이
한 데이터셋에 섞이고, 그 데이터로 "위반율 N%" 를 자신 있게 결론 내게 된다.

> 오염된 데이터는 무데이터보다 나쁘다. 무데이터는 사람을 겸손하게 만들고,
> 오염된 데이터는 확신을 준다. (미팅 기록)

## 실행 형태

- `claude -p --model <model>` 실호출. **sonnet·haiku 각각** 측정(모델별 분리 필수)
- N 은 파라미터. 기본 10회
- 결과는 JSONL 적재 + 중앙값/p90 출력
- **비용 통제**: 실행 횟수·모델을 인자로 받고, 기본값은 보수적으로. 무한 반복 금지
- 타임아웃은 현행 상수(`CONTENT_CLI_TIMEOUT_SECONDS = 420`)를 넘지 않게

## 하지 말 것

- **자동 재생성 루프를 만들지 마라.** 미팅에서 명시적으로 철회됐다
- 게이트로 쓰지 마라. **기록 전용**이다(되먹임 없음 = Goodhart 위험 0)
- `server/main.py` 수정 금지
- 프롬프트 문구를 고치지 마라 — 이 태스크는 **재는 것**만 한다

## 검증

- [ ] 프로덕션과 동일하게 프롬프트가 조립되는가 (채널 프롬프트·스킬·금소법 포함)
      — ANU 초기 재현이 2,098자로 불완전했고 봇 실측은 7,980자였다. 후자가 맞다
- [ ] 6개 지표가 전부 기록되는가 (래퍼 여부 포함)
- [ ] 스탬프(구조 해시 + 커밋 sha)가 행마다 붙는가
- [ ] sonnet·haiku 분리 집계되는가
- [ ] `server/main.py` diff **0줄** (git diff 로 입증)
- [ ] 기존 회귀 0건

## 종결

- **PR 까지만. 머지하지 마라**
- `CI_WATCH_HANDOFF` 12필드 · 콜백 prompt UTF-8 **≤3900 bytes**
- `gh` 호출 시 `GH_TOKEN="$BOT_GITHUB_TOKEN"` 주입
- 보고서에 **첫 기준선 측정 결과**(중앙값·p90)를 포함하라 — 그게 이 태스크의 실질 산출물이다
