# 콘텐츠 자동화 파이프라인 기술 스펙

> **작성일**: 2026-03-26 | **작성자**: 오딘 (개발2팀장) | **task-id**: task-1084.1
> **상태**: Phase 2 완료 (설계), Phase 3 (PoC) 준비 완료
> **한정승인**: 제이회장님 Phase 2까지 자율 진행 승인

---

## 1. 개요

블로그 글 작성 → SEO 최적화 → 이미지 삽입 → 검수 → 발행까지 **자동으로 돌아가는 파이프라인**을 설계한다.
ThreadAuto(Threads/Instagram 자동화)의 검증된 패턴을 블로그 도메인에 확장한다.

### 대상 플랫폼
- **1순위**: 티스토리 (`incar-top.tistory.com`) — 분석/전문가형 톤
- **2순위**: 네이버 블로그 — FAQ/경험/구어체 톤
- **향후 확장**: WordPress (자체 호스팅), Ghost CMS

### 핵심 수치 목표
- 12편 블로그 / 12주 (주 1편 페이스)
- 글당 2,000~3,200자
- SEO 점수 70점 이상 발행 기준
- 컴플라이언스 위반 0건

---

## 2. 플랫폼 API 스펙

### 2-1. 티스토리 — Playwright 브라우저 자동화

**API 현황**: 2024년 2월 **전면 종료**. 공식 API 사용 불가.

**자동화 방식**: Playwright + playwright-stealth 조합

```
인증: 카카오 OAuth → 세션 파일(storage_state) 저장 → 재사용
발행: 글쓰기 페이지 직접 접근 → DOM 조작 → 제목/본문/태그 입력 → 발행 버튼 클릭
이미지: 에디터 내 이미지 업로드 버튼 → 파일 선택 다이얼로그 처리
```

**리스크 & 대응 (로키 F-01, F-02, F-03)**:

| 리스크 | 확률 | 대응 |
|--------|------|------|
| 카카오 2FA 강제 트리거 | High | 고정 IP + 카카오 신뢰 디바이스 등록, 세션 갱신 주기 설정 |
| DOM 셀렉터 변경 | Medium | role/aria-label 기반 셀렉터 + 주간 smoke test + 알림 |
| reCAPTCHA 봇 탐지 | Medium | playwright-stealth, 인간적 딜레이(0.5~3초 랜덤) |
| 세션 파일 탈취 | Medium | 파일 권한 0600, 웹 루트 외부 저장, 암호화 저장 검토 |

**PoC 우선 검증 사항**: 카카오 2FA 없이 반복 로그인 가능한 환경 확보

### 2-2. 네이버 블로그 — 공식 writePost API

**API 상태**: 운영 중 (OAuth 2.0)

```
엔드포인트: POST https://openapi.naver.com/blog/writePost.json
인증: Bearer {access_token} (네이버 OAuth 2.0)
콘텐츠: title (string), contents (string, HTML 지원)
이미지: multipart/form-data (복수 가능)
제한: 일 25,000회
```

**OAuth 토큰 관리 (로키 F-04 대응)**:
- Refresh token 자동 갱신 (만료 7일 전 사전 갱신)
- 갱신 실패 시 발행 중단 + 운영자 텔레그램 알림
- 재인증 절차 운영 매뉴얼 문서화

### 2-3. 대안 플랫폼 (확장 시)

| 플랫폼 | 인증 | 글 작성 | 이미지 | HTML | 난이도 |
|--------|------|---------|--------|------|--------|
| WordPress | Application Password | POST /wp/v2/posts | POST /wp/v2/media | 완전 지원 | 하 |
| Ghost CMS | JWT (HS256) | POST /admin/posts/ | POST /admin/images/upload/ | 완전 지원 | 하 |

---

## 3. 파이프라인 아키텍처

### 3-1. 전체 흐름

