# 에이전트 미팅 Cycle 2: 미합의 항목 해결
> task-id: task-1245.1 | 일시: 2026-03-29

## 참석자
- 헤르메스 (퍼실리테이터, 개발1팀장)
- 아프로디테 (마케팅팀장)
- 페이토 (카피라이터)
- 아마테라스 (디자인팀장)
- 마아트 (QC 매니저)
- 로키 (레드팀)

---

## 토론 기록

---

### [미합의 1] 루프 제한 방식
> 횟수 상한(페이토 안: 5회 FAIL → 에스컬레이션) vs 사유 비교 기반(마아트 안: 동일 사유 반복 시 에스컬레이션)

---

**Round 1: 독립 의견**

**아프로디테 (마케팅팀장):**
마케팅팀 관점에서 루프는 "비용"이다. 무한 루프는 곧 무한 비용이다. 페이토의 횟수 상한안이 운영 측면에서 더 직관적이고 제어 가능하다. 단, 3회는 너무 적다. 카피 루프는 최소 2~3회 정상 반복이 생길 수 있다. **5회 FAIL 상한**이 현실적이다. 다만 횟수 기준은 "총 루프 횟수"가 아닌 **"동일 Phase에서의 FAIL 횟수"**로 카운팅해야 한다. Phase 1→2 루프 5회와 Phase 3→4 루프 5회는 별도 카운터로 관리해야 한다.

**페이토 (카피라이터):**
내 원안은 5회였다. 마아트의 사유 비교 방식이 이론적으로는 더 정교하지만 **구현 복잡도가 높다.** FAIL 사유를 자연어로 비교하는 로직은 오탐이 많다. 예: "헤드카피 글자 수 초과"와 "헤드카피가 너무 길다"는 같은 사유지만 문자열 매칭으로는 다른 사유로 인식된다. 따라서 **사유 비교는 카테고리 레벨에서만 적용**하고, 카테고리 동일 반복 2회 이상이면 이를 병렬 조건으로 사용하는 절충안을 제안한다. 즉: 횟수 OR 동일 카테고리 반복 조건 중 하나라도 해당 시 에스컬레이션.

**아마테라스 (디자인팀장):**
디자인 관점에서 Phase 3→4 루프는 구조적으로 3회 이상이 되어서는 안 된다. 첫 번째 FAIL에서 충분한 수정 가이드가 나왔다면 두 번째 시도에서 PASS가 정상이다. 세 번째 FAIL은 **가이드 자체가 잘못됐다는 신호**다. 따라서 Phase 3→4 루프는 3회 상한이 적절하다. Phase 1→2 카피 루프는 더 유연하게 5회까지 허용할 수 있다. **Phase별 루프 상한을 다르게 설정**하는 것이 현실적이다.

**마아트 (QC 매니저):**
내 사유 비교 방식의 핵심은 **"루프 횟수 ≠ 문제 해결 진척"**이라는 인식이다. 5회 루프를 돌았더라도 매번 다른 이유로 FAIL했다면 이는 정상 개선 프로세스다. 반대로 2회만 돌았어도 동일 사유로 FAIL했다면 에스컬레이션이 맞다. 따라서 **"2회 연속 동일 FAIL 카테고리 = 즉시 에스컬레이션"** + **"Phase별 최대 상한(카피 5회, 디자인 3회)"**을 병행 조건으로 제안한다. 구현 측면에서 페이토가 말한 오탐 문제는 FAIL JSON의 `fail_category` 필드 값으로 비교하면 해결된다. 자연어 비교가 아닌 enum 값 비교다.

**로키 (레드팀):**
두 방식 모두 **"에이전트가 정직하게 FAIL 카테고리를 기록한다"는 전제에 의존한다.** 에이전트가 의도적으로 또는 무의식적으로 FAIL 카테고리를 다르게 표기하면 사유 비교 로직이 우회된다. 예: 같은 문제가 2회 연속 발생했지만 에이전트가 첫 번째는 `copy_length_exceeded`, 두 번째는 `layout_constraint_violation`으로 기록하면 연속 동일 판정이 안 된다. **FAIL 카테고리 enum을 미리 고정하고, QC 에이전트가 자유 텍스트 사유를 기록하는 것을 금지**해야 한다. 카테고리 외의 자유 서술은 `detail` 필드에 별도로 제한해야 한다.

---

**Round 2: 교차 토론**

