Event Analysis Team · Release Note

v5.0.0 — 17-Phase
Newsroom Pipeline

텔레그램에서 사건 한 줄을 받으면, 신문사 데스크처럼 사실 수집 → 분석 설계 → 집필 → 차트 검수 → 데스크 게이트를 거쳐 발행한다. v4.5.7 의 단일 호출 모델 위에 신문사형 검수 계층 14개를 외과적으로 이식했다.

VERSION v5.0.0 Pass rate 70.1% → 88.9% 17 Phase 9 Method opt-in V5 flags 2026-05-05
The Shift

왜 v5.0.0 인가

v4.5.7 까지 시스템은 "한 번의 LLM 호출이 모든 걸 결정" 하는 단일 작가 모델이었다. 작가가 사실 수집·분석 설계·문장 작성·차트 데이터 emit·결론까지 한 호흡으로 처리. 빠르고 저렴하지만, 결함이 한 곳에 누적되면 *발견·차단할 사람이 없었다*.

v5.0.0 의 변화는 단순하다. 한 명의 작가편집장 + 분석 디자이너 + 차트 비평가 + 데스크 편집자 라는 여러 역할로 분리하고, 각자에게 *결정적 판정 권한* 을 부여했다. 분석가가 좋은 문장을 써도, 차트가 사실과 어긋나면 데스크가 KILL 한다. 사용자에게 도달하는 보고서는 *모든 게이트를 통과한* 것뿐이다.

v4.5.7 — Tier 4 단일 작가

  • 한 번의 LLM 호출이 분석 + 집필 + 차트 모두
  • 분석 방법론 자동 결정 — 검증 없음
  • 차트 종류·데이터 — composer 임의 선택
  • 결론·시나리오 — 모순 봉합 가능
  • 발행 전 결정적 게이트 0
  • 사용자 도달 보고서 = LLM 출력 그대로

v5.0.0 — 17-Phase Newsroom

  • 분석 설계 → 집필 → 차트 → 데스크 → 발행 분리
  • 9종 method 명시 라우팅 (ResearchDirector)
  • 16종 차트 등록제 + 4중 게이트
  • 모순은 봉합 금지, 명시 강제
  • 11 Hard fail + 5 Soft fail 결정적 게이트
  • publish / hold / KILL 3-결정 분리
Master Plan

4-Tier 17-Phase

REFACTOR_V5_PLAN.md 의 마스터 플랜. 하부 계층부터 상부 계층 순으로 빌드 — 토대 없이 위층 안 짓는다 (Plan §0.3 단계 도약 금지).

TIER 1

토대 — Baseline + 측정 framework

v4.5.7 baseline 정합성 회복, 6-tier State 모델, 회귀 테스트 17종 + Golden Prompt 20개.

Phase 0 SSOT Repair Phase 0B Golden Eval Phase 0C State Compaction
TIER 2

설계 — 분석 디자인 + 데이터 계약

"이 사건은 어떤 분석방법으로 풀까?" 를 별도 객체로 emit. 차트 데이터의 출처·변환·source_id 추적성 강제.

Phase 1A ResearchDirector Phase 2 Vega-Lite Phase 2A EvidenceDataset Phase 2B Capability Registry
TIER 3

검수 — Chart Gate + Desk Editor

차트는 4중 게이트 (Schema·Critic·Sanity·Fallback). 데스크는 논리 7-rubric + 시각 8-rubric. 결정적 게이트가 LLM 우회 차단.

Phase 6 Chart Gate Phase 6A Exhibit Priority Phase 7A Det. Gate Phase 7 Desk Editor Phase 8 Strategic Mode Phase 8A Strategic Contract
TIER 4

퇴고 — Editor + Layout + 번호제 + Word Budget

편집장의 7-rubric 비평·재집필. 9종 layout 어휘. 차트 번호제. 절단 검출 + 적응형 max_tokens (32K → 64K).

Phase 1 Editor Pass Phase 3 Layout Primitives Phase 4 Exhibit 번호제 Phase 5 Word Budget
Pipeline

6-tier State 흐름

텔레그램 메시지부터 발행까지의 6 단계. 각 단계는 *고유 책임* 과 *고유 입력 타입* 을 갖는다 (AP-V5-30 — 8단계 입력 제한). "왜 처음부터 끝까지 같은 dict 를 들고 다니지 않나?" 는 v4.5.7 의 token compounding 문제 해결.

