v5.4.3
Event Analysis Team · System Map

v5.4.3 — Tier 4
+ Market · Image · 20 Charts

텔레그램 한 줄에서 시작해 사실 수집 (웹 + 실시간 시세 + og:image) → 단일 호출 집필 → mono 테마 HTML 발행 → Cloudflare Pages 까지. v5.0.0 의 17-Phase 검수 framework 는 opt-in 으로 대기, 디폴트 호출 경로는 v4.5.7 baseline 위에 외부 데이터 채널 2개 + 차트 20종 추가.

VERSION v5.4.3 claude-opus-4-7 2-call pipeline 20 chart types 7 theme pool 17 V5 phases (opt-in) 2026-05-20
Pipeline · Default Path

호출 경로 — 한 메시지에서 한 보고서까지

현재 디폴트는 v4.5.7 의 2-call Tier 4 그대로. ContextAnalyst 는 웹 검색 후 두 hook (market_fetcher + image_fetcher) 으로 외부 데이터를 보강하고, NarrativeComposer 가 단일 호출로 본문·20종 차트·지도·사진 선택을 모두 emit. ReportSynthesizer 가 사진을 로컬로 내려받아 HTML 로 묶고 Cloudflare Pages 에 배포.

STEP 0

텔레그램 메시지 + 모드 라우팅

src/telegram_bot.py

사용자가 한 줄 ("호르무즈 봉쇄 가능성 분석해줘" 또는 "삼성전자 1Q 실적 짧게"). 키워드로 자동 라우팅 — 짧게/요약 = fast, 심층/면밀 = deep, 그 외 standard.

STEP 1

ContextAnalyst — 사실 수집

Opus 4.7 · 웹 검색 · 4K~10K tok

타임라인·핵심 수치·출처 URL·언급 종목 (instruments_mentioned) 을 구조화. mode 별 max_tokens (fast/standard 4K · deep 10K, v4.5.7).

RawContext sources[] instruments_mentioned[]
↓ 외부 데이터 보강 (post-context hooks)
STEP 1A

Market Data Fetcher

src/tools/market_fetcher.py · v5.2.0

ContextAnalyst 가 emit 한 instrument 목록을 4-source 가 분담 수집 → ContextAnalysis.time_series 채움 → composer 가 candle/line/area 차트로 emit.

KRX 한국 개별주 Yahoo 지수·DXY FRED 미국 매크로 ECOS 한은 macro 11 instrument
STEP 1B

Image Fetcher — og:image 자동 추출

src/tools/image_fetcher.py · v5.4.0

sources URL 들의 첫 64KB 만 fetch → og:image / og:title / og:description / publisher 파싱 → ContextAnalysis.available_images 채움. 5장 cap, per-URL 5s + total 12s timeout, 외부 lib 의존성 0 (aiohttp + regex).

16개 매체 매핑 graceful degrade v5.4.0 신규
STEP 2

NarrativeComposer — 단일 호출 집필

Opus 4.7 · 12K~32K tok

행위자·구조·시나리오·모순 분석 + 본문 essay + 20종 차트 data + 지도 + 사진 선택 까지 단일 호출 안에서 emit. mode 별 max_tokens — fast 12K / standard 20K / deep 32K (WRITE-AP-8 차단). 7테마 풀에서 random.choice 로 보고서 테마 결정.

freeform_essay charts: list[dict] embedded_map hero_image + section images watch_signals
STEP 3

ReportSynthesizer — HTML 렌더 + 사진 로컬화

Jinja2 · v5.4.1 localize

composer 의 ComposedReport → freeform_essay.html 단일 템플릿 으로 렌더. 발행 직전 _localize_report_images hook 이 og:image URL 을 봇이 직접 다운로드해 reports/img/<hash>.<ext> 로 저장 (CDN hotlink 차단 회피). d3.v7 + charts.js + maps.js 를 reports/ 로 동기화.