**마아트 → 로키 수용:**
로키의 지적이 정확하다. FAIL 카테고리를 사전 정의된 enum으로 고정하지 않으면 사유 비교 로직은 무력화된다. 마아트 QC 에이전트 프롬프트에 **FAIL 카테고리 enum 목록을 명시**하고, 자유 서술은 `detail`에만 허용하는 구조로 보완한다. `fail_category` 예시 enum:

```
COPY_LENGTH   - 카피 길이 초과
COPY_CLARITY  - 메시지 불명확
CTA_MISSING   - CTA 미포함/비가시
BRAND_MISMATCH - 브랜드 일치성 위반
TECH_OVERLAP  - 텍스트 겹침
TECH_BOUNDARY - 텍스트 경계 이탈
TECH_RESOLUTION - 해상도 미달
VISUAL_HIERARCHY - 시각 계층 미흡
COPY_DESIGN_FIT - 카피-디자인 정합성 위반 (Phase 4만)
```

**아마테라스 → 마아트 지지 + 보완:**
Phase별 상한을 다르게 설정하는 것에 마아트가 동의해줘서 다행이다. 구체 수치를 제안한다: **Phase 1→2(카피 루프) 상한 5회, Phase 3→4(디자인 루프) 상한 3회.** 또한 에스컬레이션 시 단순히 멈추는 것이 아니라 **dispatch.py가 FAIL 이력 전체를 요약한 에스컬레이션 리포트를 생성하고 제이회장님에게 알림** 전송해야 한다.

**페이토 → 마아트 절충안 수용:**
마아트의 수정안(enum 비교 + Phase별 상한 병행)이 내가 Cycle 1에서 제안한 방향과 사실상 수렴했다. **"2회 연속 동일 카테고리 FAIL" OR "Phase별 상한 초과" 중 하나라도 해당 시 에스컬레이션**으로 합의 가능하다.

**아프로디테 → 전체 지지:**
마케팅팀 입장에서는 에스컬레이션 발생 시 **"몇 번째 루프에서, 어떤 사유로, 누가 에스컬레이션했는가"**가 리포트에 명확히 표기되어야 한다. 이것이 나중에 프로세스 개선의 근거가 된다.

**로키 → 최종 조건 추가:**
에스컬레이션 리포트에 한 가지 더 추가해야 한다: **"이 에스컬레이션이 예방 가능했는가"** 진단 필드. FAIL 이력을 분석해 "Phase 0 브리프 미흡에서 비롯된 연쇄 FAIL"이었는지, "기술적 제약 미공유에서 비롯됐는지"를 자동 진단. 이 진단이 `design-qc-knowhow.md` 개선의 직접 인풋이 된다.

---

**Round 3: 합의 시도**

**헤르메스 (퍼실리테이터) 정리:**
모든 참석자 의견이 하나의 구조로 수렴했다. 다음으로 합의 확인한다.

**합의 달성:**
1. 루프 제한 = **이중 조건 병행**: "2회 연속 동일 FAIL 카테고리" OR "Phase별 루프 상한 초과" 중 하나라도 해당 시 에스컬레이션 — 만장일치
2. FAIL 카테고리는 **사전 정의된 enum으로 고정** (`COPY_LENGTH`, `CTA_MISSING` 등 9종), 자유 서술은 `detail` 필드에 제한 — 만장일치
3. Phase별 루프 상한: **Phase 1→2(카피): 5회 / Phase 3→4(디자인): 3회** — 만장일치
4. 에스컬레이션 발생 시 dispatch.py가 **FAIL 이력 전체 + 예방 가능성 진단 포함 에스컬레이션 리포트 자동 생성** + 제이회장님 알림 전송 — 만장일치

---

### [미합의 2] 인간 최종 승인 루프
> 로키(필수, 제이회장님 최종 승인 없이 production 불가) vs 아마테라스(Phase 4 PASS로 충분, 인간 승인은 오버헤드)

---

**Round 1: 독립 의견**

**아프로디테 (마케팅팀장):**
마케팅팀 입장은 명확하다. **브랜드 리스크가 있는 모든 외부 발행 콘텐츠는 인간 최종 승인이 필요하다.** 그러나 아마테라스의 오버헤드 우려도 타당하다. 절충안: 콘텐츠 유형에 따른 승인 트리거 차등화. **외부 광고 배너 → 제이회장님 승인 필수. 내부 시안/목업 → Phase 4 PASS로 자동화 가능.** 워크플로우에 `requires_human_approval: true/false` 플래그를 도입하고, 브리프 작성 시 해당 플래그를 설정하는 구조.