```
[Stage 0] 토픽 스케줄링
    │  weekly-calendar.md 기반 cron 트리거
    │  요일별 발행 수: 주 1편 (12주 12편)
    ▼
[Stage 1] 소스 수집
    │  RSS 뉴스 + YouTube 트랜스크립트 + 에버그린 풀
    │  키워드 기반 컨텍스트 매칭
    ▼
[Stage 2] AI 초안 생성
    │  Claude API (claude-sonnet-4-6)
    │  5단계 파이프라인: 각도 → 구조 → 글쓰기 → 후킹 → 검수
    │  플랫폼별 톤 분화: 티스토리(전문가) / 네이버(구어체)
    ▼
[Stage 3] SEO 최적화
    │  키워드 밀도 2~3%, 메타 타이틀 50~60자, H1 1개, H2 2개+
    │  FAQPage Schema 삽입, GEO 답변형 구조
    ▼
[Stage 4] 컴플라이언스 체크
    │  3단 레이어: 블랙리스트 → 수치 교차검증 → 리스크 스코어
    │  4단계 리스크: CRITICAL → HIGH → MEDIUM → LOW
    ▼
[Stage 5] 이미지 생성 & 삽입
    │  ★ 디자인팀 호출 필요 (개발팀 직접 수행 금지)
    │  글 내용 기반 자동 이미지 프롬프트 생성
    │  삽입 위치: H2 직전 + CTA 직전 + 본문 중간
    ▼
[Stage 6] 품질 게이트
    │  통합 품질 점수 (SEO 40점 + 컴플라이언스 40점 + 구조 20점)
    │  A등급(80+) + LOW 리스크 → 자동 발행
    │  그 외 → 수동 승인 (텔레그램)
    ▼
[Stage 7] 발행
    │  플랫폼별 Publisher 실행
    │  UTM 파라미터 자동 첨부
    │  발행 결과 로깅 + 알림
    ▼
[Stage 8] 모니터링
    GA4 Data API: 트래픽 + AI 유입 5종 UTM 추적
    SerpBear: 타겟 키워드 순위 일별 추적
```

### 3-2. ThreadAuto 패턴 재사용 매핑

| ThreadAuto 패턴 | 블로그 파이프라인 적용 |
|----------------|----------------------|
| `FiveStagePipeline` (angle→structure→writing→hooking→review) | Stage 2: AI 초안 5단계 체이닝 |
| `compliance_filter.py` 3단 레이어 | Stage 4: 보험 도메인 확장 |
| `fact_guard.py` 수치 허용목록 | Stage 4: 블로그 전용 단위 추가 (세/년/개월) |
| `quality.py` 자카드 유사도 | Stage 6: 중복 콘텐츠 검출 |
| `CronRunner` APScheduler | Stage 0: 스케줄링 엔진 |
| `publish_worker.py` retries 카운터 | Stage 7: 재시도 전략 |
| `CrossPublisher` 멀티플랫폼 | Stage 7: 티스토리 + 네이버 동시 발행 |
| `daily_queue.json` 큐 구조 | **SQLite로 교체** (로키 F-07 대응) |

### 3-3. ThreadAuto와의 구조적 차이 (로키 지적 반영)

```
카드뉴스 파이프라인:              블로그 파이프라인:
─────────────────────             ─────────────────────
짧은 콘텐츠 (슬라이드당 80자)  →  장문 콘텐츠 (2000~3200자)
병렬 생성 가능                 →  순차 섹션 생성 후 합치기
이미지 중심                    →  텍스트 구조 중심 (H2/H3/목차)
동일 포맷 (슬라이드)           →  글마다 구조 다름
42점 검수 기준                 →  블로그 전용 70점 기준
생성 30초                      →  생성 2~5분
```

**핵심 설계 결정**: 블로그는 **섹션 단위 분할 생성**(Section-by-Section Generation)으로 hallucination 누적 방지 (로키 F-11 대응)

---

## 4. 품질 게이트 상세 설계

### 4-1. SEO 자동 체크 임계값

```
키워드 밀도:
  - 2.0% 미만  → too_low (경고)
  - 2.0~3.0%   → optimal (통과)
  - 3.0~4.0%   → high (경고)
  - 4.0% 초과  → too_high (차단, 키워드 스터핑 의심)

메타 타이틀: 50~60자 optimal, 70자 초과 error (SERP 잘림)
메타 디스크립션: 150~160자 optimal, 300자 초과 error
H1: 정확히 1개 필수
H2: 최소 2개 (섹션 구분)
글 길이: 1,500자 미만 발행 불가, 3,000~5,000자 optimal
내부 링크: 2~10개, 외부 링크: 1~5개
이미지 alt 태그: 모든 이미지 필수
```

**한국어 키워드 밀도 공식**: `(키워드 등장횟수 × 키워드 글자수) / 전체 글자수`
- 어절 기반 아닌 글자 기반 (한국어 특성)

### 4-2. 컴플라이언스 체크 (보험 도메인 특화)

**Layer 1 — 절대 금지 (CRITICAL/HIGH 트리거)**

