
    Ri                        U d Z ddlZddlmZ  ee      j                         j                  j                  Z ee      ej                  vr"ej                  j                  d ee             ddlmZ ddlmZmZmZ  ej"                         Zej'                  d      Zed   d   d	   Zed   d
   d	   Zed   d   Z ee      Zedz   Zdddddddddddddde de de ddddddddddddd ddd!d"e d#ddd$d%e d&e d'ddd(	Zeeeeef   f   ed)<   d*d+d,d-d.d/d/d-d0d1d1d-d2d3d/d-d4d,d1d-d5Zeeeeeez  f   f   ed6<   g d7Z e!e   ed8<   d9Z"eed:<   g d;Z#e!e   ed<<   d=d>d?d@dAdBZ$eee%f   edC<   eee e$dDZ&eee'f   edE<   e dFZ(e dGZ)e dHZ*dIefdJZ+dhdKedIefdLZ,dIefdMZ-didNedOedIefdPZ.dhdNedKedIefdQZ/dNedRedIefdSZ0	 dhdNedTedKedIefdUZ1dNedVedIefdWZ2	 dhdNedXe!e   dKedIefdYZ3dNedIefdZZ4	 djdNed[ed\e%dIefd]Z5dNed^e!e   dIefd_Z6	 djdNedXe!e   d\e%dIefd`Z7dNedIefdaZ8dNedbe%ez  dce'dIefddZ9dNedIefdeZ:dfe!eee'f      dbedIeee'f   fdgZ;y)kuN  
이미지 제작 QC 게이트 워크플로우 (image_workflow.py)

4+1 Phase 이미지 제작 워크플로우의 프롬프트 생성 및 QC 기준을 정의.
dispatch.py에서 --workflow image-qc-gate 옵션으로 호출 가능하도록 설계.

Usage:
    from prompts.image_workflow import build_image_workflow_prompt, QC_CRITERIA
    N)Path)ConfigManager)ABSOLUTE_MIN_PXDQ_RULESPASS_THRESHOLDzroots.workspace
font_sizesheadlineminsubheadfont_weightsbanned_weightsd      글자 겹침u)   텍스트 요소 간 경계 겹침 없음auto)namechecktype   경계 이탈u3   모든 텍스트/요소가 안전 영역 내 존재u   해상도 규격u1   출력 해상도가 플랫폼 요구사항 충족u   폰트 규칙u   헤드라인 u
   px/서브 u
   px/바디 u	   px 준수u   satori 사용 여부u'   satori-cardnews 스킬 미사용 확인u   텍스트 오버플로우uL   텍스트가 Zone 경계를 벗어나지 않음 (scrollWidth <= clientWidth)u   텍스트-배경 대비율uC   worst-case pixel 기준 WCAG AAA 7:1 (대형텍스트 4.5:1) 이상u   폰트 크기 최소ub   모든 텍스트 요소(페이지 인디케이터, 브랜드 태그, 면책 문구 포함) 최소 u   px 이상 (예외 없음)u   폰트 두께zfont-weight u*    이하(light/thin) 사용 금지, 최소 u   (regular) 이상)	zA-01zA-02zA-03zA-04zA-05zA-06zA-07zA-08zA-09QC_CATEGORY_Au   CTA 명확성g333333?g?)r   weight_conversionweight_brandu   메시지 일관성g      ?u   브랜드 정합성g?u   시각적 계층 구조g333333?u   감정적 공감도)zB-01zB-02zB-03zB-04zB-05QC_CATEGORY_B)TEXT_OVERLAPBOUNDARY_VIOLATIONRESOLUTION_FAILCTA_MISSINGMESSAGE_UNCLEAREMOTION_FLAT	HOOK_WEAKBRAND_INCONSISTENTCOPY_REDUNDANTTEXT_OVERFLOWCONTRAST_FAILFONT_SIZE_FAILFONT_WEIGHT_FAILFAIL_CATEGORIESu   폰트 선택은 디자인의 일부이므로 종류 제한 없음. 단, Canva 유료 독점 폰트(HTML 렌더링 불가)만 제외. Google Fonts, 오픈소스(SIL OFL) 폰트 자유 사용 가능.FONT_POLICY_NOTE)KNOWHOW_PRELOAD_OKBRIEF_QC_OKCOPY_DRAFT_OK