**페이토 (카피라이터):**
카피라이터 관점에서 인간 승인의 핵심 가치는 **"에이전트 QC가 놓치는 맥락적 판단"**이다. 예: 특정 표현이 법적/윤리적 문제를 야기할 수 있는지, 캠페인 타이밍이 외부 사건과 충돌하는지 — 이런 것들은 자동 QC로 감지 불가다. 따라서 인간 승인은 "품질 게이트"가 아닌 **"맥락 게이트"**로 포지셔닝해야 한다. 그렇다면 오버헤드라는 반론은 약해진다. 맥락 검토는 빠르면 30초다.

**아마테라스 (디자인팀장):**
내가 오버헤드를 우려한 이유는 **승인 대기 시간이 병목**이 되는 시나리오다. 제이회장님이 바쁜 경우 Phase 4 PASS 후 승인 대기가 12~24시간 이상 걸릴 수 있다. 이것이 긴급 캠페인 집행을 막는 상황이 있었다. 내 수정 제안: **승인 SLA를 명시하고, SLA 초과 시 위임 승인 경로를 지정.** 예: 제이회장님 승인 SLA 2시간, 초과 시 아프로디테(마케팅팀장) 위임 승인. 이렇게 하면 로키의 "필수" 요건과 내 "효율성" 요건이 양립 가능하다.

**마아트 (QC 매니저):**
QC 관점에서 Phase 4 PASS는 "기술적·형식적 품질 보증"이다. 인간 승인은 **"의사결정 책임 귀속"**이다. 이 둘은 다른 차원의 게이트다. 따라서 인간 승인은 QC를 대체하는 것이 아니라 QC 이후의 별도 레이어여야 한다. 구체 설계: Phase 4 PASS 후 → 자동으로 **승인 대기 큐(queue)** 진입 → 제이회장님에게 알림 전송 (시안 이미지 + QC 리포트 첨부) → 승인/반려 응답 → dispatch.py가 결과 처리. 이 구조라면 에이전트 워크플로우와 인간 승인이 자연스럽게 통합된다.