7 mono themes SHA256 dedup 12MB cap same-origin img
STEP 4

발행 — Cloudflare Pages + Telegram 회신

wrangler CLI · python-telegram-bot

HTML + img/ + static/ 묶음 wrangler 로 업로드. Telegram 채팅엔 URL + 감시 신호가 있다면 WatchlistRegistry (SQLite) 에 등록 — 후속 보고서 자동 트리거 hook (v5.1.1).

Chart Catalog · v5.3.0

20종 차트 · 단일 호출 emit

composer 가 외부 빌더 없이 ComposedSection.charts 에 직접 emit. v5.3.0 부터 FT/Economist 스타일 신규 7종 추가 (총 20). 신규는 guarded tier — chart_critic + Visual Sanity Gate C 통과 필수. 카테고리 구분은 색이 아닌 45° 패턴 (mono guide §3.3).

bar
safe
donut
safe
line
safe
gantt
safe
network
safe
stacked
safe
bubble
safe
heatmap
safe
dual_line
safe
forecast
safe
choropleth
safe
candle
v5.2.0
area
safe
scatter
★ v5.3.0
stacked_area
★ v5.3.0
lollipop
★ v5.3.0
slope
★ v5.3.0
small_multiples
★ v5.3.0
waterfall
★ v5.3.0
range_bar
★ v5.3.0

v5.4.3 의 결정 트리 step 0 — 재무·수익성·기업 분석 카테고리는 sankey 또는 waterfall 중 최소 1개 emit 강제 (CHART-AP-19 fix). 시계열 분기로 먼저 collapse 되어 분해 차트 branch 까지 못 도달하던 회귀 차단.

Anti-Starvation · v5.3.0

5-Layer Usage Guarantee

"신규 차트 추가했는데 한 번도 안 박힌다" 의 캔들 회귀 (v5.2.0) 교훈. production wiring 만으로는 부족 — 5 층으로 emit 보장.

1
Telemetry — type 별 emit JSONL 영구 기록
src/visual/usage_log.py · starvation alarm (5 보고서 연속 type-X 0 회 emit 시 경고)
2
결정 트리 — SYSTEM_PROMPT 의 negative constraint
LLM 의 line/bar default bias 차단. step 0 (재무) → step 1 (시계열) → step 2 (분포) → step 3 (분해)
3
Method × Exhibit 매트릭스
research_director.py:_DEFAULT_REQUIRED_EXHIBITS · fault_tree → waterfall · pre_mortem → scatter · 9종 method 별 매핑
4
다양성 쿼터 — Deterministic Gate soft fail
chart_type_monotony · standard ≥3 차트인데 distinct <2 면 hold
5
회귀 fixture — 21 시나리오 SSOT
tests/regression/fixtures/chart_type_scenarios.yaml · KNOWN_CHART_TYPES 와 1:1 매핑 검증
V5 Framework · Opt-in

17-Phase 검수 — 기다리는 layer

v5.0.0 의 4-Tier 17-Phase 신문사형 검수 framework 는 코드는 머지됐지만 디폴트 OFF. .env 의 V5_* flag 를 켤 때만 진입 — v4.5.7 호출 경로는 byte-equal 보존.

# 모두 켜기 (또는 단계적) V5_RESEARCH_DIRECTOR=1 # Phase 1A — 분석 method 라우팅 (9종) V5_VISUAL_PLANNER=1 # Phase 2 — Vega-Lite + EvidenceDataset V5_EDITOR_PASS=1 # Phase 1 — 7-rubric 편집장 재집필 V5_LAYOUT_TYPESETTER=1 # Phase 3 — 9-vocab layout primitives V5_DESK_EDITOR=1 # Phase 7 — vision 캡쳐 + 16-rubric publish/hold/KILL
신규 phase
17
분석 method
9
Hard fail rules
11
Soft fail rules
5
회귀 테스트
17
Pass rate
88.9%
+18.8pt vs baseline
Anti-pattern (V5)
32
v4.5.7 호출 경로
0
byte-equal 보존

