한 줄 — 8/18 에 물어보신 "새로 열린 상단 밴드가 실제 seedance 출력에서 버티는지", 재봤고 버팁니다. 그리고 그 과정에서 상한 자체를 실측으로 옮겼습니다. 확인 부탁이 아니라 결과 보고입니다.
⚠️ 먼저 정정합니다. 8/21 리마인더에 제가 "립싱크는 코드가 셀 수 있는 값이 아니라 눈이 필요하다" 고 썼는데 부정확했습니다. 우리는 이미 whisper 기반 대본↔발화 정합 계측을 갖고 있었습니다(8/13 골격 데모,
mlx whisper-large-v3-turbo, 임계 0.75, seedance-2.5 46줄 중 42 통과). 제가 그 자산을 못 찾고 "손이 막혔다"고 보낸 것이라, 재환님 시간을 불필요하게 잡아둔 셈입니다.
동일 제품·조합 24판(조건 3종 × 8판) 실측:
| 총 글자수 밴드 (ko 15초) | 판 | 비율 |
|---|---|---|
| 권고창 54~78자 | 18 | 75% |
| 상단 신설 79~87자 | 5 | 21% |
| 하단 신설 48~53자 | 1 | 4% |
최대값 87자(밀도 5.80) — 판정 상한에 정확히 붙었습니다. 확장 전이라면 이 5판이 전부 하드 실패로 재작성을 태웠습니다.
같은 골격·제품·인물로 길이만 바꿔 뽑았습니다.
| 총 글자수 | 밀도(자/초) | 대사 잘림 |
|---|---|---|
| 77 · 82 · 85 | 5.13 · 5.47 · 5.67 | 0 |
| 91 · 97 · 103 | 6.07 · 6.47 · 6.87 | 0 |
한 제품만으로는 상한을 못 정하므로 제품 형태·골격·훅·상황이 전부 다른 두 조합으로 일반화도 확인했습니다.
| 제품 | 골격 | 총 글자수 | 밀도 | 잘림 |
|---|---|---|---|---|
| 아우라 보태닉스 (튜브) | mystery_box_reveal + beauty_filter_glitch + daylight_kitchen |
97자 | 6.47 | 0 |
| 네이처스 하베스트 (지퍼봉지) | camera_pov + receipt_roll_unspool + jjimjilbang |
96자 | 6.40 | 0 |
3제품 · 3골격 · 5편 전부 전 줄 발화 확인 (사람 확인, 2026-08-25).
종전 87자는 density_tol 0.12 라는 튜닝값에서 파생된 숫자였고, 코드 주석 자체가 "실측 상수가 아니다"라고 밝히고 있었습니다. 실측해보니 그보다 16자 위까지 멀쩡합니다.
전: 총 글자수 상한 초과 → hard 재작성 (LLM 재호출, 최대 6라운드)
후: 총 글자수 상한 초과 → soft 경고
하한도 함께 내렸습니다 — 새로 넣은 PERFORMANCE 절이 대사 사이 침묵을 시선·미세동작으로 점유하므로, "짧으면 영상 모델이 지어낸 말로 채운다"는 근거가 사라졌습니다.
결과: 총 글자수는 더 이상 재작성 사유가 아닙니다. 남는 hard 는 문장 수 창(2~6)과 문장당 3~28자뿐이고, 후자는 "한 줄 안에서 발화가 밀린다"는 별개 근거를 갖습니다(총량이 아니라 한 줄의 문제라 위 실측이 덮지 않습니다).
⚠️ 105자 이상은 안 봤습니다. 되돌리거나 다시 조일 일이 생기면 그 위를 먼저 뽑아야 합니다. 되돌리는 법은 주석에 남겼습니다.
업계 레퍼런스 프롬프트를 우리 SPEC 과 항목 단위로 대조해, 우리에게 아예 없던 절 셋을 넣었습니다.
| 절 | 하는 일 |
|---|---|
PERFORMANCE |
대사별 의도·전술(작성기) + 시선·깜빡임·미세동작 안전줄(코드) |
TEXTURE |
모공 단위 피부 사실성·보정 금지 — AI 티의 1순위인데 절 자체가 없었습니다 |
REFERENCE SCOPE |
@Image1 은 외모+연기 / @Image2 는 외모만 — 제품 사진이 포즈를 끌고 오는 것을 차단 |
동기: 0단계 실측에서 말투가 뒤섞인 대본이 게이트 4겹을 그대로 통과했습니다("그거 진짜 그렇게 마셔?" + 존댓말 3줄). 게이트는 문체·연기·질감을 보지 않습니다.
그리고 최종 프롬프트를 정본 10절 순서로 재조립했습니다 — 종전엔 뒤에 덧붙이기만 해서 @Image 목록이 두 절에 나뉘고 연기가 대사에서 멀리 떨어졌습니다. 한 사실이 두 자리에 나뉘면 어느 쪽을 따를지 모르고, 이 파이프라인 사고가 전부 그 형태였습니다(#5098 말투 재진술, #339 글자수 이중출처).
골격 9종은 바이트 그대로 뒀습니다 — 감사 PASS 판정분이라 본문 수정 = 재감사입니다. 재배치는 조립 시점에 코드가 합니다.
| 상태 | 1라운드 통과 | 평균 라운드 | 최악 | 평균 초 |
|---|---|---|---|---|
| 흡수 전 | 6/8 | 1.25 | 2 | 49s |
| 연기 빈칸만 추가 | 2/8 · 1/8 | 2.25 · 2.12 | 5 | 86s · 84s |
| 역할 분담 명시 후 | 7/8 | 1.12 | 2 | 48s |
라운드1 실패 전수에서 진동이 나왔습니다: 93자(한 문장 45자) → hard → 46자 → hard → 73자. 걸린 문장이 전부 서사형이었습니다. 원인은 역할 분담을 안 알려준 것 — 레퍼런스 구조는 짧은 대사 + 풍부한 연기인데 우리는 긴 대사 + 연기가 됐습니다. "연기가 드라마를 맡으니 대사는 담백해도 된다"를 적자 하드 사유가 10건 → 2건으로 줄고 흡수 전보다 좋아졌습니다.
2026-08 배치 기록에서 실제로 이상했던 판 3건을 골라 같은 브리프로 다시 돌렸습니다. 인물·제품 사진 동일.
| 세트 | 옛 결함 | 지금 |
|---|---|---|
| 원두 봉지 | 대사 5줄 전부 반말 · 15초에 갈기→드리퍼→물붓기 전 공정 · 슬롯 누출 잔재 | 존댓말 4줄 · 1라운드 · 경고 0 |
| 크림 (말투) | 완전 반말 · 나 이거 계속 쓸 듯 획일 마무리 |
존댓말 · 획일 마무리 없음 |
| 크림 (광고문구) | 보습, 영양, 이게 한 번에 다 되네 · 심사 6라운드 소진 |
같은 결함 재현 |
세 번째가 가장 값진 케이스였습니다. 브리프의 효용이 "피부 보습과 영양을 한 번에 해결하는 올인원 스킨케어" — 이미 광고 카피입니다. 심사역 지침에 같은 제품·같은 문구 실측이 박혀 있습니다(이렇게 준 판은 6라운드 3/3 전부 태우고 못 넘겼고, 같은 제품을 겪은 일로 쓴 판은 3/3 통과).
그래서 오늘은 6라운드를 안 태우고 2라운드에서 멈추고 "사용자에게 되물어라"로 돌립니다. 다만 그러면서도 출력이 대본에 반려 도장을 찍고 있었습니다 — 시스템은 "작성기 잘못이 아니다"라고 판단해놓고 호출자에겐 "대본이 심사에서 반려됐다"로 보이는 상태였습니다. 사용자가 준 문구를 충실히 옮긴 대본을 벌하는 셈이라 그 자리를 끊었습니다: 입력 문제로 멈출 때는 판정을 싣지 않고 되묻기 안내 하나만 남깁니다.
| 지적 | 상태 |
|---|---|
[major] 골격 소진 경로가 {{LINE_N}} 잔여를 안 잡는다 |
반영 · 재환님 「승인」 |
[minor] hangul-integrity.ts NUL 바이트 |
반영 · 「확인」 |
[배포위생] exp8-tmp.ts 딸려옴 |
삭제 + gitignore · 「확인」 |
[minor] typicalSyl 이중출처 |
SPEC/LANG_SPEC 승격 · 「확인」 |
| [minor] 예산 ↔ short_ratio 상충 | shortHi 계산 · 「확인」 |
[nit] totalLo/Hi 반올림 불일치 |
ceil/floor · 「확인」 |
[nit] 소진 심사 inputInsufficient 미복제 |
반영 |
| [minor] KSX1001 오탐 | 「별건 이관 동의」 → creagen-space#362 (조건부 파킹, 실오탐 관측 시 재개) |
| dev/alpha 가 리뷰 반영 전 커밋 | 8/18 재동기 완료 (#5205 · #5206) |
미해결은 상단 밴드 관측 하나였고, 위가 그 답입니다.
tsc --noEmit 0 에러
vitest .../ugc-director/ 14파일 210 통과 (작업 시작 시점 13파일 190)
기존 테스트가 계약 변경을 여섯 번 먼저 잡았습니다 — 골격 판 연기 지시 미기입, 하한 hard→soft, 상한 hard→soft 등. 전부 새 계약으로 갱신했습니다.
실험 스크립트는 exp*-tmp.*(gitignore)로 두어 커밋에서 배제했습니다 — pion-bot#5180 리뷰의 exp8-tmp.ts 사고 재발 방지, git check-ignore 로 확인했습니다.
pion-bot#5281 — base=main 이라 사람 게이트입니다. 커밋 5개:
d5ab7b673 작성기 주입 가능화 — 모델·온도·추론 A/B 경로
3873c5416 레퍼런스 흡수 Phase 1 — PERFORMANCE·TEXTURE·REFERENCE SCOPE
d48bb076e 최종 프롬프트 정본 재조립 + 글자수 하한 soft 강등
e9bb0c9b5 총 글자수 상한 soft 강등 — 실측으로 재작성 루프 제거
white tube·mint cap·pouch 가 템플릿 본문에 박혀 있음). 파우치 제품에 튜브 골격이 걸리면 경고 하나 없이 생성까지 갑니다. residualSlots 는 우리가 적어둔 추상 절과 {{...}} 잔존만 보므로 정상 텍스트로 보입니다. 형태 태그 + 라우팅(템플릿 무변경)을 추천드립니다.부수 확정 하나: structured output 을 쓰는 동안 추론은 켤 수 없습니다. 게이트웨이가 bedrock·anthropic·vertexAnthropic·bedrock(system) 4경로 전부에서 400 (Thinking may not be enabled when tool_choice forces tool use.) — 기존 주석의 주장이 추측이 아니라 사실로 확인됐습니다.