**로키 (레드팀):**
아마테라스의 "오버헤드" 주장을 DA(Devil's Advocate)로 더 강하게 밀어붙이겠다. **인간 승인이 형식적 절차로 전락하는 시나리오를 가정해야 한다.** 에이전트가 QC를 통과시킨 결과물을 인간이 3초 만에 "승인"만 클릭한다면 — 이것이 실제 안전장치인가? 아니다. 형식 승인은 책임 소재를 만들지만 품질을 보장하지 않는다. 따라서 인간 승인의 실효성을 높이려면: (1) 승인 인터페이스에 **QC FAIL 이력과 에스컬레이션 이력이 함께 표시**되어야 한다, (2) 단순 승인 클릭이 아닌 **승인 체크리스트 최소 3항목 확인 후 서명** 형태여야 한다. 그렇지 않으면 인간 승인은 "책임 세탁 도구"에 그친다.

---

**Round 2: 교차 토론**

**아마테라스 → 로키 부분 수용:**
로키의 "형식 승인 vs 실효 승인" 구분이 핵심을 찌른다. 내가 오버헤드로 우려했던 것은 **형식 승인**이었다. 로키가 제안한 "체크리스트 확인 후 서명" 방식이라면, 승인의 실효성이 보장되면서 승인 소요 시간도 합리적으로 줄어든다. 아마테라스가 로키 안을 수용하여 반대 입장을 철회한다.

**마아트 → 아마테라스 제안(SLA + 위임 경로) 지지:**
아마테라스의 SLA + 위임 경로 설계는 운영 현실성이 높다. 제이회장님 승인 SLA 2시간, 초과 시 아프로디테 위임 승인 구조를 공식화하자. 단, **위임 승인 내역은 별도 로그로 기록**되어 제이회장님이 나중에 확인 가능해야 한다.

**아프로디테 → 위임 승인 범위 조건 추가:**
위임 승인은 **일상 배너(반복 형태의 표준 콘텐츠)**에만 적용하고, **신규 캠페인 런칭 / 브랜드 가이드라인 변경 포함 콘텐츠 / 예산 1회성 집행 광고**는 위임 불가로 제이회장님 직접 승인을 유지해야 한다. 브리프의 `requires_direct_approval` 플래그로 구분.

**페이토 → 승인 인터페이스 설계 보완:**
로키가 말한 승인 체크리스트 3항목을 구체화한다: (1) QC 통과 결과물이 브리프 목적에 부합하는가?, (2) 브랜드 보이스/법적 표현 문제가 없는가?, (3) 현재 시점에서 캠페인 집행이 적절한가? 이 세 항목에 모두 Y 체크 시 승인 완료. 제이회장님 또는 위임 승인자 모두 동일 체크리스트 사용.

**로키 → 전체 합의 가능 확인:**
처음 로키가 "필수"를 강하게 주장한 이유는 아마테라스의 "오버헤드 = 불필요" 프레임을 막기 위해서였다. 지금 논의는 "인간 승인 필수 + 실효성 보장 + 운영 현실성 반영"으로 수렴했다. 로키 DA 해제. 합의 가능하다.

---

**Round 3: 합의 시도**

**헤르메스 (퍼실리테이터) 정리:**
아마테라스의 반대 철회 + 로키의 DA 해제로 만장일치 경로 확보. 합의 확인.

**합의 달성:**
1. **인간 최종 승인은 필수** — Phase 4 PASS 후 자동으로 승인 대기 큐 진입, 제이회장님에게 알림(시안 + QC 리포트 첨부) — 만장일치
2. 승인 인터페이스는 **단순 클릭이 아닌 3항목 체크리스트 확인 후 서명** 형태 (브리프 부합 / 법적·브랜드 문제 없음 / 집행 타이밍 적절) — 만장일치
3. **승인 SLA: 2시간 / SLA 초과 시 아프로디테 위임 승인** — 단, 위임 승인은 일상 배너에만 적용, 신규 캠페인·브랜드 변경·1회성 예산 광고는 제이회장님 직접 승인 필수 (`requires_direct_approval` 플래그) — 만장일치
4. 위임 승인 내역은 **별도 로그 기록** (제이회장님 사후 확인 가능) — 만장일치
5. `workflow.yaml`에 콘텐츠 유형별 `requires_human_approval`, `requires_direct_approval` 플래그 추가 — 만장일치

---

### [미합의 3] B 카테고리 항목별 가중치
> 기본 동일 가중치 vs 항목별 차등 (아프로디테: CTA 가중치 높게 vs 마아트: 균등 배분)

---

**Round 1: 독립 의견**

**아프로디테 (마케팅팀장):**
광고 성과 지표(CTR, 전환율) 기반으로 가중치를 설계해야 한다. 우리 제품의 과거 A/B 테스트 경험상 **CTA 명확성이 CTR에 가장 직접적 영향**을 미쳤다. 감정적 공감도는 상단 퍼널(인지도)에 영향을 주지만 직접 전환과의 상관관계는 낮다. 따라서 제안 가중치: **CTA 명확성 30% / 메시지 일관성 25% / 브랜드 일치성 20% / 시각 계층 15% / 감정적 공감도 10%** (합계 100%).

**페이토 (카피라이터):**
카피 관점에서 **메시지 일관성**이 가장 중요한 항목이다. 카피-디자인 정합성이 무너지면 광고 전체가 신뢰를 잃는다. CTA는 기술적으로 강제할 수 있는 요소(크기, 위치, 색상)지만 메시지 일관성은 그렇지 않다. 제안 가중치: **메시지 일관성 30% / CTA 명확성 25% / 감정적 공감도 20% / 브랜드 일치성 15% / 시각 계층 10%** — Phase 4에 한해 카피-디자인 정합성을 별도 추가(Phase 4 총점 기준 조정 필요).

**아마테라스 (디자인팀장):**
디자인 관점에서 **시각 계층(Visual Hierarchy)**이 다른 모든 항목을 가능하게 하는 기반이다. 시각 계층이 무너지면 CTA가 있어도 안 보이고, 메시지가 좋아도 전달이 안 된다. 제안 가중치: **시각 계층 30% / CTA 명확성 25% / 메시지 일관성 20% / 감정적 공감도 15% / 브랜드 일치성 10%.**

**마아트 (QC 매니저):**
각 팀이 자기 전문 영역 항목을 최고 가중치로 주장하는 패턴이 보인다. 이것은 예상된 편향이다. QC 담당자로서 가중치 설계의 원칙을 제안한다: **"가중치는 기여도 기반이어야 하며 역할 편향에서 독립적이어야 한다."** 균등 배분(각 20%)은 편향을 제거하는 안전한 출발점이다. 그러나 순수 균등이 아닌 **약간의 차등(최대 가중치 항목이 최소의 2배를 넘지 않는 범위)** 정도의 절충을 수용한다. 단, 가중치 근거가 역할 편향이 아닌 **측정 가능한 KPI와의 상관관계**에 기반해야 한다.

**로키 (레드팀):**
가중치 설계 논의 자체에 근본적 질문을 던진다. **가중치가 고정 수치이면 캠페인 유형별 차이를 반영하지 못한다.** 인지도 캠페인 배너와 전환율 최적화 배너는 QC 기준이 달라야 한다. 예: 브랜드 인지도 캠페인 → 감정적 공감도 가중치 높게 / 전환율 최적화 캠페인 → CTA 명확성 가중치 높게. `workflow.yaml`의 브리프 `campaign_type` 필드 값에 따라 **가중치 프로파일이 동적으로 선택**되어야 한다. 고정 가중치는 다양한 캠페인에 적용할 수 없다.

---

**Round 2: 교차 토론**

**마아트 → 로키 수용 + 설계 구체화:**
로키의 "캠페인 유형별 가중치 프로파일" 아이디어는 마아트 안의 "편향 없는 KPI 기반"과 양립한다. 각 캠페인 유형별 기본 프로파일을 정의하되, 최대 가중치 항목이 최소의 2배를 넘지 않는 제약을 유지하자. 두 가지 표준 프로파일을 우선 정의:

**[프로파일 A: 전환 최적화 캠페인]**
- CTA 명확성: 30%
- 메시지 일관성: 25%
- 브랜드 일치성: 20%
- 시각 계층: 15%
- 감정적 공감도: 10%

**[프로파일 B: 브랜드 인지도 캠페인]**
- 감정적 공감도: 25%
- 메시지 일관성: 25%
- 시각 계층: 20%
- 브랜드 일치성: 20%
- CTA 명확성: 10%

**아프로디테 → 마아트 프로파일 지지 + 조건 추가:**
두 프로파일 설계에 동의한다. 단, 어느 프로파일에서든 **CTA 명확성이 10% 이하로 내려가서는 안 된다.** CTA가 완전히 없는 광고는 성과 측정이 불가능하기 때문이다. 최솟값 바닥(floor)을 10%로 설정하자.

**페이토 → 마아트 프로파일 지지 + 보완:**
두 프로파일 구조에 동의한다. Phase 4 전용인 **카피-디자인 정합성 항목**의 처리 방법을 명확히 해야 한다. 이 항목은 Phase 2에는 없고 Phase 4에만 있다. 제안: Phase 4에서는 5개 항목에 카피-디자인 정합성을 추가한 6개 항목으로 계산하되, 총점 기준을 6개 항목 기준으로 재정규화(normalize). 카피-디자인 정합성 가중치: 두 프로파일 모두 15%로 고정, 나머지 5개 항목을 각각 85%로 비례 축소.

**아마테라스 → 프로파일 B 시각 계층 가중치 조정 요청:**
프로파일 B에서 시각 계층 20%는 적절하다. 그러나 감정적 공감도 25%가 너무 높다고 생각한다. 감정은 측정하기 어렵고 QC 에이전트의 주관이 개입될 여지가 크다. **감정적 공감도 20%, 시각 계층 25%**로 교환하는 것이 더 안정적인 QC 기준이 된다.

**로키 → 아마테라스 조정 지지:**
아마테라스의 우려가 타당하다. "측정하기 어려운 항목에 높은 가중치"는 QC 일관성을 해친다. 프로파일 B 조정안을 지지한다.

---

**Round 3: 합의 시도**

**헤르메스 (퍼실리테이터) 정리:**
최종 가중치 수치를 확인한다.

**합의 달성:**
1. B 카테고리 가중치는 **캠페인 유형별 프로파일**로 관리, `workflow.yaml` `campaign_type` 필드로 선택 — 만장일치

2. **[프로파일 A: 전환 최적화]** (Phase 2 적용):
   - CTA 명확성: **30%**
   - 메시지 일관성: **25%**
   - 브랜드 일치성: **20%**
   - 시각 계층: **15%**
   - 감정적 공감도: **10%**

3. **[프로파일 B: 브랜드 인지도]** (Phase 2 적용, 아마테라스 조정안 반영):
   - 메시지 일관성: **25%**
   - 시각 계층: **25%**
   - 브랜드 일치성: **20%**
   - 감정적 공감도: **20%**
   - CTA 명확성: **10%** (floor 10% 준수)
   — 만장일치

4. **Phase 4 전용 카피-디자인 정합성 항목 추가**: 기존 5개 항목 합산 × 85% + 카피-디자인 정합성 15% = 100% (페이토 제안 반영) — 만장일치

5. 어느 프로파일에서도 **CTA 명확성 최솟값 10%** (floor) 보장 — 만장일치

---

### [미합의 4] Phase 3 중간 시안 리뷰
> 아마테라스(효율성: 빠른 실패 탐지 찬성) vs 로키(비용: 추가 세션 + 컨텍스트 오버헤드 반대)

---

**Round 1: 독립 의견**

**아프로디테 (마케팅팀장):**
마케팅팀은 Phase 3 중간 리뷰에 조건부 찬성이다. **"중간 리뷰가 필요한 케이스"와 "불필요한 케이스"를 구분**할 수 있어야 한다. 복잡한 신규 크리에이티브 시안(처음 시도하는 레이아웃, 신규 브랜드 컬러 조합)은 중간 리뷰가 효율적이다. 반면 기존에 PASS된 템플릿을 재활용하는 경우는 중간 리뷰가 오버킬이다. 브리프에 `enable_midpoint_review: true/false` 플래그를 추가하자.

**페이토 (카피라이터):**
중간 리뷰는 카피라이터 입장에서도 유익하다. Phase 3 디자인 중 **카피가 의도한 대로 시각화되고 있는지 확인하는 기회**이기도 하다. 그러나 로키의 오버헤드 우려도 타당하다. 절충안: **중간 리뷰는 "완성도 50% 시점의 비동기 텍스트 피드백"**으로 제한. 별도 세션을 열지 않고, 디자인팀이 중간 시안 파일을 저장하면 마아트 에이전트가 자동 비동기 검토 후 코멘트 파일을 출력. 이 코멘트를 디자인팀이 참고하여 계속 진행.

**아마테라스 (디자인팀장):**
내 원안을 구체화한다. Phase 3에서 실제로 문제가 발생하는 시점은 **"디자인 50% 완성 시점"**이다 — 레이아웃 구조와 텍스트 배치가 확정되었지만 비주얼 피니시(배경 이미지, 색감)는 아직인 단계. 이 시점에서 "텍스트 겹침, 경계 이탈, CTA 위치"를 사전 점검하면 완성 후 전면 수정 발생 확률이 크게 줄어든다. 단, 이 점검은 **A 카테고리(자동 규칙 기반)만 실행하고 B 카테고리 수동 검수는 Phase 4 최종 검수로 미룬다.** 자동 A 카테고리 검수만이라면 추가 세션이 필요 없다.

**마아트 (QC 매니저):**
아마테라스의 수정안(50% 시점 A 카테고리만 자동 검수)은 QC 관점에서 효율적이다. 구현 방법: **dispatch.py가 Phase 3 진행 중 중간 시안 파일 저장 트리거를 감지하면 A 카테고리 자동 검수 스크립트를 실행**, 결과를 `midpoint-review-result.json`으로 저장. 이 파일을 디자인팀 에이전트가 참조하여 계속 진행. FAIL 항목이 있으면 디자인 에이전트에게 즉시 알림, PASS면 계속 진행. Phase 4로 전환되지 않고 Phase 3 내부에서 처리된다.

**로키 (레드팀):**
내 원래 반대 입장의 핵심은 "추가 세션 비용"이었다. 아마테라스와 마아트의 수정안(A 카테고리만, Phase 3 내부 처리, 별도 세션 없음)은 내 우려를 대부분 해소한다. **단, 한 가지 조건을 추가한다: 중간 리뷰 FAIL이 발생해도 Phase 3가 중단되지 않고 계속 진행될 수 있어야 한다.** 중간 리뷰는 "정보 제공 체크포인트"지 "게이트"가 아니어야 한다. 중간 리뷰가 또 다른 FAIL→리턴 루프를 만들면 오버헤드가 재발생한다. 중간 리뷰 결과는 디자인 에이전트의 참조 정보이고, 최종 판정은 Phase 4에서만 이루어진다.

---

**Round 2: 교차 토론**

**아마테라스 → 로키 수용:**
로키의 "중간 리뷰 = 게이트가 아닌 체크포인트" 조건에 동의한다. 중간 리뷰는 Phase 3 중단을 유발하지 않고 디자인 에이전트에게 알림만 전달. 최종 판정은 Phase 4 전담.

**마아트 → 아프로디테 플래그 수용:**
`enable_midpoint_review` 플래그는 실용적이다. 단, 기본값을 `true`로 설정하자. 비용이 거의 없는 자동 A 카테고리 검수라면 기본 활성화가 안전하다. 비활성화는 "템플릿 재활용 등 명시적 이유가 있을 때만" 사용.

**아프로디테 → 페이토 비동기 코멘트 방식 지지:**
페이토의 "비동기 텍스트 피드백" 접근법과 마아트의 자동 스크립트 실행이 실질적으로 같은 구조다. 지지한다.

**페이토 → 전체 정리:**
최종 설계를 요약하면: Phase 3 50% 시점에서 디자인팀이 `midpoint-draft.file` 저장 → dispatch.py 자동 감지 → A 카테고리 자동 검수 실행 → `midpoint-review-result.json` 생성 + 디자인 에이전트 알림 → Phase 3 중단 없이 계속 진행 → Phase 4에서 최종 전체 검수. 간단하고 효율적이다.

**로키 → 추가 조건:**
`midpoint-review-result.json`은 Phase 4 마아트 에이전트 컨텍스트에도 자동 포함되어야 한다. 중간 점검에서 이미 감지된 문제를 Phase 4에서 다시 발견하는 중복 작업을 방지하기 위해. Phase 4 마아트는 중간 리뷰 결과를 알고 최종 검수에 임해야 한다.

---

**Round 3: 합의 시도**

**헤르메스 (퍼실리테이터) 정리:**
로키의 DA 해제 후 모든 참석자 의견이 수렴. 합의 확인.

**합의 달성:**
1. **Phase 3 중간 시안 리뷰 추가 — 조건부 도입** — 만장일치
2. 중간 리뷰 성격: **게이트(차단)가 아닌 체크포인트(정보 제공)** — Phase 3 중단 없이 디자인 계속 진행 — 만장일치
3. 검수 범위: **A 카테고리(자동 규칙 기반)만 실행**, B 카테고리 수동 검수는 Phase 4 전담 — 만장일치
4. 트리거: **Phase 3 50% 시점에서 디자인팀이 `midpoint-draft` 파일 저장 → dispatch.py 자동 감지 실행** — 만장일치
5. 결과 파일 `midpoint-review-result.json`은 **Phase 4 마아트 에이전트 컨텍스트에 자동 포함** — 만장일치
6. `workflow.yaml`에 `enable_midpoint_review` 플래그 추가 (기본값: `true`) — 만장일치

---

## 3 Whys 분석

### Why-1: 루프 제한 = 이중 조건 병행 (횟수 상한 + 동일 사유 반복)
- **Why 1**: 횟수 상한만 있으면 "매번 다른 사유로 FAIL"하는 진짜 문제를 놓친다
  - **Why 2**: 매번 다른 사유로 FAIL한다면 워크플로우나 QC 기준 자체에 구조적 문제가 있는 것이다
    - **Why 3**: 구조적 문제를 숫자 임계값으로만 감지하면 에스컬레이션이 늦어져 비용이 누적되고 근본 원인 진단이 불가능해진다
- **결론**: 횟수 상한(빠른 안전망) + 동일 사유 반복 탐지(정밀 진단)의 이중 조건이 서로를 보완하는 최적 구조

### Why-2: 인간 최종 승인 필수 + 실효성 보장
- **Why 1**: 에이전트 QC는 형식·기술 기준을 검증하지만 맥락적 판단(법적 리스크, 캠페인 타이밍, 브랜드 방향성)은 감지 불가
  - **Why 2**: 맥락적 판단 실패는 기술적 품질 PASS 후에도 발생 가능하며, 브랜드 손상·법적 문제로 이어질 수 있다
    - **Why 3**: 이 리스크는 사후 수습 비용이 사전 예방 비용(승인 2~3분)보다 수백 배 크다
- **결론**: 인간 승인은 QC의 연장이 아닌 독립적 맥락 게이트이며 책임 귀속의 필수 레이어

### Why-3: 가중치 프로파일 캠페인 유형별 분리
- **Why 1**: 전환 최적화 캠페인과 브랜드 인지도 캠페인은 성과 지표(KPI)가 다르다
  - **Why 2**: 성과 지표가 다르면 "좋은 광고"의 정의도 다르고, 따라서 QC 우선순위도 달라야 한다
    - **Why 3**: 단일 고정 가중치로 모든 캠페인을 평가하면 어느 캠페인도 최적 QC를 받지 못하고 결국 고정 가중치는 평균적으로 모두를 잘못 평가하는 기준이 된다
- **결론**: KPI 기반 가중치 분리는 QC 기준을 실제 비즈니스 목표와 정렬시키는 유일한 방법

### Why-4: Phase 3 중간 리뷰 = 차단 게이트가 아닌 체크포인트
- **Why 1**: 중간 리뷰가 차단 게이트가 되면 또 다른 FAIL→리턴 루프가 생성된다
  - **Why 2**: Phase 3 내에서 FAIL→리턴 루프가 생기면 당초 오버헤드 없이 빠른 실패 탐지를 위한 도입 목적이 훼손된다
    - **Why 3**: 목적 훼손된 게이트는 팀에 "게이트를 우회하는 동기"를 제공하여 장기적으로 전체 QC 체계에 대한 신뢰를 낮춘다
- **결론**: 체크포인트로 설계하면 정보 이득을 유지하면서 루프 비용을 제로로 유지 가능

---

## Cycle 2 합의 현황

### 만장일치 달성 항목

**[미합의 1] 루프 제한 방식 → 합의 완료**
- 이중 조건 병행: "2회 연속 동일 FAIL 카테고리" OR "Phase별 루프 상한 초과" 중 하나라도 해당 시 에스컬레이션
- FAIL 카테고리 enum 9종 고정 (자유 서술 금지, `detail` 필드 별도)
- Phase별 루프 상한: Phase 1→2(카피) 5회 / Phase 3→4(디자인) 3회
- 에스컬레이션 시 FAIL 이력 + 예방 가능성 진단 포함 리포트 자동 생성 + 알림 전송

**[미합의 2] 인간 최종 승인 루프 → 합의 완료**
- 인간 최종 승인 필수 (Phase 4 PASS 후 승인 대기 큐 자동 진입)
- 승인 형태: 3항목 체크리스트 확인 후 서명 (브리프 부합 / 법적·브랜드 문제 없음 / 집행 타이밍 적절)
- 승인 SLA 2시간 / 초과 시 아프로디테 위임 승인 (일상 배너에만)
- 신규 캠페인·브랜드 변경·1회성 예산 광고 → `requires_direct_approval: true` 제이회장님 직접 승인
- 위임 승인 내역 별도 로그 기록

**[미합의 3] B 카테고리 가중치 → 합의 완료**
- 캠페인 유형별 2개 프로파일 (workflow.yaml `campaign_type`으로 선택):
  - **프로파일 A (전환 최적화)**: CTA 30% / 메시지 일관성 25% / 브랜드 일치성 20% / 시각 계층 15% / 감정 공감도 10%
  - **프로파일 B (브랜드 인지도)**: 메시지 일관성 25% / 시각 계층 25% / 브랜드 일치성 20% / 감정 공감도 20% / CTA 10%
- CTA 최솟값 floor: 10% (어느 프로파일에서도 하한 보장)
- Phase 4 전용: 카피-디자인 정합성 15% 추가, 나머지 5항목 85%로 비례 정규화

**[미합의 4] Phase 3 중간 시안 리뷰 → 합의 완료**
- 도입 결정: 조건부 도입 (기본 활성화, `enable_midpoint_review: true`)
- 성격: 게이트가 아닌 체크포인트 (Phase 3 중단 없음)
- 검수 범위: A 카테고리 자동 검수만 (B는 Phase 4 전담)
- 트리거: Phase 3 50% 시점 `midpoint-draft` 파일 저장 → dispatch.py 자동 감지
- 결과 `midpoint-review-result.json` → Phase 4 마아트 컨텍스트 자동 포함

---

### 미합의 항목: 없음

### 전체 만장일치 달성 여부: **Yes**

---

### Cycle 1 미합의 항목 중 Cycle 2에서 처리 완료 현황

| Cycle 1 미합의 항목 | Cycle 2 처리 결과 |
|---|---|
| 루프 횟수 상한 설정 여부 | **합의 완료** — 이중 조건 병행 |
| Phase 3 중간 시안 리뷰 포인트 추가 | **합의 완료** — 체크포인트로 도입 |
| 인간 최종 승인 루프 필요 여부 | **합의 완료** — 필수 + 실효성 구조 |
| B 카테고리 항목별 가중치 | **합의 완료** — 캠페인 유형별 프로파일 |
| Phase 1~2 세션 묶음 vs 분리 | 미처리 (Cycle 3 논의 또는 실험 후 결정) |
| 에이전트용 문서 싱크 스크립트 구현 시점 | 미처리 (헤르메스 일정 조율 후 결정) |
| dispatch.py 단위 테스트 CI 통합 | 미처리 (헤르메스 일정 조율 후 결정) |

> 우선순위 높음 3개 항목 전부 합의 완료. 잔여 3개는 낮은 우선순위로 다음 사이클 또는 별도 의사결정으로 처리.

---

*기록: 헤르메스 (개발1팀장, 퍼실리테이터) | 2026-03-29*