RawContext— ContextAnalyst (Opus 4.7, 웹 검색)
사실·타임라인·핵심 수치·출처 수집. 한 사건의 *모든 raw 정보*. 후속 단계엔 *그대로* 넘기지 않음 (압축 강제).
EvidencePack— compact_to_evidence_pack
RawContext → 30% 이상 토큰 감소된 압축 형태. 후속 단계 (분석 설계·집필·검수) 가 *오직 이 객체만* 본다.
AnalysisBrief— ResearchDirector (Opus 4.7) ★ NEW
"이 사건의 핵심 가설 + 9종 method 중 어느 것 + 보고서 형태 + 시각 제약 + 전략 모드 여부" 를 명시. v4.5.7 의 *암묵적 결정* 을 *명시적 객체* 로.
DraftReport— NarrativeComposer + Editor (Opus 4.7) ★ NEW Editor
composer 가 본문 작성 → Editor 가 7-rubric (deck 정합 / 본문 흐름 / 모순 명시 / 진부어 차단 / 보존 / 워드 예산 / 결론 응결) 비평·재집필.
ExhibitPack— VisualPlanner + ChartCritic ★ NEW
차트가 4중 게이트 통과: Schema (Pydantic) → Critic (LLM 7-질문) → Sanity (SVG 정적 검증) → Fallback (실패 시 표/사실 그리드 격하).
PublishManifest— DeskEditor (Opus 4.7 vision) ★ NEW
11 Hard fail + 5 Soft fail 결정적 게이트 통과 후, 데스크가 시각 캡쳐 + 논리·시각 16-rubric 으로 publish / hold / KILL 판정. *KILL 된 보고서는 사용자에게 도달 안 함*.
Defects Closed

v4.5.7 의 14개 잔존 결함

Plan 의 GAP-1 ~ GAP-14. v4.5.7 운영에서 누적된 사건별 결함을 *분류 → 책임자 → 결정적 게이트* 로 매핑. 각 GAP 은 어느 phase 에서 닫혔는지 표기.

GAP-1
분석 설계도 부재
"왜 이 method 를 골랐나" 가 없음. composer 가 암묵적으로 결정.
Phase 1A — ResearchDirector
GAP-2
차트 데이터 출처 추적 부재
차트 숫자가 어느 출처에서 왔는지 알 수 없음. composer 가 prose 에서 일부 추출.
Phase 2A — EvidenceDataset
GAP-3
레이아웃 어휘 폭증
자유로운 HTML 구조가 시각 다양성보다 일관성 결손을 만듦.
Phase 3 — 9-vocab Primitives
GAP-4
결정적 게이트 부재
길이 부족·문장부호 누락·placeholder 잔존 등이 LLM 호출까지 가서야 발견.
Phase 7A — Det. Gate
GAP-5
데스크 검수 부재
결함 보고서가 *조용히* 사용자에게 도달. publish/hold/kill 분리 없음.
Phase 7 — Desk Editor
GAP-6
차트 번호 부재 / 본문 참조 깨짐
composer 가 임의 ID 박으면 renderer 와 mismatch. cross-reference 깨짐.
Phase 4 — Exhibit 번호제
GAP-7
절단 미검출 + 32K 한계
deep 보고서가 max_tokens 한도로 중간 절단 (WRITE-AP-8). 사후 인지 불가.
Phase 5 — Word Budget
GAP-8
전략 모드 부재
"옵션 A vs B 어느 게 나을까?" 같은 의사결정 질의를 분석 보고서로 처리.
Phase 8 — Strategic Mode
GAP-9
차트 종류 무제한 emit
composer 가 사건 부적합 차트 emit. forbidden_chart_types 사후 검출만.
Phase 2B — Capability Registry
GAP-10
차트 시각 결함 자동 게이트 부재
스케일 잘림·라벨 겹침·축 누락 — Critic LLM 도입 전 자동 검출 없음.
Phase 6 — 4중 게이트
GAP-11
분석 method 라우팅 부재
9종 분석방법론 (ACH/scenario_tree/decision_matrix 등) 의 명시 라우팅 없음.
Phase 1A — Method Router
GAP-12
차트 데이터 계약 부재
EvidencePack 의 raw 가 어떻게 chart data 가 됐는지 변환 trace 없음.
Phase 2A — TransformStep
GAP-13
SSOT 정합성 붕괴
코드 / 문서 / 설정의 시대가 다름. v3.x 가 일부 deprecated 미마킹.
Phase 0 — SSOT Repair
GAP-14
Token compounding (state 누적 비용)
RawContext 를 후속 단계에 그대로 넘김 → 토큰 비용 폭증.
Phase 0C — Compaction
Validation

진보, 수치로 박힌