PLAN_QC_OKPILOT_OK
AUTO_QC_OKDESIGN_QC_OKMANUAL_QC_OKPIPELINE_TOKENS         Z   a   )copy_loop_maxdesign_loop_maxsame_fail_repeatplan_qc_immediate_passdesign_qc_immediate_passESCALATION_RULES)
category_a
category_bfail_categoriesescalation_rulesQC_CRITERIAz"/memory/specs/design-qc-knowhow.mdz"/memory/specs/knowhow-marketing.mdz/memory/specs/knowhow-design.mdreturnc            	      l    d} t         j                         D ]  \  }}| d| d|d    d|d    dz  }  | S )u)   QC 카테고리 A 섹션 문자열 생성u@   ### QC 카테고리 A (자동 검증) — 전항목 PASS 필수
- [] r   : r   
)r   items)linescodeitems      G/home/jay/workspace/.worktrees/task-2117-dev1/prompts/image_workflow.py_build_category_a_sectionrL      sQ    OE#))+ A
d3tfBtF|nBtG}oR@@AL    campaign_typec           	          | dv rd|  nd}d|  d}t         j                         D ]L  \  }}|j                  ||d         }t        t	        t        |            dz        }|d| d|d	    d
| dz  }N |dz  }|S )uL   QC 카테고리 B 섹션 문자열 생성 (프로파일별 가중치 적용))
conversionbrandweight_r   uY   ### QC 카테고리 B (수동 검증) — 가중 합산 70점 이상 PASS (프로파일: z)
r   rC   rD   r   u   : 가중치 z%
u   
**가중 점수 계산 방법:**
각 항목을 0~100점으로 평가 후, 가중치를 곱하여 합산.
합산 점수 ≥ 70 → PASS / < 70 → FAIL
)r   rG   getintfloatstr)rN   
weight_keyrH   rI   rJ   
weight_val
weight_pcts          rK   _build_category_b_sectionrZ      s    .;?V.V7=/*\oJghugvvyzE#))+ I
dXXj$/B*CD
s:/#56
3tfBtF|nLCHHI 
	:E
 LrM   c                      d} dddddddd	d
ddddt          dd}|j                         D ]  \  }}| d| d| dz  }  | dz  } | S )u0   FAIL 사유 카테고리 섹션 문자열 생성u%   ### FAIL 사유 카테고리 (13종)
r   r   u   해상도 미달u   폰트 규칙 위반u   satori 사용u   메시지 불명확u
   CTA 약함u   브랜드 불일치u   레이아웃 불균형u'   텍스트 오버플로우 (Zone 이탈)u   대비율 미달u   폰트 크기 미달u   폰트 두께 미달 (weight u    이하))r   r   r   FONT_RULE_VIOLATIONSATORI_USAGEr   CTA_WEAKBRAND_MISMATCHLAYOUT_IMBALANCEr"   r#   r$   r%   z- rE   rF   uT   ⚠️ FAIL 기록 시 반드시 위 13종 중 하나를 정확히 명시하세요.
)_MAX_BANNED_WEIGHTrG   )rH   	fail_descrI   descs       rK   _build_fail_categories_sectionrd      s    4E'--5'0 /4B+0;<N;OxXI  oo' '
d2dV2dV2&&'	ddELrM   task_idphase_groupc                    |dvrt        d| d      t         d|  d}|dk(  rdt         ddd	fdt         dd
dfg}nF|dk(  rdt         dddfdt         dd
dfg}n&dt         dd
dfdt         ddd	fdt         dddfg}t        |      }d}t        |d      D ]  \  }\  }}}	|| d| d| d|	 dz  } d|  d| d| d| d| d| dS )u  Phase -1: 노하우 프리로딩 (매 위임 묶음마다 반복)

    담당: 복합팀 팀장 (Opus)
    필독 파일을 읽고 핵심 요약을 보고서에 기재해야 Phase 0 토큰 발급.

    Args:
        task_id: 작업 ID
        phase_group: 로딩할 노하우 파일 그룹
            - "copy": knowhow-marketing.md + design-qc-knowhow.md (2개)
            - "design": knowhow-design.md + design-qc-knowhow.md (2개)
            - "final": 3개 모두 (기본값)
    )copydesignfinalu"   유효하지 않은 phase_group: 'u'   '. 허용값: 'copy', 'design', 'final'/memory/reports/z-phase_minus1.mdrh   `u   마케팅 노하우u;   마케팅 성공+실패 패턴 + 시작 전 체크리스트u   QC 피드백 로그u   QC 실패/성공 이력ri   u   디자인 노하우u;   디자인 성공+실패 패턴 + 시작 전 체크리스트    z. **z**: z
   - rF   u1   ## Phase -1: 노하우 프리로딩
- 작업 ID: u=   
- 담당: 복합팀 팀장 (Opus)

## ⚠️ 필독 파일 (u#   개 모두 반드시 읽으세요)
u   
## 각 노하우 파일 구조 (3섹션)
- 실패 패턴: "이건 하면 안 된다"
- 성공 패턴: "이렇게 했더니 점수가 올랐다"
- 시작 전 체크리스트: 매번 반드시 확인

## 작업 절차
1. 위 u   개 파일을 모두 읽으세요.
2. 각 파일의 핵심 요약을 보고서에 기재하세요.
3. 특히 반복 FAIL 패턴과 성공 패턴을 중점 정리하세요.

## 완료 기준 (잠금 해제 조건)
- u  개 파일 모두 읽기 완료
- 핵심 요약이 보고서에 기재됨
- KNOWHOW_PRELOAD_OK 토큰 발급 → Phase 0 진행 가능

## 노하우 freshness 확인
노하우 파일을 읽은 후, 파일 마지막 수정일을 확인하세요.
- 7일 이상 경과: ⚠️ 경고 — "노하우가 오래됐습니다. 최근 QC 결과가 미반영일 수 있습니다."
- 보고서에 "노하우 최종 수정일: YYYY-MM-DD" 명시

## ⚠️ 중요
- 1차 위임뿐 아니라 **2차, 3차 위임 시작 시에도 반복 수행** (세션 간 기억 불가)
- 노하우 핵심 요약을 보고서에 기재해야 Phase 0 토큰 발급

## 보고서
- 보고서 경로: )
ValueErrorWORKSPACE_ROOTKNOWHOW_MARKETING_PATHKNOWHOW_PATHKNOWHOW_DESIGN_PATHlen	enumerate)
re   rf   report_pathknowhow_files
file_countfile_list_stripathr   rc   s
             rK   build_phase_minus1_promptr|      s    55=k]Jqrss#$$4WI=MNKf'(*,A  DA  Ba "79RS
 
	 $%Q')>@}~a "79RS
 a "79RS'(*,A  DA  B$%Q')>@}~
 ]#JM!*=!!< GD$A3d4&TF+dV2FFGy !$$.</S/    L   +m23	/rM   c                 r    t          d|  d}t          d|  d}d|  d| d| dt         d	t          d
| d| dS )u   Phase 0: 브리프 검증 게이트

    Args:
        task_id: 작업 ID
        campaign_type: 캠페인 유형 ("conversion" | "brand")

    Returns:
        Phase 0 프롬프트 문자열
    /memory/tasks/	-brief.mdrk   z
-phase0.mdu   당신은 마아트(Ma'at), 이미지 제작 QC 게이트 담당자입니다.

## Phase 0: 브리프 검증 게이트
- 작업 ID:    
- 캠페인 유형:    
- 브리프 파일: 1   

## 필수 참조 문서
- QC 노하우 문서:    
- 브랜드 가이드라인: u  /memory/specs/brand-guidelines.md

## 브리프 필수 필드 체크 (5종 전항목 존재해야 PASS)
브리프 파일을 읽고 아래 5개 필드가 모두 작성되어 있는지 검증하세요:

1. **캠페인 목적** — 인지/클릭/전환 중 우선순위 명시 여부
2. **타겟 고객** — 구체적 인물상 기술 여부 (나이/직업/고민 등)
3. **핵심 메시지** — 단일 핵심 메시지(One Message) 명시 여부
4. **캠페인 유형** — conversion 또는 brand 명시 여부
5. **QC 가중치 프로파일** — B 카테고리 가중치 프로파일(A: 전환 최적화 / B: 브랜드 인지도) 선택 여부

## 검증 절차
1. u    파일을 읽어 위 5개 필드 존재 여부를 확인하세요.
2. 각 필드별 PASS/FAIL 판정 및 미흡 사유를 기록하세요.
3. 5개 필드 전항목 PASS → Phase 1 진행 허가
4. 1개라도 FAIL → 마케팅팀에 브리프 보완 요청 (Phase 1 진행 불가)

## 검증 결과 출력 형식
```
[Phase 0 브리프 검증 결과]
- 캠페인 목적: PASS/FAIL — (사유)
- 타겟 고객: PASS/FAIL — (사유)
- 핵심 메시지: PASS/FAIL — (사유)
- 캠페인 유형: PASS/FAIL — (사유)
- QC 가중치 프로파일: PASS/FAIL — (사유)

최종 판정: PASS/FAIL
다음 Phase: Phase 1 진행 가능 / 브리프 보완 요청
```

에스컬레이션 규칙: memory/specs/escalation-rules.md 참조

## 보고서
- 보고서 경로: rF   rp   rr   )re   rN   
brief_pathrv   s       rK   build_phase0_promptr      s     ##>')DJ#$$4WIZHKy !,o .)l +"". 0((6'7 	8 \ "  +m2C!	/#rM   r   c                     t          d|  d}t          d|  d}d|  d| dt          dt          d	t         d
| d| d| d| dS )u   Phase 1: 카피/기획 (마케팅팀)

    Args:
        task_id: 작업 ID
        brief_path: 승인된 브리프 파일 경로

    Returns:
        Phase 1 프롬프트 문자열
    r~   -copy-plan.mdrk   z
-phase1.mduM   당신은 마케팅 팀장입니다.

## Phase 1: 카피/기획
- 작업 ID: u   
- 승인된 브리프: u7   

## 필수 참조 문서
- 브랜드 가이드라인: u<   /memory/specs/brand-guidelines.md
- 마케팅 컨텍스트: u:   /memory/specs/marketing-context.md
- QC 노하우 문서: u   

## 작업 지시
1. uD  를 읽고 브리프를 완전히 이해하세요.
2. 브리프의 캠페인 목적 / 타겟 고객 / 핵심 메시지를 기반으로 카피를 작성하세요.
3. 캠페인 유형(conversion/brand)에 맞는 톤과 CTA를 설계하세요.

## 카피 산출물 필수 구성
다음 항목을 포함한 카피 기획서를 `u  `에 저장하세요:

1. **헤드라인** (최대 20자) — 주목을 끄는 한 줄 메시지
2. **서브 카피** (최대 40자) — 헤드라인 보충 설명
3. **바디 카피** (최대 80자) — 핵심 내용 전달
4. **CTA 문구** (최대 15자) — 행동 유도 버튼 텍스트
5. **감정 키워드** (3~5개) — 이미지 전반에 흐를 감정 톤
6. **크리에이티브 디렉션 (필수)** — 디자인팀이 이 지시를 보고 이미지를 제작함
   a. 배경 컨셉: 어떤 분위기/장면의 배경을 사용할지 (예: "고급 사무실", "도시 야경", "깨끗한 흰 배경")
   b. 비주얼 톤: 전체 색감/분위기 (예: "골드+네이비 고급스러운", "레드+블랙 긴급한", "따뜻한 브라운")
   c. 사진 방향: 포토리얼 배경 사용 여부, AI 생성 vs 스톡 이미지 vs CSS-only
   d. 레이아웃 배치: 텍스트 위치, CTA 버튼 위치, 로고 위치 제안
   e. 참고 레퍼런스: 비슷한 톤의 기존 배너나 광고 예시 (있는 경우)

## 팀원 활용 (Task tool)
- 페이토 (Peitho): 카피라이팅 (model: haiku) — 헤드라인/CTA/카피 초안
- 아폴론 (Apollo): 콘텐츠 크리에이터 (model: haiku) — 감정 키워드/메시지 확장

## 완료 기준
- 4개 필수 카피 항목(헤드라인/서브/바디/CTA) 모두 작성 완료
- 크리에이티브 디렉션(배경 컨셉/비주얼 톤/사진 방향/레이아웃 배치) 작성 완료
- 브리프의 핵심 메시지와 일치 여부 자체 검토 완료
- 산출물 파일 저장: ug   

에스컬레이션 규칙: memory/specs/escalation-rules.md 참조

## 보고서
- 보고서 경로: uF   
- 완료 후 Phase 2 (카피 QC 게이트)로 핸드오프하세요.
r   )re   r   output_pathrv   s       rK   build_phase1_promptr   /  s     $$N7)=IK#$$4WIZHKy !"", .((6'7 8%%3$4 5"". 0\ ; <G- H&& '2] 3  +m ,QG$	R&rM   copy_plan_pathc                 p   t          d|  d}t          d|  d}|dk(  rdnd}g }t        j                         D ]V  \  }}t        t	        |j                  ||d                     }	|j                  d| d	|d
    dt        |	dz         d       X dj                  |      }
dj                  g d|  d| d| d| dt         dt          dt                dt        |       d| d|
 dt                d| d| d| d| dt         dt         d | d      S )!u   Phase 2: 카피 QC 게이트 (마아트)

    Args:
        task_id: 작업 ID
        copy_plan_path: 카피 기획서 파일 경로
        campaign_type: 캠페인 유형 ("conversion" | "brand")

    Returns:
        Phase 2 프롬프트 문자열
    rk   z
-phase2.mdr~   r   rP   r   r     - [rD   r   rE   r   %rF   rm   u|   당신은 마아트(Ma'at), 이미지 제작 QC 게이트 담당자입니다.

## Phase 2: 카피 QC 게이트
- 작업 ID: r   u   
- 카피 기획서:    
- 원본 브리프: r   u'    (필독)
- 브랜드 가이드라인: 1   /memory/specs/brand-guidelines.md

## QC 기준

u+   
**카피 단계 적용 B항목 가중치 (    프로파일):**


u   
## 검증 절차
1. u0   를 읽어 카피 내용을 파악하세요.
2. u3  를 읽어 원본 브리프와 카피의 정합성을 확인하세요.
3. 카테고리 A 전항목 자동 검증 수행 (텍스트 길이/규격 준수 여부 등)
4. 카테고리 B 각 항목을 0~100점으로 평가 후 가중 합산
5. 최종 판정:
   - A 전항목 PASS + B 가중 점수 ≥ 70 → Phase 3 진행 허가
   - A 1개라도 FAIL → 즉시 반려, 카피 재작업 요청
   - B 가중 점수 < 70 → 반려, 미흡 항목 명시하여 카피 재작업 요청

## 검증 결과 출력 형식
```
[Phase 2 카피 QC 결과]
캠페인 유형: u   

[카테고리 A]
- A-01 글자 겹침: PASS/FAIL
- A-02 경계 이탈: PASS/FAIL
- A-03 해상도 규격: PASS/FAIL
- A-04 폰트 규칙: PASS/FAIL
- A-05 satori 사용 여부: PASS/FAIL
카테고리 A 판정: PASS/FAIL

[카테고리 B — u   가중치]
- B-01 CTA 명확성: (점수)/100 × 가중치 = (가중점수)
- B-02 메시지 일관성: (점수)/100 × 가중치 = (가중점수)
- B-03 브랜드 정합성: (점수)/100 × 가중치 = (가중점수)
- B-04 시각적 계층 구조: (점수)/100 × 가중치 = (가중점수)
- B-05 감정적 공감도: (점수)/100 × 가중치 = (가중점수)
카테고리 B 합산: (합산점수)/100
카테고리 B 판정: PASS(≥70) / FAIL(<70)

최종 판정: PASS/FAIL
FAIL 사유: (FAIL_CATEGORIES 코드 명시)
다음 Phase: Phase 3 진행 가능 / 카피 재작업 요청
```

에스컬레이션 규칙: memory/specs/escalation-rules.md 참조

## 학습 기록 (PASS/FAIL 무관 필수 — 미수행 시 .done 발급 불가)

### 기록 대상 파일
1. `)   ` — 마케팅 성공/실패 패턴
2. `u  ` — QC 성공/실패 패턴

### 필수 기록 항목
각 배너별로:
- 실패 패턴: "이건 해서 점수 떨어졌다" (구체적 행동 + B 항목 + 감점 점수)
- 성공 패턴: "이렇게 개선했더니 올랐다" (구체적 행동 + B 항목 + 점수 변화)
- 체크리스트 추가: 반복 FAIL 항목을 체크리스트에 추가

### 검증 규칙
보고서에 아래 섹션 필수 포함:
```
## 노하우 업데이트 기록
- knowhow-marketing.md: 추가 패턴 N건 (성공 X건, 실패 Y건)
- design-qc-knowhow.md: 추가 패턴 N건
- 체크리스트 추가: N항목
```
이 섹션이 없거나 "0건"이면 보고서 불합격 처리.

## 보고서
- 보고서 경로: )rp   r   rG   rU   rV   rS   appendrT   joinrr   rL   rZ   rd   rq   )re   r   rN   rv   r   rW   b_weighted_itemsrI   rJ   wb_weighted_strs              rK   build_phase2_promptr   e  s    $$$4WIZHK"#>')DJ(5(E$>J#))+ Q
d#dhhz40C+DEFG%vRV~RAG~Q OPQ YY/0NC	/ C	/  C	/yC	/!C	/  -oC	/.C	/  ..	C	//	C	/
  *lC	/
+"C	/ #/C	/0(C	/ )7'7C	/8C	/ %&
'C	/ (*C	/ %]3
4C	/55C	/ 6COC	/ DWC	/ 
C	/ C	/ *+
,C	/-C	/  !C	/ !C	/" \#C	/"
#C	/6 +O7C	/6,7C	/F  -oGC	/F.GC	/d &&eC	/d'eC	/f ngC	/fgC	/F  +mGC	/F ,.GC	/ErM   approved_plan_pathc                 X   t          d|  }t          d|  d}dj                  g d|  d| d| dt         d	t          d
t          dt         dt         dt
         dt         dt         dt          dt          d| dt         d| d| d      S )u   Phase 3: 디자인 실행 (디자인팀)

    Args:
        task_id: 작업 ID
        approved_plan_path: QC 승인된 카피 기획서 파일 경로

    Returns:
        Phase 3 프롬프트 문자열
    z/memory/outputs/rk   z
-phase3.mdrm   ul   당신은 아마테라스(Amaterasu), 디자인 팀장입니다.

## Phase 3: 디자인 실행
- 작업 ID: u"   
- QC 승인된 카피 기획서: u"   
- 이미지 출력 디렉토리: uV   /

## 필수 참조 문서 (작업 전 반드시 읽으세요)
- QC 노하우 문서: uZ    ← **필독. 과거 FAIL 패턴 숙지 후 작업 시작**
- 브랜드 가이드라인: u:   /memory/specs/brand-guidelines.md
- 디자인 팀 상세: u  /memory/org-details/design-team.json

## ⛔ satori 금지 규칙 (절대 위반 금지)
- **satori-cardnews 스킬 사용 엄금**
- satori 기반 렌더링은 이 워크플로우에서 허용되지 않습니다.
- 사용 시 자동으로 QC 카테고리 A-05 FAIL 처리되며 재작업 필요.
- 대체 방법: hybrid-image 스킬(이나리) 또는 canvas-design 스킬(카구야) 사용

## 폰트 규칙 (A-04, 반드시 준수)
- 헤드라인: **u   px**
- 서브 카피: **u   px**
- 바디 카피: **ut   px**
- 위 규격 외 크기 사용 시 A-04 FAIL

## 폰트 두께 규칙 (A-09, 반드시 준수)
- **font-weight u-    이하(light/thin) 사용 금지**
- 최소 us  (regular) 이상만 허용
- 위반 시 A-09 FAIL

## 대비율 규칙 (A-07, WCAG AAA 기준)
- 일반 텍스트: **7:1** 이상
- 대형 텍스트(18pt+/14pt bold+): **4.5:1** 이상
- 기존 AA 기준에서 AAA로 상향 — 가독성 최우선

## 반투명 레이어 + 글래스모피즘 가이드라인
- **일반 오버레이**: 배경과 텍스트 사이에 반투명 레이어 적용 (opacity 0.4~0.6)
- **글래스모피즘 카드**: opacity 0.15~0.30 + backdrop-filter blur로 뒷 이미지 비침 허용
  - 단, 가독성 최우선: 카드 배경색 조정으로 텍스트 대비율 확보 (완전 투명 금지)
  - backdrop-filter: blur(10px~20px) 권장
- 텍스트 영역에는 반드시 반투명 오버레이 확보 (글자 겹침 방지)

## 서울대보험쌤 로고 사용 규칙
- 텍스트 '서울대보험쌤' 대신 로고 이미지 사용
- 로고 원본: uQ   /assets/brand/logo-snuinsurance.jpg
- 어두운 배경: 흰색 버전 사용 → u  /assets/brand/logo-snuinsurance-white.png
- 밝은 배경: 원본 로고 그대로 사용

## 안전 영역 규칙 (A-01, A-02)
- 모든 텍스트/요소는 이미지 가장자리에서 최소 40px 이상 여백 확보
- 텍스트 요소 간 최소 8px 이상 간격 유지

## 팀원 라우팅 (Task tool)
- 이나리 (Inari): hybrid-image 스킬 — AI 배경 + HTML 텍스트 오버레이 (model: sonnet)
- 카구야 (Kaguya): canvas-design 스킬 — PDF/PNG 아트워크 (model: sonnet)
- 비너스 (Venus): gemini-image 스킬 — 포토리얼 배경 생성 (횡단조직 소환)
⚠️ 벤자이텐(satori-cardnews)은 이 워크플로우에서 호출 금지

## 작업 절차
1. u-   를 읽어 카피 기획서 내용 파악
2. ut   를 읽어 과거 FAIL 패턴 숙지
3. 적절한 팀원에게 Task tool로 디자인 위임
4. 산출 이미지를 u  /에 저장
5. ⛔ **PNG 렌더링 필수**: HTML 배너 생성 시 반드시 Playwright로 PNG 렌더링까지 완료
   - render_banners.py 등 렌더링 스크립트 생성 시 즉시 실행
   - .html만 있고 .png가 없으면 미완료 처리됨
6. 저장된 이미지 파일 경로 목록을 보고서에 명시 (.png 파일 경로)

## 완료 기준
- ⛔ **PNG 파일 필수**: 출력 디렉토리에 .png 파일이 반드시 존재해야 함
- ⛔ **HTML만 있고 PNG 없음 = 미완료**: .html 파일만 있고 대응 .png가 없으면 Phase 3 미완료 처리
- Playwright로 HTML → PNG 렌더링 완료 후 산출물 경로에 .png 파일 확인
- satori 미사용 확인
- 폰트 규칙 자체 점검 완료 (크기 + 두께)
- 안전 영역 자체 점검 완료
- 대비율 WCAG AAA 기준 충족 확인
- 반투명 레이어/글래스모피즘 가독성 확인
- 서울대보험쌤 로고 이미지 사용 확인 (텍스트 대체)

에스컬레이션 규칙: memory/specs/escalation-rules.md 참조

## 보고서
- 보고서 경로: u   
- 산출물 파일 경로 목록을 개별로 명시하세요 (축약형 금지, 예: slide{1-5}.png 불가)
- 완료 후 Phase 4 (디자인 QC 게이트)로 핸드오프하세요.
)rp   r   rr   _HEADLINE_MIN_SUBHEAD_MINr   ra   _MIN_ALLOWED_WEIGHT)re   r   
output_dirrv   s       rK   build_phase3_promptr     s'    ###3G9=J#$$4WIZHKE	U E	U  E	UyE	U!,E	U -?+?E	U@,E	U -7<	E	U8"	E	U #/E	U0(E	U )7'7E	U8#E	U $2"2E	U3E	U +OE	U,E	U  +^!E	U ,!E	U" ..#E	U"/#E	U( ..)E	U(/)E	U* ((+E	U*)+E	UF ++GE	UF,8GE	UH 9G7GIE	UHHIE	U^ !!_E	U^"_E	U` ^aE	U`"aE	Ud #-eE	Ud.eE	UF  +mGE	UF,TGE	UGrM   image_pathsc                    t          d|  d}t          d|  d}dj                  d |D              }t        |      }|dk(  rdnd	}g }t        j	                         D ]V  \  }	}
t        t        |
j                  ||
d                     }|j                  d
|	 d|
d    dt        |dz         d       X dj                  |      }dj                  g d|  d| d| d| dt         d| dt          dt                dt        |       d| d| dt                d| d| d| d| d | d!| d      S )"u
  Phase 4: 디자인 QC 게이트 (마아트)

    Args:
        task_id: 작업 ID
        image_paths: 검수할 이미지 파일 경로 목록
        campaign_type: 캠페인 유형 ("conversion" | "brand")

    Returns:
        Phase 4 프롬프트 문자열
    rk   z
-phase4.mdr~   r   rF   c              3   &   K   | ]	  }d |   ywz  - N .0ps     rK   	<genexpr>z&build_phase4_prompt.<locals>.<genexpr>/       ?aaSz?   rP   r   r   r   rD   r   rE   r   r   rm   u   당신은 마아트(Ma'at), 이미지 제작 QC 게이트 담당자입니다.

## Phase 4: 디자인 QC 게이트
- 작업 ID: r      
- 검수 이미지 수: u^   개

## 검수 대상 이미지 (실제 이미지를 직접 열어서 육안 평가하세요)
u  

## ⚠️ 중요: 실제 이미지 시각 평가 지시
- 위 이미지 파일을 반드시 **직접 열어서(Read tool 또는 이미지 뷰어)** 시각적으로 평가하세요.
- 파일 경로만 보고 판단하지 마세요. 실제 렌더링 결과를 확인하세요.
- 각 이미지에 대해 개별 QC 판정을 수행하세요.

## 필수 참조 문서
- QC 노하우 문서: u%    (필독)
- 원본 카피 기획서: r   r   u.   
**디자인 단계 적용 B항목 가중치 (r   r   u   
## 검증 절차
1. 각 이미지 파일을 직접 열어 시각 평가
2. 이미지별로 카테고리 A 전항목 검증 (글자 겹침/경계 이탈/해상도/폰트/satori 여부)
3. 카피 기획서(ug  )와 대조하여 카테고리 B 평가
4. 이미지별 최종 판정 및 FAIL 사유 코드 명시
5. 전체 판정:
   - 전 이미지 PASS → 워크플로우 완료 승인
   - 1개 이상 FAIL → 해당 이미지 재작업 요청 (Phase 3 루프)

## 검증 결과 출력 형식 (이미지별 반복)
```
[Phase 4 디자인 QC 결과]
캠페인 유형: uR  

=== 이미지 1: (파일 경로) ===
[카테고리 A]
- A-01 글자 겹침: PASS/FAIL — (근거)
- A-02 경계 이탈: PASS/FAIL — (근거)
- A-03 해상도 규격: PASS/FAIL — (근거)
- A-04 폰트 규칙: PASS/FAIL — (근거)
- A-05 satori 사용 여부: PASS/FAIL — (근거)
카테고리 A: PASS/FAIL

[카테고리 B — ug   가중치]
- B-01 CTA 명확성: (점수)/100 × 가중치 = (가중점수) — (근거)
- B-02 메시지 일관성: (점수)/100 × 가중치 = (가중점수) — (근거)
- B-03 브랜드 정합성: (점수)/100 × 가중치 = (가중점수) — (근거)
- B-04 시각적 계층 구조: (점수)/100 × 가중치 = (가중점수) — (근거)
- B-05 감정적 공감도: (점수)/100 × 가중치 = (가중점수) — (근거)
카테고리 B 합산: (합산점수)/100 → PASS(≥70)/FAIL(<70)

이미지 판정: PASS/FAIL
FAIL 사유: (FAIL_CATEGORIES 코드)

=== 전체 최종 판정 ===
PASS 이미지: (n)/u   
FAIL 이미지: (n)/u   
워크플로우 결과: 완료 승인 / Phase 3 재작업 요청
재작업 대상: (FAIL 이미지 경로 목록)
```

에스컬레이션 규칙: memory/specs/escalation-rules.md 참조

## 보고서
- 보고서 경로: )rp   r   rt   r   rG   rU   rV   rS   r   rT   rr   rL   rZ   rd   )re   r   rN   rv   r   image_list_strimage_countrW   r   rI   rJ   r   r   s                rK   build_phase4_promptr     s    $$$4WIZHK&'~gYmLNYY?;??Nk"K(5(E$>J#))+ Q
d#dhhz40C+DEFG%vRV~RAG~Q OPQ YY/0N:	/ :	/  :	/y:	/!:	/  -o:	/.#:	/ $/-	:	/0e	:	/ 
:	/":	/ #/:	/0&:	/ '5%5:	/6(:	/ )7'7:	/8:	/  %&
'!:	/  (*!:	/" %]3
4#:	/"58#:	/$ 9F%:	/$ GZ%:	/& 
':	/& ':	/( *+
,):	/(-):	/0  ..1:	/0/1:	/@ +OA:	/@	,A:	/R  -oS:	/R
.S:	/f  +mg:	/f,g:	/h  +mi:	/h,i:	/t  +mu:	/t ,.u:	/<rM   c           	      X    t          d|  d}t          d|  d}d|  d| dt         d| d		S )
uY   Phase 0.5: 브리프 QC (마아트)

    5항목 100점 만점, 85점 이상 통과.
    r~   r   rk   z-phase0_5.mduw   당신은 마아트(Ma'at), 이미지 제작 QC 게이트 담당자입니다.

## Phase 0.5: 브리프 QC
- 작업 ID: r   r   u  

## 브리프 QC 체크리스트 (100점 만점, 85점 이상 통과)

| # | 항목 | 배점 | 판정 기준 |
|---|------|------|----------|
| BQ-01 | 타겟 1인칭 명시 | 20점 | 구체적 인구통계/심리통계 명시 여부 |
| BQ-02 | 핵심 메시지 단수 여부 | 20점 | 핵심 이익 문장 1개만 존재 (복수이면 0점) |
| BQ-03 | 생산 가능성 — 텍스트 길이 | 20점 | 헤드라인 ≤ 20자, 서브카피 ≤ 40자 명시 |
| BQ-04 | 캠페인 목표 KPI 명시 | 20점 | CTR/상담신청/브랜드인지 중 1개 명시 |
| BQ-05 | 금지 패턴 없음 | 20점 | 이전 FAIL 패턴 미포함 확인 (knowhow 파일의 실패 패턴 참조; 예: 과장 표현, 법적 위험, 경쟁사 직접 비교) |

## 판정 로직
- 85점 이상: 브리프 승인 → Phase 1 진행, BRIEF_QC_OK 토큰 발급
- 84점 이하: 브리프 반려 → Phase 0 재작성

## 검증 결과 출력 형식
```
[Phase 0.5 브리프 QC 결과]
- BQ-01 타겟 1인칭: X/20점 — (사유)
- BQ-02 핵심 메시지 단수: X/20점 — (사유)
- BQ-03 텍스트 길이: X/20점 — (사유)
- BQ-04 KPI 명시: X/20점 — (사유)
- BQ-05 금지 패턴: X/20점 — (사유)

총점: X/100
판정: 승인/반려
토큰: BRIEF_QC_OK 발급/미발급
```

## 보고서
- 보고서 경로: rF   r   )re   r   rv   s      rK   build_phase0_5_promptr   x  sa    
 ##>')DJ#$$4WI\JKy !)l +"". 02  +m2=	/ rM   copy_draft_pathcyclec                 `   t          d|  d}t          d|  d}d}t        d   }ddd	d
}|j                  |d      }dj                  g d|  d| d| d| d| d| dt         d| d|dz
   d| dt
         dt         d| d|dk(  rdnd d| d      S ) u   Phase 1.5: 기획 QC (마아트 + 로키 공동 (3자 평가))

    7항목 100점 만점.
    PASS(85점)까지 반복. 모든 Cycle 동일 기준.
    rk   z-phase1_5.mdr~   r   U   r9   u,   방향성 확인 (PQ-01,PQ-02 필수 만점)uM   톤 정제 (PQ-04,PQ-06 필수 만점, 이전 사이클 대비 +14점 이상)u$   최적화 (전 항목 기준 상향)rn   r3   r2      품질 정제rm   u   당신은 마아트(Ma'at), 이미지 제작 QC 게이트 담당자입니다.
로키(역분석)가 공동 검토합니다. (3자 평가: 만든 팀 ≠ 평가 팀)

## Phase 1.5: 기획 QC
- 작업 ID:    
- 사이클: )    (PASS까지 반복)
- 통과 임계값: u   /100점
- 중점: u   
- 카피 초안: r   r   um  

## 기획 QC 체크리스트 (100점 만점)

| # | 항목 | 배점 | 판정 기준 |
|---|------|------|----------|
| PQ-01 | 메시지 계층 구조 | 15점 | 헤드라인→서브카피→CTA 논리적 흐름 |
| PQ-02 | 감정적 훅 존재 | 15점 | 첫 문장에서 타겟의 불안/욕망/호기심 건드림 |
| PQ-03 | CTA 명시 | 14점 | 구체적 행동 유도 문구 존재 |
| PQ-04 | 디자인 실현 가능성 | 14점 | 카피가 Zone 명세서에 맞게 들어갈 수 있음 (로키 검토) |
| PQ-05 | 금지 패턴 해당 없음 | 14점 | 수동적 문장, 모호한 혜택, 금지어 없음 |
| PQ-06 | 브랜드 톤앤매너 준수 | 14점 | 신뢰감/친근함/전문성 중 적합한 톤 선택 |
| PQ-07 | 세계 최고 전문가/프로 수준 | 14점 | 어떤 누가 평가해도 세계 최고의 전문가/프로 수준인가? |

## 판정 로직
- uI   점 이상: 기획 승인 → Phase 2 진행, PLAN_QC_OK 토큰 발급
- rn   u4   점 이하: 기획 반려 → Phase 1 재기획
- **u   점 이상 = 즉시 PASS** (어떤 사이클이든, 노하우 축적 효과)

## 학습 기록 (PASS/FAIL 무관 필수 — 미수행 시 .done 발급 불가)

### 기록 대상 파일
1. `r   u  ` — QC 성공/실패 패턴

### 필수 기록 항목
각 배너별로:
- 실패 패턴: "이건 해서 점수 떨어졌다" (구체적 행동 + PQ 항목 + 감점 점수)
- 성공 패턴: "이렇게 개선했더니 올랐다" (구체적 행동 + PQ 항목 + 점수 변화)
- 체크리스트 추가: 반복 FAIL 항목을 체크리스트에 추가

### 검증 규칙
보고서에 아래 섹션 필수 포함:
```
## 노하우 업데이트 기록
- knowhow-marketing.md: 추가 패턴 N건 (성공 X건, 실패 Y건)
- design-qc-knowhow.md: 추가 패턴 N건
- 체크리스트 추가: N항목
```
이 섹션이 없거나 "0건"이면 보고서 불합격 처리.

## 검증 결과 출력 형식
```
[Phase 1.5 기획 QC 결과 — Cycle uj  ]
- PQ-01 메시지 계층: X/15점 — (사유)
- PQ-02 감정적 훅: X/15점 — (사유)
- PQ-03 CTA: X/14점 — (사유)
- PQ-04 디자인 실현성: X/14점 — (로키 의견)
- PQ-05 금지 패턴: X/14점 — (사유)
- PQ-06 톤앤매너: X/14점 — (사유)
- PQ-07 세계 최고 수준: X/14점 — (사유)

총점: X/100
이전 사이클 점수: N/A   (이전 점수)ua   
판정: 승인/반려
토큰: PLAN_QC_OK 발급/미발급
```

## 보고서
- 보고서 경로: rF   )rp   r;   rS   r   rr   rq   )	re   r   r   rv   r   	thresholdimmediate_passcycle_focusfocuss	            rK   build_phase1_5_promptr     s    $$$4WI\JK"#>')DJI%&>?N :Z1K
 OOE?3E;	/ ;	/  ;	/  y;	/!;	/ w	;	/	;	/
  )k;	/
*;	/ G;	/;	/ ,,;	/-;	/  *l;	/+";	/ #/;	/0;	/, K-;	/,-;	/. q[M/;	/./;	/0 1;	/01;	/6 &&7;	/6'7;	/8 n9;	/819;	/Z 27[;	/Z	8$[;	/l .3aZE=N#Om;	/lPm;	/v  +mw;	/v ,.w;	/=rM   pilot_image_pathsc                     t          d|  d}dj                  d |D              }d|  dt        |       d| dt         d	| dS )
u   Phase 2.5: 파일럿 QC 게이트 (아마테라스 + 로키)

    극단 케이스 3종 검증. 3개 모두 통과 시 배치 생산 승인.
    rk   z-phase2_5.mdrF   c              3   &   K   | ]	  }d |   ywr   r   r   s     rK   r   z(build_phase2_5_prompt.<locals>.<genexpr>  s     A!T!:Ar   u   당신은 아마테라스(디자인팀장) + 로키(보안팀장, Devil's Advocate) 공동 검증입니다.

## Phase 2.5: 파일럿 QC 게이트
- 작업 ID: u   
- 파일럿 이미지 수: u#   개

## 파일럿 이미지 목록
u  

## 극단 케이스 선정 기준
1. 텍스트 밀도 극단값: 헤드라인 글자수/max_chars 비율 가장 높은 것
2. Zone 겹침 IoU 극단값: 이미지 요소 bbox와 텍스트 Zone bbox의 IoU 가장 높은 것
3. 폰트 크기 최소값 극단값: font_size_range.min이 가장 작은 것

## 검증 항목
각 파일럿 이미지에 대해:
- 자동 QC A-01~A-09 전항목 실행
- 텍스트 오버플로우 0건 확인
- 대비율 worst-case pixel WCAG AAA 7:1 (대형텍스트 4.5:1) 이상 확인
- 폰트 크기 최소 uP  px 이상 확인 (예외 없음, 페이지 인디케이터·브랜드 태그·면책 문구 포함)
- 아마테라스 시각적 OK 사인

## 판정
- 3개 모두 통과 → PILOT_OK 토큰 발급, 배치 생산 승인
- 1개라도 실패 → PILOT_FAIL, 배치 중단 + 원인 수정 후 재파일럿

## 보고서
- 보고서 경로: )rp   r   rt   r   )re   r   rv   
image_lists       rK   build_phase2_5_promptr     sw     $$$4WI\JKA/@AAJy !&&)*;&<%= >**4 
6" #2!2 3  +m2)	/rM   c                    t          d|  d}t          d|  d}dj                  d |D              }t        |      }t        }t        d   }dd	d
t         dd}	|	j                  |d      }
dj                  g d|  d| d| d| d|
 d| d| dt         dt         d| dt                d| dt         dt         dt         dt         d| d |d!k(  rd"nd# d$| d      S )%u9  Phase 3.5: 디자인 QC (로키 단독, Devil's Advocate 평가, model: claude-opus-4-6)

    디자인 퀄리티 QC 10항목 100점 만점.
    모든 Cycle 동일 기준: PASS_THRESHOLD점. PASS까지 반복.
    ESCALATION_RULES["design_qc_immediate_pass"]점 이상 = 즉시 PASS (어떤 사이클이든)
    rk   z-phase3_5.mdr~   r   rF   c              3   &   K   | ]	  }d |   ywr   r   r   s     rK   r   z(build_phase3_5_prompt.<locals>.<genexpr>,  r   r   r:   u@   기본 품질 확인 (레퍼런스 재현도 + 시각적 계층)u=   품질 정제 (피드 차별화 + 감정적 임팩트 강화)u   최종 검증 (u   점 이상 필수)r   r   rm   u   당신은 로키(Loki), 보안팀(레드팀) 팀장입니다. Devil's Advocate로서 디자인 약점을 비판적 시각으로 공격합니다.
(3자 평가: 만든 팀 ≠ 평가 팀, model: claude-opus-4-6)

## Phase 3.5: 디자인 QC
- 작업 ID: r   r   u   /100점
- 즉시 PASS: u.   점 이상 (어떤 사이클이든)
- 중점: r   u    개

## 검수 대상 이미지
r   u   
- 디자인 노하우: u   
- 원본 카피 기획서: u?   

## 기술 QC: A 카테고리 9항목 (전항목 PASS 필수)
uz  
## 디자인 퀄리티 QC 체크리스트 (100점 만점)

| # | 항목 | 배점 | 판정 기준 |
|---|------|------|----------|
| DQ-01 | 레퍼런스 재현도 | 10점 | 디자인 디렉션 대비 재현도 |
| DQ-02 | 시각적 계층 구조 | 10점 | 시선 흐름이 자연스럽고 정보 우선순위가 명확한가 |
| DQ-03 | 프로 완성도 | 10점 | 세계 최고 전문가/프로 수준인가 |
| DQ-04 | 피드 차별화 | 10점 | SNS 피드에서 스크롤을 멈추게 하는 차별화 요소 |
| DQ-05 | 감정적 임팩트 | 10점 | 타겟 고객의 감정을 건드리는 임팩트 |
| DQ-06 | 여백/레이아웃 밸런스 | 10점 | 빈 공간과 콘텐츠 영역의 균형, 시각적 안정감 |
| DQ-07 | 색상 가시성/조화 | 10점 | 색상 선택의 명확성, 가시성, 브랜드 컬러 활용 |
| DQ-08 | 타이포그래피 품질 | 10점 | 폰트 조합, 크기 위계, 자간/행간, 가독성 |
| DQ-09 | CTA 효과성 | 10점 | 버튼 크기/위치/색상이 클릭 유도하는지 |
| DQ-10 | 브랜드 일관성 | 10점 | 같은 대분류 내 세트 간 톤/무드/컬러 통일감 |

## 통과 규칙
- **u]   점 이상 = 즉시 PASS** (어떤 사이클이든, 노하우 축적 효과)
- 모든 Cycle: u5  점 이상 → PASS
- Cycle 제한 없음 — PASS까지 반복

## FAIL 시 처리
- Phase 3 리턴 + 개선 포인트 노하우에 즉시 기록
- FAIL 사유를 FAIL_CATEGORIES 코드로 명시

## 학습 기록 (PASS/FAIL 무관 필수 — 미수행 시 .done 발급 불가)

### 기록 대상 파일
1. `uP   ` — 디자인 성공/실패 패턴 + **성공 템플릿 라이브러리**
2. `um  ` — QC 성공/실패 패턴 + **DQ 항목별 달성 패턴**

### 필수 기록 항목
각 배너별로:
- 실패 패턴: DQ 항목 + 감점 점수 + 구체적 CSS 값 (예: `opacity: 0.45` → DQ-03 7점)
- 성공 템플릿: DQ 항목 + 달성 점수 + **복사 가능한 CSS/HTML 코드 블록** + 적용 조건(배경 밝기, 사이즈)
- 성공 템플릿은 `u  ` "성공 템플릿 라이브러리" 섹션에 추가
- 체크리스트 추가: 반복 FAIL 항목을 체크리스트에 추가

### 검증 규칙
보고서에 아래 섹션 필수 포함:
```
## 노하우 업데이트 기록
- knowhow-design.md: 추가 패턴 N건 (성공 X건, 실패 Y건)
- design-qc-knowhow.md: 추가 패턴 N건
- 체크리스트 추가: N항목
```
이 섹션이 없거나 "0건"이면 보고서 불합격 처리.

## 검증 결과 출력 형식
```
[Phase 3.5 디자인 QC 결과 — Cycle u  ]
[A 카테고리 기술 QC]: 전항목 PASS/FAIL

[디자인 퀄리티 QC]
- DQ-01 레퍼런스 재현도: X/10점 — (로키 판정 사유)
- DQ-02 시각적 계층 구조: X/10점 — (사유)
- DQ-03 프로 완성도: X/10점 — (사유)
- DQ-04 피드 차별화: X/10점 — (사유)
- DQ-05 감정적 임팩트: X/10점 — (사유)
- DQ-06 여백/레이아웃 밸런스: X/10점 — (사유)
- DQ-07 색상 가시성/조화: X/10점 — (사유)
- DQ-08 타이포그래피 품질: X/10점 — (사유)
- DQ-09 CTA 효과성: X/10점 — (사유)
- DQ-10 브랜드 일관성: X/10점 — (사유)

총점: X/100
이전 사이클 점수: rn   r   r   u   
판정: PASS/FAIL
토큰: DESIGN_QC_OK 발급/미발급
```

에스컬레이션 규칙: memory/specs/escalation-rules.md 참조

## 보고서
- 보고서 경로: )	rp   r   rt   r   r;   rS   rr   rs   rL   )re   r   r   rv   r   r   r   r   r   r   r   s              rK   build_phase3_5_promptr     s    $$$4WI\JK&'~gYmLNYY?;??Nk"KI%&@AN NJ^,,>?K
 OOE?3EN	/ N	/  N	/  yN	/!N	/ w	N	/	N	/
  )kN	/
*N	/ ))N	/*N	/ GN	/#N	/ $/-N	/0'N	/ 
N	/"N	/ #/N	/0"N	/ #6!6N	/7&N	/ '5%5N	/6IN	/  %&
'!N	/ (!N	/> ?N	/>?N	/@ **AN	/@+AN	/N ##ON	/N$ON	/P nQN	/P"QN	/Z #6!6[N	/Z74[N	/t 5:7uN	/t;$uN	/P .3aZE=N#OQN	/PPQN	/\  +m]N	/\ ,.]N	/PrM   c                 V    t          d|  d}d|  dt         dt         dt         d| dS )	u   Phase 5: 노하우 종합 검토

    담당: 복합팀 팀장
    Phase 1.5/3.5에서 실시간 기록한 노하우를 종합 검토 + 누락 보충 + Phase 간 교차 인사이트 정리.
    rk   z
-phase5.mdu1   ## Phase 5: 노하우 종합 검토
- 작업 ID: u   
- 담당: 복합팀 팀장

## 목적
Phase 1.5/3.5에서 실시간 기록한 노하우를 종합 검토하고,
누락된 내용을 보충하며, Phase 간 교차 인사이트를 정리합니다.

## 검토 대상 파일 (3개)
1. `u   ` — QC 피드백 로그
2. `u   ` — 마케팅 노하우
3. `u  ` — 디자인 노하우

## 작업 절차
1. Phase 1.5 학습 기록 확인: knowhow-marketing.md에 실패+성공+체크리스트 3종이 빠짐없이 기록되었는지
2. Phase 3.5 학습 기록 확인: knowhow-design.md에 실패+성공+체크리스트 3종이 빠짐없이 기록되었는지
3. 누락 보충: 기록이 빠진 사이클이 있으면 보충 기재
4. Phase 간 교차 인사이트 정리:
   - "카피에서 이 방향으로 갔더니 디자인에서도 잘 됐다" 등
   - 카피 ↔ 디자인 간 시너지/충돌 패턴
5. 노하우 3개 파일 정합성 점검:
   - 중복 제거, 모순 해소
   - 다음 작업의 Phase -1에서 즉시 활용 가능한 상태로 정리

## 완료 기준
- 3개 파일 모두 검토 완료
- 누락 항목 0건 (보충 완료)
- 교차 인사이트 최소 1건 이상 기재
- 파일 정합성 검증 완료

## 보고서
- 보고서 경로: rF   )rp   rr   rq   rs   )re   rv   s     rK   build_phase5_promptr     s\     $$$4WIZHKy ! n %& '"# $"  +m25	/rM   phasekwargsc           	      N   |dk(  r(t        |j                  dd            }t        | |      S |dk(  r(t        |j                  dd            }t        | |      S |d	k(  rt	        | 
      S |dk(  r4|j                  d      }|st        d      t        | t        |            S |dk(  rY|j                  d      }|st        d      t        t        |j                  dd                  }t        | t        |      |      S |dk(  rP|j                  d      }|st        d      t        |j                  dd            }t        | t        |      |      S |dk(  r]|j                  d      }	|	st        d      t        |	t              st        d      t        | |	D 
cg c]  }
t        |
       c}
      S |dk(  r4|j                  d      }|st        d      t        | t        |             S |d!k(  ry|j                  d"      }|st        d#      t        |t              st        d$      t        |j                  dd            }t        | |D 
cg c]  }
t        |
       c}
|%      S |d&k(  r|j                  d"      }|st        d'      t        |t              st        d(      t        t        |j                  dd                  }t        | |D 
cg c]  }
t        |
       c}
|)      S |d*k(  rt!        | 
      S t        d+| d,      c c}
w c c}
w c c}
w )-u  Phase별 프롬프트 라우터

    Args:
        task_id: 작업 ID
        phase: Phase 번호 (-1, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5)
        **kwargs: Phase별 추가 인자
            - phase=-1: (없음)
            - phase=0: campaign_type (str, 기본값: "conversion")
            - phase=0.5: (없음)
            - phase=1: brief_path (str, 필수)
            - phase=1.5: copy_draft_path (str, 필수), cycle (int, 기본값: 1)
            - phase=2: copy_plan_path (str, 필수), campaign_type (str, 기본값: "conversion")
            - phase=2.5: pilot_image_paths (list[str], 필수)
            - phase=3: approved_plan_path (str, 필수)
            - phase=3.5: image_paths (list[str], 필수), cycle (int, 기본값: 1)
            - phase=4: image_paths (list[str], 필수), campaign_type (str, 기본값: "conversion")
            - phase=5: (없음)

    Returns:
        해당 Phase 프롬프트 문자열

    Raises:
        ValueError: 지원하지 않는 Phase 번호 또는 필수 인자 누락 시
    rf   rj   )re   rf   r   rN   rP   )re   rN   g      ?)re   rn   r   z#Phase 1 requires 'brief_path' kwarg)re   r   g      ?r   z*Phase 1.5 requires 'copy_draft_path' kwargr   )re   r   r   r3   r   z'Phase 2 requires 'copy_plan_path' kwarg)re   r   rN   g      @r   z=Phase 2.5 requires 'pilot_image_paths' kwarg (non-empty list)z7Phase 2.5 'pilot_image_paths' must be a list of strings)re   r   r2   r   z+Phase 3 requires 'approved_plan_path' kwarg)re   r      r   z5Phase 4 requires 'image_paths' kwarg (non-empty list)z/Phase 4 'image_paths' must be a list of strings)re   r   rN   g      @z7Phase 3.5 requires 'image_paths' kwarg (non-empty list)z1Phase 3.5 'image_paths' must be a list of strings)re   r   r   r1   u"   지원하지 않는 Phase 번호: u9   . 허용 범위: -1, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5)rV   rS   r|   r   r   ro   r   rT   r   r   
isinstancelistr   r   r   r   r   )re   r   r   rf   rN   r   r   r   r   r   r   r   r   s                rK   build_image_workflow_promptr     s   2 {&**]G<=(kRR	!FJJEF"7-PP	#$W55	!ZZ-
BCC"7s:OO	# **%67IJJC

7A./0$0
 	
 
!$45FGGFJJEF"~.'
 	
 
#"JJ':; \]]+T2VWW$/@A!s1vA
 	

 
!#ZZ(<=!JKK""#56
 	

 
!jj/TUU+t,NOOFJJEF")45AQ5'
 	
 
#jj/VWW+t,PQQC

7A./0$)45AQ5
 	
 
!"733 =eWD}~U B* 6 6s    L
L
L"
c                      d}| d|  d| d}|S )uI  dispatch.py --workflow image-qc-gate 용 워크플로우 개요 프롬프트 생성

    5Phase 워크플로우 개요 + QC 기준을 한 문자열로 반환하여
    task_desc 앞에 prepend 할 수 있도록 한다.

    Args:
        task_id: 작업 ID

    Returns:
        워크플로우 개요 프롬프트 문자열
    z<============================================================uw  
## 이미지 제작 QC 게이트 워크플��우 (v2.5)

### ⚠️ 시작 조건
- **제이회장님 승인 필수** — 디자인/이미지/광고 키워드가 있다고 자동 시작 금지
- 아누는 제이회장님께 "이 작업에 이미지 QC 워크플로우를 적용하겠습니다" 보고 → 승인 후 시작
- **한정승인 시**: 아누가 제이회장님 확인 없이 끝까지 orchestration

### 워크플로우 개요
- Phase -1: 노하우 프리로딩 — 과거 성공/실패 패턴 숙지
- Phase 0: 브리프 검증 게이트 — 작업 브리프 유효성 검증
- Phase 0.5: 브리프 QC — 5항목 100점 정량 검증
- Phase 1: 카피/기획 (마케팅팀) — 광고 카피 및 기획안 작성
- Phase 1.5: 기획 QC (마아트+로키) — 7항목 100점, PASS까지 반복
- Phase 2: QC 검증 (카피) — 카피/기획안 품질 최종 검증
- Phase 2.5: 파일럿 3종 제작 — 극단 케이스 자동 QC
- Phase 3: 디자인 제작 (디자인팀) — 이미지 디자인 제작
- Phase 3.5: 디자인 QC (로키 단독) — DQ 10항목 100점, PASS까지 반복
- Phase 4: 최종 통합 검증 (3인 서명) — 카피+디자인 결합 최종 확인
- Phase 5: 노하우 종합 검토 — 학습 기록 종합 + 교차 인사이트

### QC 기준
QC 기준(카테고리 A/B, FAIL 사유, 에스컬레이션)은 각 Phase에서 로딩됩니다.

Task ID: rF   r   )re   sepoverviews      rK   build_workflow_overview_promptr   (  s4     C% ( 9B%r+	 0 OrM   fail_historyc           	      p   |dk(  r
t         d   }n|dk(  r
t         d   }n	t         d   }t         d   }| D cg c]  }|j                  d      |k(  s| }}t        |      }||k\  }d}d}	t        |      |k\  r|| d	 }
|
D cg c]  }t        |j                  d
d             }}t        t	        |            dk(  rG|d   t
        v r<|d   }d}	t        |      D ]'  }t        |j                  d
d            |k(  r|	dz  }	' n |dk7  }|r|rd}n|rd}n|rd}nd}|dk7  }||||||	t        dS c c}w c c}w )ur  에스컬레이션 조건 체크

    이중 조건 체크:
    1. 동일 FAIL 카테고리 연속 반복 (same_fail_repeat 이상 시 에스컬레이션)
    2. QC 루프 상한 초과 (phase별 loop_max 이상 시 에스컬레이션)

    Args:
        fail_history: FAIL 이력 리스트. 각 항목은 dict:
            {
                "loop": int,           # 루프 회차 (1-based)
                "fail_code": str,      # FAIL_CATEGORIES 중 하나
                "phase": str,          # "copy" | "design"
                "detail": str,         # 선택적 상세 설명
            }
        phase: 현재 검사할 Phase 구분 ("copy" | "design")

    Returns:
        에스컬레이션 판정 결과 dict:
            {
                "escalate": bool,           # 에스컬레이션 필요 여부
                "reason": str,              # 에스컬레이션 사유 ("none" | "same_fail_repeat" | "loop_max_exceeded" | "both")
                "loop_count": int,          # 현재 루프 횟수
                "loop_max": int,            # 해당 Phase 루프 상한
                "repeated_fail_code": str,  # 반복된 FAIL 코드 ("none" 이면 해당 없음)
                "repeat_count": int,        # 해당 FAIL 코드 연속 반복 횟수
                "knowhow_path": str,        # 에스컬레이션 시 참조할 노하우 문서 경로
            }
    rh   r6   ri   r7   r8   r   noner   N	fail_coderm   rn   bothloop_max_exceeded)escalatereason
loop_countloop_maxrepeated_fail_coderepeat_countknowhow_path)r;   rS   rt   rV   setr&   reversedrr   )r   r   r   same_fail_thresholdhphase_historyr   loop_exceededr   r   recentrecent_codessame_fail_triggeredr   r   s                  rK   check_escalationr   P  s   < #O4	(	#$56 $O4*+=> !-H1g%0GQHMH]#J (*M  L
=00 3345=CDAEE+r23DDs< !Q&<?o+M!-aLm, quu["-.2DD A%L	 -6 ,	$	#H  0$$ M I Es   D.D."D3)rP   )rj   )rn   )<__doc__syspathlibr   __file__resolveparent_WORKSPACE_DIRrV   r{   insertconfig.loaderr   tools.dq_rulesr   r   r   get_instance_cfgget_pathrp   r   r   _BANNED_WEIGHTSmaxra   r   r   dict__annotations__r   rU   r&   r   r'   r0   r;   rT   r@   objectrr   rq   rs   rL   rZ   rd   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   rK   <module>r      s     h'')0077~chh&HHOOAs>*+ ' D D!}!!#01 &z259%i07>*+;<) (3.  %/Zdjk$/dntu'2eouv z,zRaQbbkl
 ,6_iop+_ -V 'u  wF  vG  G`  a   233]^q]r  sC  D3,tCc3h'( D %4QUV*W[\*W[\.T[_`*W[\4tCc53;.//0 c (G # 	c 	   "$ $sCx.   &(	"T#v+  !!!CD*++MN '((GH 3 S C   0Cs C C3 CL0 0S 0C 0f3 3# 3# 3r &^^^ ^ 		^BT T# T# Tt &XXcX X 		Xv(3 (3 (\ TTT T 		Tn!!Cy! 	!N kkck k 		k\$ $ $Nr@ r@S5[ r@F r@WZ r@j%C %C %PW4S&[(9#: W3 W4PSU[P[K\ WrM   