```python
# 잔여수수료 노출 금지 (금감원 2024 지침)
r"잔여\s*수수료\s*\d"
r"수수료\s*율?\s*\d+[\.\d]*%"
r"선지급\s*수수료"

# 수익 보장 표현 (보험업법 제95조 위반)
r"(연|월)\s*\d+(\.\d+)?%\s*(보장|확정|약속)"
r"무조건\s*(보장|지급|수령)"
r"원금\s*보장"

# 타사 비교 광고 (보험업법 제95조 제2항)
r"(삼성|한화|교보|현대|DB|메리츠|흥국)\s*(생명|화재|보험)보다"
r"타사\s*(대비|보다)\s*(저렴|유리|좋)"
```

**Layer 2 — 수치 교차검증**
- ThreadAuto fact_guard 확장: 블로그 전용 단위 추가 (세/년/개월/일)
- 잔여수수료 전용 선행 검사 레이어
- 모호한 수치 표현("약 ~", "수천", "여 ~") → HIGH 리스크 격상 (로키 F-08 대응)

**Layer 3 — 과장 표현 + 고지사항**
- 금지 과장 표현: "최고", "유일한", "반드시", "절대적으로", "완벽한", "대박"
- 고지사항 자동 삽입: "본 글은 정보 제공 목적으로 작성되었으며..."

### 4-3. 리스크 레벨별 처리

```
CRITICAL  → 즉시 폐기 + 운영자 알림
             트리거: 잔여수수료 노출, 블랙리스트 3건+
HIGH      → 수동 승인 필수 (텔레그램 전송)
             트리거: 블랙리스트 1~2건, 미검증 수치 3건+, SEO 오류 3건+
MEDIUM    → 자동 수정 후 자동 발행
             트리거: 과장 표현 1건, 미검증 수치 1~2건, 고지사항 누락
LOW       → 완전 자동 발행
             트리거: 모든 레이어 통과
```

### 4-4. 수동 승인 vs 완전 자동 기준

**수동 승인 필수 조건 (OR 연산)**:
1. 리스크 레벨 HIGH 이상
2. 민감 주제 포함: 변액보험, 실손 개정, 비과세, 소득공제, IRP, 퇴직연금
3. 신규 topic_id (화이트리스트 미등록)
4. 수치 5개 이상 포함
5. 외부 링크 3개 이상
6. 품질 점수 70점 미만

**완전 자동 발행 조건 (AND 연산)**:
- 품질 점수 80점 이상 (A등급)
- 리스크 레벨 LOW
- 화이트리스트 등록 topic
- 민감 주제 미포함

### 4-5. 통합 품질 점수 (0~100점)

```
SEO 점수 (40점):
  키워드 밀도 optimal    10점
  메타 타이틀 optimal     8점
  메타 디스크립션 optimal  7점
  헤딩 구조 적절           8점
  글 길이 optimal          7점

컴플라이언스 점수 (40점):
  블랙리스트 클리어       15점
  수치 검증 통과          15점
  과장 표현 없음           5점
  고지사항 존재            5점

구조/UX 점수 (20점):
  이미지 alt 완비          7점
  내부 링크 적절           7점
  외부 링크 적절           6점

등급: S(90+), A(80~89), B(70~79), C(60~69), F(<60)
```

---

## 5. 이미지 자동 생성 연동

> **디자인팀 호출 필요**: 이미지 생성 자체는 디자인팀(dispatch.py --team design) 범위.
> 개발팀은 호출 인터페이스와 삽입 로직만 설계.

### 5-1. 이미지 프롬프트 자동 생성

파이프라인에서 글 본문 분석 → 이미지 프롬프트 자동 생성:

```python
def generate_image_prompt(section: dict) -> str:
    """H2 섹션 내용으로 이미지 프롬프트 생성"""
    # 1. 섹션 핵심 키워드 추출
    # 2. 보험/금융 도메인 맥락 추가
    # 3. 디자인 스타일 가이드 적용
    return prompt
```

### 5-2. 이미지 삽입 위치 자동 결정

```
규칙 1: 첫 번째 H2 직전 — 메인 이미지 (썸네일 겸용)
규칙 2: 본문 중간 (1500자 전후) — 읽기 피로 완화용
규칙 3: CTA 직전 — 행동 유도 이미지
규칙 4: 이미지 없는 섹션이 연속 2개 이상이면 안 됨
```

### 5-3. 이미지 Fallback

