📑 이 챕터에서 다룰 내용
권1 제6장에서 PLAN v2.1 완성 + ⭐ E2 등장. 이제 권1 (Phase 0) 마지막 챕터입니다. 이 한 챕터에서 세 가지를 동시에 진행합니다:
| 📚 사전 지식 체크 | 🎯 이 장의 목적 | ✅ 완료 후 결과물 |
|---|---|---|
| SPEC v4 + PLAN v2.1 / 1탄 v2 새 8·11장 + 부록 H-3·H-5 / 2탄 v2 권1 제7장 (줍줍 Two-Tab 7 규칙) 인지 | REVIEW 15가지 + 3단계 판정 + 75분 패치 + READY: YES + CLAUDE.md 10 섹션 + ⭐ E5 4 페르소나 SSOT 8 규칙 | REVIEW.md (READY: YES) + CLAUDE.md (10 섹션 200줄) + git commit + Phase 1.0 BUILD 진입 준비 |
/model claude-opus-4-6 /effort high SPEC.md v4 + PLAN.md v2.1을 읽고 REVIEW.md를 작성해줘. 1탄 v2 새 8장 8-1 절의 15가지 항목을 각각 PASS / WITH-CONDITIONS / FAIL 로 판정 + 이유 명시. 판정 기준: - PASS — 명확 통과 - WITH-CONDITIONS — 부분 + 조건 만족 시 PASS 전환 - FAIL — SPEC 또는 PLAN 수정 필요 종합 판정: - FAIL 0건 + WITH-CONDITIONS ≤ 3건 → READY: YES - 그 외 → READY: NO
Claude (Opus) 가 생성한 REVIEW.md 1차 결과
[기본 10가지]
- ⭕ Phase 1.0 수익화: PASS — 의도적 무수익 + 변호 논리 (가설 검증 본질)
- ⭕ Phase 1.0 배포 가능: PASS — G5 Day 36 일 10글 자동 발행 검증
- ⭕ DB RLS 설정: PASS — Phase 1.0 인증 X (정적), Phase 1.2+ Stripe 시점 본격
- ⭕ API 키 노출 방지: PASS — Anthropic + TheSportsDB 모두 .env (CLAUDE.md §3)
- ⭕ 기술 스택 일관: PASS — Rust + Next.js + Oracle 단일
- ⚠️ N+1 쿼리: WITH-CONDITIONS — articles 조회 시 matches JOIN 시 N+1 가능성. articles에 match 메타 정보 캐시 컬럼 (denormalized) 추가 시 PASS 전환.
- ⭕ Phase 1.0 변경 파일 30개 이하: PASS — Rust 18 + Next.js 8 + DB 4 = 30
- ⭕ 외부 연동 위치 명확: PASS — Rust workers (cron) + Next.js API routes
- ⚠️ 에러 처리: WITH-CONDITIONS — Sentry 통합 명시되지만 구체 시점 부재. PLAN G2 (Day 14)에 "Sentry 통합 + crash-free rate 측정 시작" 명시 시 PASS 전환.
- ⭕ 환경변수 분리: PASS — .env.local + Vultr secrets
[1탄 v2 추가 5가지]
- ⭕ 게이트 측정 가능: PASS — 5게이트 모두 숫자 DoD (★ Day 14 CRITICAL 임계값 명시)
- ⭕ 리스크 등록부 R1~R12: PASS — 영향·확률·완화·트리거 모두
- ⭕ R4 (1인 번아웃) 일급 객체: PASS — 5 의식 + 4 트리거 + 12개월 강화
- ⭕ SPEC v4 두 검토자: PASS — 권1 제4장 12건 (Claude 시뮬 + Gemini 2차)
- ⚠️ 12건 모두 반영: WITH-CONDITIONS — 9건 SPEC v4 즉시 + 3건 PLAN으로. PLAN G2·G3에 G-5 (Sentry 측정 분모) + G-6 (Cloudflare WAF 룰) + G-7 (Oracle 4GB 임계값) 모두 명시 시 PASS 전환.
종합 판정 (1차): PASS 12건 + WITH-CONDITIONS 3건 + FAIL 0건 → WITH-CONDITIONS 한도 = 3건 → 정확히 한도 내. READY: YES (조건부).
3건 모두 "BUILD 후 발견 시 50시간 재작업" 결함입니다:
- N+1 쿼리 (DB 성능 사고 12개월 운영 시 누적)
- Sentry 시점 명시 부재 (운영 사고 시 대응 못함)
- 12건 일부 미반영 (SPEC↔PLAN 정합성)
REVIEW가 75분 패치로 막은 것 = 결함 비용의 법칙 (배리 봄) 100배 절감입니다.
1탄 v2 새 8장 8-4 절의 "PASS 12 + W-C 3" 패턴과 일치합니다. 줍줍 (PASS 12 + W-C 3) + TSV (PASS 12 + W-C 3) — 두 도메인에서 동일 패턴 입증.
git add SPEC.md PLAN.md git commit -m "PLAN v2.2 + SPEC v4.1: 75분 W-C 패치 (P1 캐시 + P2 Sentry + P3 PLAN 3 명시)"
| 항목 | 1차 → 2차 |
|---|---|
| 6. N+1 쿼리 | W-C → PASS (articles 캐시 컬럼 명시) |
| 9. 에러 처리 | W-C → PASS (Sentry G2 명시) |
| 15. 12건 모두 반영 | W-C → PASS (G-5·G-6·G-7 PLAN G2·G3 모두 명시) |
| 그 외 | 변동 없음 |
종합 판정 (2차): PASS 14건 + WITH-CONDITIONS 1건 + FAIL 0건
남은 W-C 1건: "Sentry crash-free rate 측정 시작 후 7일 무장애 관측" — Day 14~G4 자연 진행. READY 진입을 막지 않습니다.
✅ READY: YES (FAIL 0 + W-C 1 ≤ 3)
git add REVIEW.md git commit -m "REVIEW.md: READY YES (PASS 14 + W-C 1) + 75분 패치 적용"
이게 5확장 E5의 등장 자리입니다. 줍줍의 "Two-Tab Content SSOT 7 규칙"과 비교 — TSV는 4 페르소나 → 8 규칙이 됩니다.
TSV E5의 삼중 안전장치 (1탄 v2 부록 H-5 일치)
| 안전장치 | 구체 |
|---|---|
| ① SSOT 인터페이스 | lib/match_facts.ts (4 페르소나 모두 같은 사실 참조) |
| ② 시스템 프롬프트 환각 방지 | "match_facts에 있는 사실만 사용 / 추정 X / ~으로 알려졌다" |
| ③ 자동 일관성 테스트 | tests/persona-consistency.test.ts — 같은 경기 4 페르소나 노출 시 사실 일치 + 톤 키워드 70%+ 자기 |
4 페르소나 SSOT 8 규칙 (CLAUDE.md §5)
원칙: 같은 "경기 사실"을 4 페르소나가 다른 톤으로 노출하되, 사실 자체는 단일 출처 (lib/match_facts.ts) 에서 받습니다.
⭐ 두 도메인 SSOT 비교 — 일관 패턴 + 도메인 본질 차이
| 자리 | 줍줍 (Two-Tab 7 규칙) | TSV (4 페르소나 8 규칙) |
|---|---|---|
| 사실 단일 출처 | benefits 테이블 | lib/match_facts.ts |
| 톤 분리 | 사장님·시민 (2) | STAT·OBSERVER·COACH·INSIDER (4) |
| LLM 분리 | 두 시스템 프롬프트 | 4 시스템 프롬프트 |
| ⚖️ E1 외부 노출 | 4자리 (E1 결정 ① + ②) | 4자리 (Position C) |
| 자동 일관성 테스트 | 5/5 통과 | 사실 + 톤 키워드 70%+ |
| 환각 방지 | "JSON 외 X, 추정 X" | "match_facts만, ~으로 알려졌다" |
| ★ 페르소나 supremacy 차단 | (없음, 2 페르소나는 단순) | ★ 신규 (4 페르소나 동등성 보장) |
① SSOT + ② 환각 방지 + ③ 자동 테스트 = 메타 원칙 동일. 도메인 본질 차이 (2 페르소나 vs 4 페르소나) 로 7 규칙 (줍줍) → 8 규칙 (TSV).
규칙 [8] 의 가치: TSV는 4 페르소나에서 "어느 게 맞아?" 의문이 발생할 수 있어요. 한 페르소나가 다른 페르소나를 "틀렸다" 단정하면 다관점 본질 손상. 규칙 [8]이 이를 차단합니다.
/model claude-opus-4-6 /effort high SPEC.md v4.1 + PLAN.md v2.2 + BUILD.md 7 entry를 읽고 CLAUDE.md를 10 섹션으로 완성. 1탄 v2 새 11장 11-2 템플릿 따름. 특히 §5 Project-Specific Rules에는: - ⚖️ Position C 결정 한 줄 요약 - ⭐ E5 4 페르소나 SSOT 8 규칙 - E4 LogOnTable 패턴 명시 200줄 이하 유지.
# TotalSportsView (TSV)
기술 스택: Rust (Axum) + Next.js 14 + PostgreSQL + Oracle Free Tier
상태: Phase 0 Day 7 완성 / 누적 19h / 다음 게이트 G1 D-7
§1 Project Overview: 5~19 스포츠 리그 다관점 분석 자동 미디어 플랫폼. 페르소나: STAT·OBSERVER (Phase 1.0) → COACH·INSIDER (Phase 1.2+). 핵심 가치: ⚖️ Position C — "분석 미디어, 베팅·픽 X"
§2 Tech Stack: Rust + Axum + SQLx + Tokio / Next.js 14 App Router / PostgreSQL (Oracle Free Tier 4GB) / Claude Sonnet 4.6 + cache_control / TheSportsDB → SportsRadar / Vultr + Cloudflare WAF / Sentry
§3 Critical Constraints: Cargo.lock 직접 수정 X / API 비밀 키 코드 노출 X / 요청하지 않은 기능·파일 수정 X / ⚖️ Position C 결정 위반 X (베팅 link·odds 변환·픽 추천·"승리 확률 N%" 단정·베팅 광고 차단 키워드 11개)
§4 Code Style: Rust rustfmt + clippy 경고 0개 / TypeScript prettier + ESLint / 함수 길이: Rust 50줄 / TS 30줄 이하
§5 Project-Specific Rules ★: E5 4 페르소나 SSOT 8 규칙 (위 7-4절 전체)
§6 File Structure: src/workers/ (Rust cron) / src/lib/match_facts.ts (⭐ SSOT) / tests/persona-consistency.test.ts (⭐ E5 [6]) / tests/position-c-check.test.ts (⚖️ E1 [5])
§7 Common Commands: cargo run / npm run dev / npm test / 모델 전환 (/model claude-opus-4-6 + /effort high → SPEC·PLAN·REVIEW·Day 14) / 커스텀 (/daily-review · /gate-check · /spec-evolve · /day14-eval)
§8 Forbidden Patterns: 프론트엔드 코드 직접 process.env X / 페르소나 prompt에 "이긴다/진다" 단정 X / "픽"/"추천"/"확률 N%" 표현 X / 한 페르소나가 다른 페르소나를 "틀렸다" 단정 X
§9 Compliance Checklist: 변경할 파일 목록 명시 / 절대 금지 사항 위반 X / Rust clippy 0개 / 타입 명시·에러 처리 있음 / 4 페르소나 SSOT 8 규칙 준수 / LogOnTable 트레이스 작성 의도
§10 Current State: Phase 0 Day -1~7 모두 완성 ✅ / 다음: Phase 1.0 BUILD Day 1 (권2 시작) / 누적: 19h / R4 트리거 60h 여유 41h
총 약 200줄. CLAUDE.md 10 섹션 완성.
git add CLAUDE.md git commit -m "CLAUDE.md 10 섹션 완성: ⚖️ Position C + ⭐ E5 4 페르소나 SSOT 8 규칙"
5파일 점검 (1탄 v2 새 11장 11-5 절)
| 파일 | 분량 | 상태 | E1~E5 |
|---|---|---|---|
| SPEC.md | 18KB | ✅ v4.1 | E1 (Position C 5 차원) + 측정 메트릭 |
| PLAN.md | 16KB | ✅ v2.2 | E2 3 형태 + R4 12개월 강화 |
| REVIEW.md | 5KB | ✅ READY: YES | E3 12건 4+6+2 (1·2차) |
| BUILD.md | 7KB | ✅ Day -1~7 entry | E4 8 트레이스 |
| CLAUDE.md | 7KB (200줄) | ✅ 10 섹션 | E5 4 페르소나 SSOT 8 규칙 |
| 합계 | 53KB |
5확장 점검 — 5/5 모두 ✅
| 확장 | 등장 챕터 | 핵심 데이터 |
|---|---|---|
| ⚖️ E1 회색지대 | 권1 제3장 | Position C 단일 결정 5 차원 (4단계 풀) |
| ★ E2 1인 페이스 | 권1 제6장 | 옵션 C (3일 연장) + 5 의식 + 12개월 강화 |
| ⭐ E3 두 검토자 | 권1 제2·4장 | 12건 4+6+2 패턴 두 도메인 일관 입증 |
| ⭐ E4 LogOnTable | 권1 제0~7장 매 entry | 8 트레이스 |
| ⭐ E5 콘텐츠 SSOT | 권1 제7장 (본 장) | 4 페르소나 SSOT 8 규칙 + 삼중 안전장치 |
5확장 전부 등장 완료. 권1 (Phase 0)에서 모든 메타 원칙이 데이터로 박혔습니다.
누적 시간 점검 — E2 R4 트리거
| Day | 작업 | 시간 |
|---|---|---|
| Day -1 | 이름 + 5파일 빈 껍데기 + Position C 인식 | 0.5h |
| Day 1 | SPEC v1 | 1.5h |
| Day 2 | Gemini 1차 + SPEC v2 | 2h |
| Day 3 | E1 Position C + SPEC v3 | 3h |
| Day 4 | 두 검토자 + SPEC v4 | 2.5h |
| Day 5 | PLAN v1 + 시간 갭 | 4h |
| Day 6 | PLAN v2.2 + R4 | 3h |
| Day 7 | REVIEW + 75분 패치 + CLAUDE.md 10 + E5 | 4.5h |
| 권1 (Phase 0) 누적 | 21h |
R4 트리거 60h/4주 여유: 39h 여유.
| 도메인 | 권1 (Phase 0) 누적 | R4 여유 |
|---|---|---|
| 줍줍 | 21h | 39h |
| TSV | 21h | 39h |
정확히 동일 = 5파일+ Phase 0 작업 부담이 도메인을 가리지 않습니다. 1탄 v2 메타 원칙의 "두 도메인 일관" 입증의 6 번째 자리 ✅.
⭐ 두 도메인 일관 패턴 6 자리 완성 ✅
| # | 자리 | 줍줍 | TSV | 일관 |
|---|---|---|---|---|
| 1 | 권1 제0장 — 이름·회색지대 인식 | 4 요소 + 2건 (분리) | 4 요소 + 1건 (통합 5 차원) | ✅ 형식 |
| 2 | 권1 제1장 — SPEC v1 | Opus + 7항목 + 4테이블 + 6 불완전 | Opus + 7항목 + 3테이블 + 6 불완전 | ✅ |
| 3 | 권1 제2장 — Gemini 1차 | 6건 (5+1) + 4+2+0 | 6건 (5+1) + 4+2+0 | ✅ |
| 4 | 권1 제4장 — 두 검토자 | 12건 (4+6+2) + 9 즉시 + 3 PLAN | 12건 (4+6+2) + 9 즉시 + 3 PLAN | ✅ |
| 5 | 권1 제6장 — PLAN 시간 갭 | +32h → 옵션 C (73일) | +21h → 옵션 C (36일) | ✅ |
| 6 | 권1 제7장 — REVIEW 75분 + Phase 0 누적 | PASS 12+W-C 3 → 14+1 + 21h | PASS 12+W-C 3 → 14+1 + 21h | ✅ |
1탄 v2 메타 원칙이 "한 도메인 가설" → "두 도메인 사실" 데이터 완전 입증.
권1 (Phase 0) 끝 = 5파일+ 체계 완전 가동 + 5확장 5개 모두 등장 + READY: YES + Phase 1.0 BUILD 시작 준비.
Phase 0 Day 7 (권1 마지막)
[계획] REVIEW + 75분 패치 + CLAUDE.md 10 섹션 + ⭐ E5
[실행]
- REVIEW 1차: PASS 12 + W-C 3 → 75분 P1·P2·P3 패치 → 2차 PASS 14 + W-C 1
- READY: YES 받음 (FAIL 0 + W-C 1 ≤ 3)
- CLAUDE.md 10 섹션 200줄 완성 — 4 페르소나 SSOT 8 규칙
- /clear 검증: 5파일 + 5확장 위치 즉시 답 ✅
[LogOnTable 트레이스]
- 결정: ⭐ E5 4 페르소나 SSOT 8 규칙 — CLAUDE.md §5
- 근거: TSV 4 페르소나 (STAT·OBSERVER·COACH·INSIDER) 다관점 본질 = E5 적용 대상 + 줍줍 (2 페르소나 7 규칙) → TSV (4 페르소나 8 규칙) 의 페르소나 supremacy 차단 추가 규칙 [8]
- 대안: 줍줍 7 규칙 그대로 사용 — 페르소나 supremacy 발생 위험 (4 페르소나에서 "어느 게 맞아?" 의문)
- 부작용: 자동 일관성 테스트 분량 증가 (사실 + 톤 키워드 70% + canonical URL = 3 차원 검증)
[권1 (Phase 0) 누적] 21h — R4 60h 트리거 39h 여유 (줍줍과 동일)
[권1 회고]
- 5확장 5/5 모두 등장 ✅
- 5파일+ 체계 완전 가동 ✅
- 두 도메인 일관 패턴 6 자리 완성 ✅
- 1탄 v2 메타 원칙 8개 모두 데이터 입증 (Phase 0 단계):
5파일+ 사이클 7단계 / 의도적 불완전 v1 / 정직한 분류 / 12건 4+6+2 패턴 / WITH-CONDITIONS 75분 패치 / 시간 갭 옵션 C / E5 SSOT 시스템 / R4 자동 보호 - 다음 권 (권2 Phase 1.0 BUILD) 진입 준비 완료
git add BUILD.md git commit -m "권1 (Phase 0) 완성: 5파일+ 5확장 5/5 + READY YES + 두 도메인 일관 6 자리" git tag v0.1-phase0-completed
- 1️⃣ REVIEW READY: YES: PASS 12+W-C 3 → P1·P2·P3 (15·5·55분) → PASS 14+W-C 1 — 두 도메인 동일 패턴
- 2️⃣ ⭐ E5 4 페르소나 SSOT 8 규칙: 삼중 안전장치 (SSOT + 환각 방지 + 자동 테스트) + 규칙 [8] 페르소나 supremacy 차단 (TSV 신규)
- 3️⃣ CLAUDE.md 10 섹션 200줄: 5확장 모두 각 섹션에 박힘
- 4️⃣ 5파일+ 사이클 완성: 단계 ①~⑦ 전부 완료 (53KB)
- 5️⃣ 5확장 5/5 모두 ✅: E1(제3장)·E2(제6장)·E3(제2·4장)·E4(매 entry)·E5(본 장)
- 6️⃣ 두 도메인 일관 패턴 6 자리 완성 ✅: 줍줍·TSV 두 도메인 6 자리 모두 동일 패턴
- 7️⃣ 권1 (Phase 0) 누적 21h / R4 트리거 39h 여유 (줍줍과 정확히 동일)
- 8️⃣ 다음 권: 권2 — Phase 1.0 BUILD Day 1~36. G1 (Day 7) TheSportsDB 인증 + 5리그 시드
권1 (Phase 0) 완전 마무리 — REVIEW READY: YES + CLAUDE.md 10 섹션 + ⭐ E5 + 두 도메인 일관 패턴 6 자리 완성 ✅.
21시간의 투자로 만들어진 자산: ⚖️ E1 Position C 5 차원 결정 / ★ E2 옵션 C (36일) + 5 의식 + 12개월 강화 1 의식 / ⭐ E3 두 검토자 12건 (4+6+2 패턴 두 도메인 일관) / ⭐ E4 8 LogOnTable 트레이스 / ⭐ E5 4 페르소나 SSOT 8 규칙.
이게 Phase 1.0 BUILD 36일 (24 가용 영업일) 의 토대입니다. 권2에서 Phase 1.0 BUILD를 만나뵙겠습니다.
페이지를 넘기시지요.