"V5 가 v4.5.7 보다 좋다" 는 주장은 측정 없이는 무의미하다. 회귀 테스트 17종 + Golden Prompt 20개로 baseline 박고, 모든 V5 flag 켠 뒤 재측정. Pass rate 70.1% → 88.9%, +18.8 pt — Plan §22 의 진보 정의 충족.

Pass Rate
88.9%
+18.8 pt vs baseline
Tests Passed
440
+316 (3.5×)
Tests Failed
53
+1 (Playwright smoke)
Pytest 시간
11s
-63% (deps 설치 후)
제3기관 검수 결과

외부 검토자가 main 머지 전 시점에 평가했을 때 2.5 / 5. 지적은 명료했다 — "구조는 잘 깔았으나 검증 증거 부족." 이번 세션에서 requirements-v5.txt + V5_TEST_RESULTS.md + method 준수 테스트 16건 으로 그 빈자리 채움. 추정 갱신 평가 4.5 / 5.

fail count 의 +1 은 Playwright smoke 테스트 한 건 — chromium 초기화 단순 이슈로 사용자 동작과 무관. 그 외 baseline 의 52 fail 은 그대로 유지. 즉 회귀 0.

+316 pass 의 출처는 그동안 운영 의존성 미설치로 SKIP 되던 Phase 6 (Chart Gate), Phase 2 (Vega-Lite), Phase 7 (Desk Editor) 검증 framework. requirements-v5.txt 설치 후 한 번에 활성화되어 통과.

Activation

단계적 활성화

모든 V5 phase 는 opt-in. 디폴트는 OFF — .env 에 아무것도 안 적으면 v4.5.7 호출 경로 byte-equal. Plan §0.3 단계 도약 금지 원칙에 따라 한 번에 한 flag 만 켜고 회귀 테스트 통과 확인 후 다음 단계로.

# 1. V5 운영 의존성 설치 pip install -r requirements-v5.txt python -m playwright install chromium # 2. 한 번에 모두 켜기 (또는 단계적) cat >> .env <<'EOF' V5_RESEARCH_DIRECTOR=1 V5_VISUAL_PLANNER=1 V5_EDITOR_PASS=1 V5_LAYOUT_TYPESETTER=1 V5_DESK_EDITOR=1 EOF # 3. 봇 재시작 (CLAUDE.md VM 배포 SOP) pkill -f "src.main" && sleep 2 nohup python -m src.main > bot.log 2>&1 & disown # 4. 회귀 측정 — fail count 가 baseline 52 보다 안 늘어나야 python -m pytest tests/regression/ --tb=no -q | tail -5

운영 의존성 누락 시 동작은 graceful degrade — DeskEditor 의 vision 캡쳐가 SKIP 되어도 logical 7-rubric 은 작동, vl-convert 미설치면 Vega spec 만 emit 되고 d3 fallback 으로 렌더. docs/V5_ACTIVATION.md §1.5 의 매트릭스가 SSOT.

By the Numbers

17 Phase, 32 Anti-pattern, 9 Method

v4.5.7 → v5.0.0 의 *변화의 부피* 한눈에.

신규 phase
17
신규 anti-pattern
32
분석 method
9
Layout 어휘
9
차트 type
16
Hard fail rules
11
Soft fail rules
5
신규 모듈 (.py)
21
회귀 테스트
17
Golden prompt
20
deep 모드 max_tokens
64K
+32K vs v4.5.7
v4.5.7 호출 경로
0
byte-equal 보존
Closing

사용자가 체감할 변화

차트가 사실과 어긋나면 발행 안 됨 (v4.5.7: 그대로 발행됐음).

본문이 짧게 잘렸으면 hold (v4.5.7: 절단된 채 발행됐음 — WRITE-AP-8).

"옵션 A vs B 결정 좀" 같은 질의 는 분석 보고서가 아닌 의사결정 매트릭스 (옵션 / 기준 / 점수 / 권고 / 30·60·90일 실행계획) 로 응답.

같은 사건이라도 분석 method 가 다름 — 호르무즈 = transmission_channel, LLM 시장 = scenario_tree, 미중 패권 = stakeholder_matrix. 보고서 구조가 달라짐.

진부한 연결어 ("그러나", "한편", "결국 중요한 것은") 는 Editor 의 7-rubric 이 차단.

모순은 봉합 없이 명시 — "A 는 X 라고 보고, B 는 Y 라고 본다. 본 보고서는 A 를 채택. B 의 입장은 counter_hypothesis 로 보존" 형식.

Plan §0.3

모든 V5 모듈은 opt-in. .env 에 V5_* flag 안 켜면 v4.5.7 호출 경로 그대로. 단계적으로 켜고 회귀 테스트로 검증 — 측정되지 않은 진보는 진보가 아니다.