이미지 생성 실패 시 (로키 F-06 대응):
1. **1차 Fallback**: 스톡 이미지 (Unsplash API, 키워드→영어 매핑 테이블)
2. **2차 Fallback**: 기존 이미지 풀에서 유사 주제 이미지 재사용
3. **3차 Fallback**: 텍스트 전용 발행 (품질 점수에서 이미지 점수 0점 처리, 70점 미만이면 수동 검토)

---

## 6. 스케줄링 설계

### 6-1. 발행 스케줄

```
주기: 주 1편 (12주 12편)
발행 시간: 화요일 또는 목요일 오전 9~10시 (검색 크롤링 활성 시간대)
플랫폼 순서: 티스토리 먼저 → 30분 후 네이버 (중복 감지 간격 확보)
```

### 6-2. 발행 한도 정책 (로키 F-10 대응)

```
초기 3개월: 하루 최대 1편 / 플랫폼당
안정화 후: 하루 최대 2편 / 플랫폼당
발행 간격: 최소 3시간
지터: ±15분 랜덤 (스팸 탐지 방지)
```

### 6-3. 기술 스택

```
스케줄러: APScheduler AsyncIOScheduler (ThreadAuto 검증 패턴)
큐 저장: SQLite (JSON 파일 대체, 로키 F-07 대응)
프로세스 관리: systemd service + Restart=always (SPOF 방지)
헬스체크: /health 엔드포인트 + UptimeRobot 외부 모니터링
```

---

## 7. 에러 핸들링 & 재시도 전략

### 7-1. 단계별 독립 에러 핸들링 (ThreadAuto 패턴)

각 Stage는 독립된 try/except. 실패해도 빈 컨테이너 반환으로 파이프라인 유지.

### 7-2. 재시도 전략

```
Claude API 장애:
  - Exponential backoff: 1초 → 2초 → 4초
  - 최대 3회 재시도
  - 3회 실패 시 해당 글 pending 상태 유지 + 운영자 알림
  - Circuit breaker: 연속 5회 실패 시 스케줄러 일시정지

플랫폼 발행 실패:
  - retries 카운터 기반 (ThreadAuto 패턴)
  - 최대 3회 재시도, 1분 간격
  - failed 상태 시 해당 글만 수동 발행으로 전환

이미지 생성 실패:
  - Fallback 체인 실행 (스톡 → 재사용 → 텍스트 전용)
  - 이미지 실패가 글 발행을 블로킹하지 않음
```

### 7-3. ghost pipeline 방지 (로키 F-05 대응)

```
발행 결과 검증:
  - 발행 API 응답에서 post_id 또는 URL 확인
  - 응답 없음 = 실패 처리 (성공 추정 금지)
  - 발행 후 해당 URL로 HTTP GET 확인 (200 응답 + 제목 매칭)

모니터링:
  - 일일 발행 건수 < 예상 건수 시 알림
  - 연속 0건 발행 2일 시 긴급 알림
```

---

## 8. 멀티플랫폼 중복 콘텐츠 전략 (로키 F-09 대응)

### 8-1. 플랫폼별 콘텐츠 차별화

```
티스토리 (주 블로그, canonical):
  - 전문가 톤, 데이터/분석 중심
  - 완전한 장문 (3000~5000자)
  - canonical URL 원본

네이버 블로그 (보조 채널):
  - 구어체, FAQ/경험담 중심
  - 요약본 (1500~2000자) + "자세한 내용은 [티스토리 링크]"
  - 최소 30% 이상 다른 표현으로 재생성
```

### 8-2. canonical 태그 전략

```html
<!-- 티스토리 (원본) -->
<link rel="canonical" href="https://incar-top.tistory.com/entry/원본-글-URL" />

<!-- 네이버 블로그 (요약본) -->
<!-- 네이버 블로그는 canonical 태그 직접 설정 불가 → 본문 내 원본 링크로 대체 -->
```

---

## 9. 모니터링 체계

### 9-1. 발행 성공/실패 알림

```
알림 채널: 텔레그램 (기존 cokacdir 인프라 활용)
알림 조건:
  - 발행 성공: 플랫폼별 URL + 품질 점수
  - 발행 실패: 에러 메시지 + 재시도 상태
  - 컴플라이언스 HIGH 이상: 즉시 알림 + 글 전문
  - 일일 요약: 발행/실패/대기 건수
```

### 9-2. SEO 점수 추적

```
도구: SerpBear (Docker 셀프호스팅, 무료)
추적 키워드: "인카금융 이직", "보험 정착지원금", "보험설계사 이직" 등
추적 주기: 일 1회
알림: 순위 10위+ 변동 시 텔레그램 알림
```