활성화 SSOT — docs/V5_ACTIVATION.md · 측정 결과 — docs/V5_TEST_RESULTS.md. 운영 의존성 누락 시 graceful degrade (Vega 미설치 → d3 fallback, Playwright 미설치 → vision SKIP 후 logical 7-rubric 만 작동).

Theme · v5.0.2

7 테마 풀 — 보고서마다 랜덤

lens_policy.select_theme() 가 7개 풀에서 random.choice. event_type 무관 — 시각 다양성 목적. 모든 테마는 동일 레이아웃, bg/card/text/accent 만 다름. legacy light_mono 는 CSS 보존되지만 풀 제외 (직접 지정 시만).

editorialcream
burgundymono
slatesteel
forestsage
midnightindigo
duskrose
paperclassic
Since v5.0.0 · 15 days

변경의 부피 — 한눈에

v5.0.0 (2026-05-05, 17-Phase 마스터 플랜 완료) 부터 v5.4.3 (2026-05-20) 까지의 사용자 가시 변경. 자세히는 CHANGELOG.md.

v5.4.305-20
재무 보고서 sankey/waterfall 누락 fix. SYSTEM_PROMPT 의 차트 결정 트리에 step 0 (재무 카테고리 → 분해 차트 강제) 추가. 시계열 분기로 collapse 되어 분해 차트 못 도달하던 CHART-AP-19 회귀 차단.
v5.4.205-20
/status 메시지 단순화. 반복 노이즈인 에이전트 구성 블록 제거. 봇 상태 / 가동시간 / 보고서 수 / 큐 만 표시.
v5.4.105-20
보고서 사진 broken image fix. 메이저 매체 CDN 의 hotlink 차단으로 외부 URL `<img>` 가 403. 봇이 직접 다운로드해 reports/img/<hash> 로 same-origin serve.
v5.4.005-20
보고서 사진 자동 삽입. sources URL 의 og:image 추출 → composer 가 본문 흐름에 맞는 hero (1장) + inline (0~3장) 선별. FT 스타일 italic 캡션 + © Publisher credit. 7테마 토큰 자동 적용.
v5.3.205-19
감시 신호 섹션 editorial epilogue 화. chart-card / takeaway 박스 폐기, lede + row 기반 list 로. 본문 산문 흐름과 시각적 연속성 회복.
v5.3.105-19
entry 애니메이션 커버리지. bar grow + donut sweep + fill-path fade 추가. dual_line / forecast 점선 회귀 silent fix. prefers-reduced-motion 즉시 정적 폴백.
v5.3.005-18
FT/Economist 7종 차트 + 5-Layer Usage Guarantee. scatter / stacked_area / lollipop / slope / small_multiples / waterfall / range_bar. 캔들 회귀 차단 layer 5중 도입.
v5.2.1305-18
차트 카드·표 시각 정합성 보강. mono guide §4 패턴 자동 적용 일관화.
v5.2.605-16
DXY 데이터 source 교체. FRED/DTWEXBGS (Fed Broad TWI, 117~125 레인지) → Yahoo/DX-Y.NYB (ICE DXY, 99~110 레인지). 진짜 DXY 로 정정.
v5.2.005-15
Market Data Fetcher. KRX / Yahoo / FRED / ECOS 4-source 에서 11종 instrument 실시간 fetch. ContextAnalyst 가 emit 한 종목 → composer 가 candle/line/area 로 emit. graceful degrade.
v5.1.205-14
차트 가드 추가. CHART-AP-15 (gantt zero-duration) + CHART-AP-16 (donut 2-segment) Pydantic guard.
v5.0.005-05
17-Phase Newsroom Pipeline. 4-Tier 17-Phase 마스터 플랜 완료. ResearchDirector + Editor + DeskEditor + 4중 Chart Gate + 11 Hard fail. 모두 opt-in.