제2장 — ★ 4 페르소나 시스템 완성
COACH·INSIDER 활성화 + ⭐ E5 8 규칙 모두 작동 + supremacy 차단 자동 검증
📋 이 챕터의 목차
권4 제1장에서 Stripe 통합 1주차 완성. 누적 265.5h, 페이스 4h/일 정상. 이번 챕터 = ★ COACH·INSIDER 페르소나 활성화 → 4 페르소나 시스템 완성.
작업 (4h)
[Claude Code, Sonnet + medium]
"persona_prompts COACH·INSIDER 활성화 — 4 페르소나 시스템 완성.
요구사항:
1. supabase/migrations/0011_persona_v3.sql:
- persona_prompts INSERT:
· COACH v1 (권3 Day 77 작성, 110줄)
· INSIDER v1 + strict (권3 Day 86 강화, 140줄)
- is_active: TRUE (Phase 1.2 시점부터)
- prompt_version: 1
2. articles 테이블에 prompt_version FK 자동 추적
3. 4 페르소나 system prompt 모두 cache_control 적용:
- SHARED_SYSTEM_PROMPT (모든 페르소나 공통, 캐시 1)
- STAT-specific (캐시 2)
- OBSERVER-specific (캐시 3)
- COACH-specific (캐시 4)
- INSIDER-specific (캐시 5)
- 5 캐시 자리 = ★ ⭐ E5 [4] 4 페르소나 적용
4. CLAUDE.md §5 [4] 절대 준수"- supabase/migrations/0011_persona_v3.sql 적용 ✅
- persona_prompts 4 페르소나 모두 활성화 ✅
- STAT v2 + OBSERVER v2 + COACH v1 + INSIDER v1·strict ✅
- articles 테이블 prompt_version FK 자동 추적 ✅
- ⭐ E5 [4] cache_control 5 자리 적용 ✅
★ 시리즈 메타 가설 자리: 권1 제1장 SPEC v1 한 줄 정의 — "STAT·OBSERVER·COACH·INSIDER" 4 페르소나 — 가 운영 시작.
근거: Phase 1.2 = 구독 도입 + 프리미엄 페르소나 (COACH·INSIDER) 노출. SPEC v1 → SPEC v5.0 → 활성화 = 4단계 사이클 완성
대안: 4 페르소나 단계적 활성화 (COACH 먼저, INSIDER 나중) — 흐름 분산
결과: Sonnet 비용 약 1.7배 증가 추정 (Day 103 측정)
- Phase 1.0: 2 페르소나 cache 2 자리 (cache hit 92%)
- Phase 1.1: 2 페르소나 cache 2 자리 (19리그, cache hit 67%)
- ★ Phase 1.2: 4 페르소나 cache 5 자리 (shared + 4)
작업 (4h)
[Claude Code, Sonnet + medium] "4 페르소나 cron 통합 + 비용 추정. 요구사항: 1. workers/src/publish.rs: - analyze_match() 4 페르소나 모두 호출 (구독자 대상) - 무료 사용자 대상: STAT·OBSERVER 2 페르소나만 노출 - 4 페르소나 모두 발행 (DB INSERT) — 구독 시 즉시 노출 2. cron 영향: - 일 발행: 19리그 × 2 → 19리그 × 4 = 약 76 articles/일 - Sonnet 비용 추정: $1.20/일 → $2.00/일 (4 페르소나 = 1.7배 추정) - cache_control 5 자리 효과: cache hit 60%+ 안정 3. 비용 vs 광고 + 구독 수익 균형: - 운영비 (Sonnet $60 + Vultr $6) = $66/월 - 광고 수익 (Phase 1.2 시작 시점): $35/월 (구독자 광고 제거 시작) - 구독 수익 (첫 구독자 가설 5명): $25/월 - 합계 수익: $60/월 - ★ 균형 없음 — 첫 달 약자 손실 ($6) - ★ Day 121 G9 시점 구독자 누적 → 안정 흑자 가설"
- 19리그 × 4 페르소나 = 76 articles 발행 (목표 도달) ✅
- 자동 일관성 100% (4 페르소나 사실 일치) ✅
- 톤 키워드 비율: STAT 87% / OBSERVER 86% / COACH 81% / INSIDER 84% ✅
- Sonnet 비용: $1.95 (cache hit 62%) ✅
- Sentry crash-free 100% ✅
비용 균형 첫 측정: 일 비용 $1.95 (월 약 $58.50) — 광고 + 구독 (가설) = $60/월 → Day 121 G9 시점 안정 흑자 가설.
근거: shared 캐시 hit 강함 (모든 페르소나 공통) + 페르소나별 캐시 hit 약 (5분 TTL 안에서). 2 → 4 페르소나 = 단순 2배 아닌 1.7배 = cache_control 효과
대안: 페르소나 분리 cron (각각 cron) — TTL 5분 자주 미달 = cache miss ↑ → 2배+ 비용 위험
결과: Day 103 시점 균형 (수익 $60 = 비용 $60). 첫 구독자 도달 후 안정 흑자 (가설 검증 Day 121)
작업 (4h, ⭐ E5 [6])
[Claude Code, Sonnet + medium]
"⭐ E5 [6] 4 페르소나 자동 일관성 테스트 — 4 차원 검증.
요구사항:
1. tests/persona-consistency.test.ts 진화 (Phase 1.0 2 페르소나 → 4 페르소나):
- 같은 match_id 의 4 페르소나 articles 조회
- 4 차원 검증:
· 차원 1: 사실 일치 (home_team·away_team·score·xG·formation 등 일관)
· 차원 2: 페르소나별 톤 키워드 비율 ≥ 70% (4 페르소나 각각)
· 차원 3: canonical URL 분리 (4 슬러그 모두 다름)
· 차원 4: ⭐ E5 [8] 페르소나 supremacy 차단 (Day 105 작업)
2. fail 시 cron_pause + Slack 알림 + 실패 페르소나 명시
3. 5 시나리오 (Phase 1.0 5 시나리오 + 4 페르소나 추가):
· 정상 4 페르소나: PASS
· 사실 차이 (STAT xG 1.2, COACH xG 1.5): FAIL → cron_pause
· 톤 침범 (COACH가 STAT 키워드 80%): FAIL → cron_pause
· canonical 충돌: FAIL → cron_pause
· 환각 (INSIDER가 match_facts에 없는 사실 추가): FAIL → cron_pause"- 시나리오 1 (정상 4 페르소나): PASS ✅
- 시나리오 2 (사실 차이): FAIL → cron_pause + 실패 페르소나 명시 ✅
- 시나리오 3 (톤 침범): FAIL → cron_pause ✅
- 시나리오 4 (canonical 충돌): FAIL → cron_pause ✅
- 시나리오 5 (환각): FAIL → cron_pause ✅
Day 102~104 실제 76 articles × 3일 = 228 articles 검증 → 모두 정상 통과 (cron_pause 0회)
근거: 권1 제7장 ⭐ E5 8 규칙 [3]+[6] 결합 → 4 페르소나 환경에서 4 차원 의무. 한 차원만 통과하면 안 됨 (이중 안전망 + supremacy)
대안: 사실 + 톤 2 차원만 (Phase 1.0 패턴 그대로) — 4 페르소나 환경 supremacy 빈틈 위험
결과: 자동 검사 시간 약간 증가 (+0.4s/cron) — 운영 영향 없음
- 줍줍 (2 페르소나): 2 차원 검증 (사실 + 톤)
- TSV (4 페르소나): 4 차원 검증 (+ canonical + supremacy)
- 메타 원칙 (자동 검증 + cron_pause) 100% 동일
작업 (4h, ⭐ E5 [8])
[Claude Code, Sonnet + medium]
"⭐ E5 [8] 페르소나 supremacy 차단 자동 검증 — 1탄 v2 새 11장 8 규칙의 [8].
요구사항:
1. tests/persona-supremacy-check.test.ts (160줄):
- 4 페르소나 body 안에서 다른 페르소나 평가 표현 차단
- 정규식 패턴 (검출 + cron_pause):
· STAT 안에서 'OBSERVER 시각이 ~ 틀렸다' 등
· OBSERVER 안에서 'STAT가 ~ 무리한 통계' 등
· COACH 안에서 'STAT 통계만으로는 ~ 부족' 등 단정 표현
· INSIDER 안에서 다른 페르소나 평가 단정 제외
2. 허용 표현 vs 차단 표현:
[허용 OK]
- "STAT 시각으로는 ~, OBSERVER 시각으로는 ~" (각 시각 동등)
- "통계 분석은 ~ 보여주지만 관전 포인트는 ~"
- "각 페르소나 시각이 모두 유효합니다"
[차단 ★]
- "STAT가 단순 숫자만 보고 틀렸다"
- "OBSERVER가 너무 감성적이다"
- "COACH 시각이 진짜 깊은 분석"
3. fail 시 cron_pause + 실패 페르소나 + 위반 문구 Slack 알림
4. 시뮬 fail 케이스 5건 검증"시뮬 fail 5 시나리오:
- STAT body에 'OBSERVER 시각 틀렸다' 강제 → 차단 ✅
- COACH body에 'STAT 통계만으로 부족' 강제 → 차단 ✅
- INSIDER body에 'COACH 분석이 진짜 깊다' 강제 → 차단 ✅
- STAT body에 'OBSERVER 시각으로는 ~' (허용) → 통과 ✅
- COACH body에 '각 페르소나 시각 모두 유효' (허용) → 통과 ✅
Day 102~105 실제 304 articles × supremacy 검증 → 모두 정상 통과 (cron_pause 0회)
| 규칙 | 상태 | 작동 시점 |
|---|---|---|
| [1] 사실 단일 출처 | ✅ | Phase 1.0 |
| [2] 톤 분리 | ✅ | Phase 1.0~ |
| [3] 키워드 비율 ≥ 70% | ✅ | Phase 1.0 |
| [4] LLM 4 시스템 프롬프트 | ✅ | ★ Day 102 |
| [5] Position C 일관 노출 | ✅ | Phase 1.1 |
| [6] 자동 일관성 테스트 | ✅ | ★ Day 104 4 차원 |
| [7] 환각 방지 | ✅ | Phase 1.0~ |
| [8] ★ supremacy 차단 | ✅ | ★ Day 105 |
## Phase 1.2 Day 106 — ★ 토요일 작업 X ★ [E2 의식] - 토요일 X (권4 2주차) - cron 결과 5분 점검만 [자동 cron Day 102~106 5일 결과] ✓ 4 페르소나 일 평균 76 articles 발행 ✓ 자동 일관성 100% (4 차원 검증) ✓ supremacy 차단 hit 0건 ✓ ⚖️ Position C 다층 보호 56일 무사고 ✓ Sentry crash-free 100%
작업 (4h)
[Claude Code, Sonnet + medium]
"4 페르소나 첫 발행 종합 검증 — 사용자 노출 흐름.
요구사항:
1. 첫 사용자 시뮬:
- 무료 사용자: STAT·OBSERVER 2 페르소나 노출
- 가입 (구독 X): STAT·OBSERVER 2 페르소나 노출 (광고 무제한)
- 구독자: 4 페르소나 모두 노출 + 광고 제거
2. UI 흐름 검증:
- /matches/{id} 메인 페이지
- 무료/구독 상태별 4 페르소나 link 분리:
· STAT (모든 사용자) ✅
· OBSERVER (모든 사용자) ✅
· COACH (구독자만, 무료에게는 '프리미엄 잠금') ✅
· INSIDER (구독자만, 무료에게는 '프리미엄 잠금') ✅
3. 무료 사용자 → COACH·INSIDER 클릭 시 → 구독 유도 페이지
4. CLAUDE.md §5 [5] ⚖️ Position C 일관 (구독 페이지에도 '베팅·픽 X')"근거: ⚖️ Position C 의 5 차원 + 새 페이지 = 외부 노출 ⭐ E5 [5] 일관 의무. 구독 유도 = 첫 사용자 진입 시점 = 메시지 일관.
대안: 구독 유도 페이지 ⚖️ E1 제외 — 변호 논리 일관성 약화
결과: 구독 유도 페이지 본문 끝 짧은 disclaimer 노출
## Phase 1.2 Day 108 — 2주차 회고
### 산출물 (Day 102~105·107, 5일 작업)
1. 0011_persona_v3.sql (4 페르소나 활성화)
2. workers/publish.rs 4 페르소나 호출 통합
3. tests/persona-consistency.test.ts 4 페르소나 진화 (240줄)
4. tests/persona-supremacy-check.test.ts (160줄, ⭐ E5 [8])
5. /matches/{id} 메인 페이지 4 페르소나 link 분리
총: 5 파일 + 1 SQL + 4 페르소나 시스템 완성
### Sonnet 비용 추세 (4 페르소나 영향)
- Phase 1.0 (5리그 2 페르소나): $0.025/일
- Phase 1.1 (19리그 2 페르소나): $1.20/일
- ★ Phase 1.2 (19리그 4 페르소나): $1.95/일 (월 $58.50)
- cache hit 62% 유지 (5 자리 효과)
### 다음 3주차 (Day 109~115) 목표
- Day 109: 구독 상태별 콘텐츠 분리 (RLS)
- Day 110: 마감 D-1 알림 시스템 (구독자 무제한)
- Day 111: 사용자 인증 흐름 최종 검증
- Day 112: 토요일 X
- Day 113~114: G9 점검
- Day 115: ★ G9 PASSED
목표 누적: Day 115 끝 약 305h
[누적] 285.5h + Day 108 (1h 회고) = 286.5hgit add supabase/migrations/0011_persona_v3.sql workers/src/publish.rs \ tests/persona-consistency.test.ts tests/persona-supremacy-check.test.ts git commit -m "Phase 1.2 Day 102~108: ★ 4 페르소나 시스템 완성 + ⭐ E5 8 규칙 모두 작동 + 자동 일관성 4 차원"
이번 챕터에서 ⭐ E5 8 규칙 모두 등장 — 권1 제7장 SPEC 본문이 운영 데이터 사실화.
8 규칙 등장 표 (시리즈 누적)
| 규칙 | 작동 시점 | 단계 |
|---|---|---|
| [1] 사실 단일 출처 | 권2 Day 1~3 | Phase 1.0 (DB schema + match_facts) |
| [2] 톤 분리 | 권2 Day 5 | Phase 1.0 (Agent Teams) |
| [3] 키워드 비율 ≥ 70% | 권2 Day 18 | Phase 1.0 (자동 측정) |
| [4] LLM 시스템 프롬프트 | ★ 권4 Day 102 | Phase 1.2 (4 페르소나 cache 5 자리) |
| [5] Position C 일관 노출 | 권3 Day 24·43·47·48 | Phase 1.1 (4자리) |
| [6] 자동 일관성 테스트 | 권2 Day 10 + ★ 권4 Day 104 | Phase 1.0 → 1.2 (4 차원 진화) |
| [7] 환각 방지 | 권2 Day 8 | Phase 1.0 (LLM 분류) |
| [8] ★ supremacy 차단 | ★ 권4 Day 105 | Phase 1.2 (4 페르소나) |
| 도메인 | 페르소나 수 | 규칙 수 | 자동 검증 차원 |
|---|---|---|---|
| 줍줍 | 2 (사장님·시민) | 7 | 2 차원 (사실 + 톤) |
| TSV | 4 | 8 (+ supremacy) | 5 차원 (+ canonical + supremacy) |
★ 메타 원칙 100% 동일, 도메인 본질 (페르소나 수) 따라 진화의 깊이 입증.
📘 권4 제2장 정리
핵심 한 줄: Day 102~108 = ★ COACH·INSIDER 활성화 + 4 페르소나 시스템 완성 + ⭐ E5 8 규칙 모두 작동 ✅.
- 2주차 산출물 (5 파일 + 1 SQL): 0011_persona_v3.sql (4 페르소나 활성화) / workers/publish.rs 4 페르소나 호출 / persona-consistency.test.ts 4 차원 진화 (240줄) / persona-supremacy-check.test.ts (160줄, ⭐ E5 [8]) / /matches/{id} 페르소나 분리 노출
- ★ ⭐ E5 8 규칙 모두 작동 ✅: [4] cache 5 자리 (Day 102) + [6] 4 차원 진화 (Day 104) + [8] supremacy 차단 (Day 105) = 1탄 v2 권1 제7장 본문 → 운영 데이터 사실화
- Sonnet 비용: Phase 1.0 $0.025/일 → Phase 1.1 $1.20/일 → Phase 1.2 $1.95/일
- 누적: 286.5h
- ★ 두 도메인 ⭐ E5 진화 일관 패턴 ✅ (줍줍 7 → TSV 8 규칙)
- 다음 장: 권4 제3장 — Day 109~115 (3주차, 분리 노출 + 알림 + ★ G9 PASSED)
★ ⭐ E5 8 규칙 모두 완성 — 1탄 v2 권1 제7장에서 박힌 8 규칙 본문이 시리즈 약 90~110일 동안 모두 운영 데이터 사실화 ✅. 권2 Day 1·5·18 + 권3 Day 24·43·47·48 + 권4 Day 102·104·105 = 8 자리 누적.
★ ⭐ E5 [8] 페르소나 supremacy 차단 (Day 105) — TSV 신규 규칙. 4 페르소나 환경에서 "각 시각 모두 유효, 우월·열등 없음" 본질 보호. 자동 검증 + 시뮬 fail 5 시나리오 모두 의도한 동작.
다음 장에서 3주차 (Day 109~115) — 구독 상태별 분리 노출 + 마감 D-1 알림 + ★ G9 PASSED. Phase 1.2 첫 게이트 + 첫 구독자 환경 prep.