### 9-3. GA4 연동

```python
# GA4 Data API: AI 유입 5종 UTM 분리 추적
UTM_SOURCES = [
    "ai_chatgpt",     # ChatGPT 유입
    "ai_perplexity",  # Perplexity 유입
    "ai_gemini",      # Gemini 유입
    "ai_claude",      # Claude 유입
    "ai_naver_aio",   # 네이버 AI Overview 유입
]
```

---

## 10. 보안 설계

### 10-1. 인증 정보 관리 (로키 F-15, F-16 대응)

```
세션 파일: 파일 권한 0600, 웹 루트 외부 저장
API 키: 환경변수 분리, subprocess 호출 시 필요한 변수만 명시적 전달
OAuth 토큰: 암호화 저장 (keyring 라이브러리 검토)
```

### 10-2. subprocess 환경변수 격리

```python
# 안전한 subprocess 호출 패턴
safe_env = {
    "PATH": os.environ["PATH"],
    "HOME": os.environ["HOME"],
    # API 키는 포함하지 않음
}
subprocess.run(cmd, env=safe_env, ...)
```

---

## 11. Phase 3 PoC 실행 계획

### 11-1. MVP 스코프 (최소 구현 범위)

```
[PoC 범위]
1. 티스토리 Playwright 로그인 + 글 1편 자동 발행
2. Claude API로 글 1편 생성 (5단계 파이프라인 축소판)
3. fact_guard 수치 검증 통과 확인
4. SEO 점수 자동 산출 (seokar 또는 자체 로직)

[PoC 범위 외]
- 네이버 블로그 API 연동
- 이미지 자동 생성 (텍스트 전용으로 PoC)
- GA4/SerpBear 모니터링
- 멀티플랫폼 동시 발행
```

### 11-2. PoC Step-by-Step

```
Step 1: 환경 준비
  - 카카오 계정 신뢰 디바이스 등록 (고정 IP 확인)
  - Playwright + playwright-stealth 설치
  - 티스토리 세션 파일 최초 생성 (수동 로그인)

Step 2: 티스토리 자동 발행 테스트
  - 하드코딩된 테스트 글로 발행 테스트
  - 발행 후 URL 확인 자동화
  - 실패 시 스크린샷 캡처 + 에러 로깅

Step 3: Claude API 글 생성 테스트
  - weekly-calendar.md의 첫 번째 토픽으로 초안 생성
  - 5단계 파이프라인 → 3단계로 축소 (각도 → 글쓰기 → 검수)
  - 생성 시간, 글 길이, 품질 점수 측정

Step 4: 품질 게이트 테스트
  - fact_guard 수치 검증 실행
  - SEO 점수 산출
  - 컴플라이언스 체크 실행

Step 5: 통합 테스트
  - Step 3 생성 → Step 4 검증 → Step 2 발행
  - 전체 파이프라인 1회 실행 시간 측정
  - 성공/실패 로그 확인
```

### 11-3. 기술 스택 확정

```
언어: Python 3.10+
브라우저 자동화: playwright (1.40+), playwright-stealth
AI 생성: anthropic SDK (Claude claude-sonnet-4-6)
HTTP 클라이언트: httpx (async 지원)
스케줄링: APScheduler 3.x (AsyncIOScheduler)
큐 저장: SQLite3 (표준 라이브러리)
SEO 점수: seokar + 자체 보조 로직
수치 검증: ThreadAuto fact_guard 확장
테스트: pytest
타입 체크: pyright
코드 포매팅: black + isort
```

---

## 12. 로키 지적 사항 대응 요약

| ID | 지적 | 우선순위 | 대응 상태 |
|----|------|----------|-----------|
| F-01 | 카카오 2FA 강제 | P0 | PoC Step 1에서 검증 |
| F-07 | JSON race condition | P1 | SQLite로 교체 결정 |
| F-10 | 스팸 판정 | P0 | 발행 한도 정책 수립 (초기 1편/일) |
| F-04 | OAuth 갱신 실패 | P1 | 갱신 실패 시 발행 중단 + 알림 |
| F-05 | Claude 장애 ghost pipeline | P2 | Circuit breaker + 발행 검증 |
| F-08 | 모호 수치 우회 | P1 | HIGH 리스크 격상 규칙 추가 |
| F-09 | 중복 콘텐츠 패널티 | P1 | 플랫폼별 차별화 + canonical 전략 |
| F-11 | 장문 hallucination | P1 | 섹션 단위 분할 생성 |
| F-12 | 42점 기준 부적합 | P2 | 블로그 전용 70점 기준 신설 |
| F-13 | APScheduler SPOF | P2 | systemd + 외부 모니터링 |
| F-15 | 환경변수 노출 | P1 | subprocess env 격리 |
| F-16 | 세션 파일 탈취 | P0 | 0600 권한 + 암호화 저장 |

---

## 부록 A: ThreadAuto 확장 가능성 분석

### A-1. 직접 재사용 가능한 모듈

| 모듈 | 경로 | 재사용 방법 |
|------|------|-------------|
| fact_guard | `content/fact_guard.py` | fact_db.md를 블로그 도메인으로 교체 |
| compliance_filter | `content/compliance_filter.py` | 블랙리스트 정규식 확장 |
| quality (중복 검출) | `content/quality.py` | 자카드 threshold 조정 |
| CronRunner | `scheduler/cron_runner.py` | 스케줄 슬롯을 주간 블로그로 변경 |
| publish_worker (재시도) | `scheduler/publish_worker.py` | Publisher 클래스 교체 |

### A-2. 재설계 필요한 부분

| 항목 | ThreadAuto | 블로그 파이프라인 |
|------|-----------|------------------|
| 콘텐츠 길이 | 80~300자 | 2000~5000자 |
| 생성 방식 | 단일 프롬프트 | 섹션 분할 생성 |
| 검수 기준 | 42점 | 70점 |
| 큐 저장 | JSON 파일 | SQLite |
| 발행 간격 | 10분 | 3시간+ |
| 중복 방지 | 자카드 0.5 | 자카드 0.5 + canonical |

---

## 부록 B: Agent 미팅 5 Cycle 기록

### Cycle 1: API 리서치 + ThreadAuto 분석 + 초안 아키텍처
- **토르**: 티스토리 API 종료 확인, 네이버 writePost API 확인, WordPress/Ghost 대안 제시
- **프레이야**: ThreadAuto 10개 모듈 분석, 재사용 패턴 6개 추출
- **합의**: 티스토리는 Playwright, 네이버는 공식 API, 향후 WordPress/Ghost 확장

### Cycle 2: "3 Whys" 테스트
- **왜 Playwright인가?** → 공식 API 종료, 대안 없음
  - **왜 API가 종료됐나?** → 카카오 인수 후 자체 에디터 전략 전환
  - **왜 Playwright가 안전한가?** → 안전하지 않음. PoC에서 먼저 검증 필수.
- **왜 SQLite인가?** → JSON 파일은 동시성 미지원
  - **왜 Redis가 아닌가?** → 추가 인프라 부담, 단일 프로세스에 SQLite 충분
  - **왜 동시성이 문제인가?** → 워커가 큐를 읽고 쓰는 동안 충돌 가능
- **왜 70점 기준인가?** → 카드뉴스 42점은 블로그에 부적합
  - **왜 42점이 부적합한가?** → 카드뉴스는 짧은 텍스트, 블로그는 장문 구조 검증 필요
  - **왜 70점인가?** → SEO 40 + 컴플라이언스 40 + 구조 20, 최소 B등급

### Cycle 3: 로키 집중 공격
- 16개 실패 시나리오 도출
- P0 3건 (카카오 2FA, 스팸 판정, 세션 탈취)
- P1 7건, P2 4건, P3 2건
- "카카오 2FA 해결 안 되면 나머지 논의 무의미" — PoC 최우선 검증 항목으로 확정

### Cycle 4: 품질 게이트 + 모니터링
- **헤임달**: 105개 테스트 케이스 설계 (블로그 전용)
- SEO 임계값 확정 (키워드 밀도, 메타태그, 헤딩)
- 컴플라이언스 4단계 리스크 레벨 설계
- GA4 UTM 5종 + SerpBear 일별 순위 추적

### Cycle 5: 최종 합의
- **PoC 우선**: 카카오 2FA 해결 → 티스토리 발행 1건 → 전체 파이프라인
- **MVP**: 티스토리 단일 플랫폼, 텍스트 전용, 주 1편
- **기술 스택 확정**: Python 3.10+, Playwright, Claude claude-sonnet-4-6, APScheduler, SQLite
- **발행 한도**: 초기 1편/일, 안정화 후 2편/일

---

## 변경 이력

| 버전 | 일시 | 변경 내용 |
|------|------|-----------|
| 1.0 | 2026-03-26 | 초안 작성 (task-1084.1) |
