리포트 본문 실제 수치 stale 여부 감사
리포트 본문 실제 수치 stale 여부 감사
결론
해리 우려는 맞다. 라벨은 2026-04-16인데 안쪽 수치가 2026-04-14 기준인 리포트가 있다.
핵심 구분:
- 해리가 기대한 “오늘 아침 최신”은 보통 2026-04-15 미국장 종가/지표 기준이다.
- 실제 확인 결과, 시장 가격·매크로 레짐 계열은 상당수가 2026-04-14 종가 기준이다.
- 반면 FRED weekly 계열(WALCL/TGA/WRESBAL)은 2026-04-08이 최신인 것이 주기상 자연스럽다. 문제는 값 자체보다 04-16 계산값처럼 보이는 라벨이었다.
- RRP daily는 2026-04-15 값까지 들어와 있다.
- 채권 브리핑은 2026-04-15 기준이라 오늘 아침 리포트 기준으로 정상이다.
가장 심한 문제 1개는 샘플 수정했다.
- 수정 대상: 연준 유동성 집계/브리핑 표시
- 기존:
fed-liquidity/latest.json의date=2026-04-16만 보이고 RRP/TGA/WRESBAL 원천 기준일은 안 보임 - 수정 후:
source_dates와as_of_date저장, morning briefing 한 줄에RRP 2026-04-15, TGA 2026-04-08, 지준 2026-04-08, 연준자산 2026-04-08표시
1. 오늘 아침 발송 본문 수집
확인한 발송 증거:
| 리포트 | 시각 | msg_id | 확인 소스 |
|---|---|---|---|
| morning-briefing-telegram | 06:45 | 2375 | morning-briefing-telegram.log, sector_trace.log |
| analyst-macro | 07:05 | 2377 | analyst_macro_common_wrapper.log, TSV, sector_trace.log |
| analyst-fundamental | 07:14 | 2378 | analyst_fundamental_common_wrapper.log, TSV |
| analyst-technical | 07:27 | 2379 | analyst_technical_common_wrapper.log, TSV |
| analyst-pm | 07:40 | 2380 | analyst_pm_common_wrapper.log, TSV |
| kpi-daily | 07:45 | 2381 | kpi_daily.log |
| analyst v2_quality 재발송 | 08:15 | 2383~2386 | analyst_*_last_telegram.tsv, 260416_qc_analyst_4.md |
본문 캡처/재구성 파일:
/tmp/stale_audit_260416/body_morning_current_dryrun.txt
/tmp/stale_audit_260416/body_morning_after_sample.txt
/tmp/stale_audit_260416/body_analyst_macro_v2_reconstructed.html
/tmp/stale_audit_260416/body_analyst_fundamental_v2_reconstructed.html
/tmp/stale_audit_260416/body_analyst_technical_v2_reconstructed.html
/tmp/stale_audit_260416/body_analyst_pm_v2_reconstructed.html
/tmp/stale_audit_260416/body_kpi_daily_2381.txt
주의: Telegram Bot API는 과거 발송 메시지 본문을 message_id로 역조회하는 API가 없다. 그래서 07:xx analyst 본문은 latest.json + 현재 sender build_message()로 재구성했고, 실제 발송 여부는 TSV/message_id로 확인했다. 08:15 v2_quality 재발송은 같은 sender 포맷이라 재구성 본문과 실발송 본문이 일치한다.
본문 샘플:
06:45 morning sector_trace preview:
<b>🌅 아침 투자 브리핑</b> ... # 🌅 아침 투자 브리핑 — 2026-04-16
07:05 macro v2 body:
데이터 신선도: 2026-04-14 close (4/15-16 수집 미실행, 동일 데이터 기반)
WTI -7.3%, US10Y 4.26%, BEI 2.38%
07:14 fundamental v2 body:
TSMC 실적 오늘(4/16) 발표 ... 데이터 빈티지 4/14 동일
sources: context-fundamental.json (2026-04-14); analyst-macro/latest.json (2026-04-16)
07:45 KPI msg_id 2381:
처리/실패/대기 1/0/6, 성공률 100.0%, Cron 8/8 활성
2. 원천 데이터 날짜 확인
시장 지표 / 가격
~/.hermes/workspace/memory/market-indicators/2026-04-15.json
file date: 2026-04-15
collected_at: 2026-04-15T04:00:50
SPX close 6951.24 data_date 2026-04-14
NDX close 23558.09 data_date 2026-04-14
VIX close 18.46 data_date 2026-04-14
US10Y close 4.26 data_date 2026-04-14
DXY close 98.14 data_date 2026-04-14
USDKRW close 1471.88 data_date 2026-04-14
WTI close 91.87 data_date 2026-04-14
GOLD close 4857.9 data_date 2026-04-14
COPPER close 6.08 data_date 2026-04-14
~/.hermes/workspace/memory/price-history/SPY.json
last: 2026-04-14 close 694.460022
판정: 04-16 아침 기준으로는 04-15 종가가 있어야 정상 기대치다. 현재 시장 가격 기반 리포트는 1거래일 stale이다.
FRED / 연준 유동성
RRPONTSYD last: 2026-04-15 value 0.223
WTREGEN last: 2026-04-08 value 748376.0
WRESBAL last: 2026-04-08 value 3116247.0
WALCL last: 2026-04-08 value 6693871.0
판정:
- RRP daily는 2026-04-15까지 들어와 있어 정상.
- WTREGEN/WRESBAL/WALCL은 주간/발표 주기상 2026-04-08이 최신일 수 있다.
- 그러나 기존
fed-liquidity/latest.json은date=2026-04-16만 보여, 사용자가 TGA/WRESBAL도 04-16 기준으로 오해할 수 있었다.
채권
~/.hermes/workspace/memory/bond-briefing/latest.json
date: 2026-04-15
국고3년 3.362% (-0.8bp)
국고10년 3.647% (+0.0bp)
repo 2.48% (-2.0bp)
판정: 04-16 아침 리포트 기준으로 정상.
기업 실적
본문이 인용한 주요 이벤트:
- ASML Q1 2026: 공식 발표일 2026-04-15. 본문
Q1 EUR 8.8B,FY 가이던스 EUR 36-40B는 공식 보도자료와 부합. - TSMC Q1 2026 earnings conference: 공식 IR 일정은 2026-04-16 14:00 Taiwan time. 07:14 KST 발송 당시 “오늘 발표”는 맞지만, 발표 이후에는 stale 문장이 되므로 시각 조건이 필요.
공식 출처:
- ASML Q1 2026 results: https://www.asml.com/en/news/press-releases/2026/q1-2026-financial-results
- TSMC Q1 2026 quarterly results: https://investor.tsmc.com/english/quarterly-results
3. stale 포인트 표
| 리포트 | 수치 항목 | 본문 표시 날짜 | 실제 데이터 날짜 | stale 여부 | 원인 |
|---|---|---|---|---|---|
| morning 06:45 | 시장 지표 전체 | 2026-04-16 라벨 | 06:45 실행 당시 indicators_count=0 | FAIL | 아침 실행 시 market/bond data를 못 읽음. 08:17 이후 복구 로그 확인됨 |
| morning current sample | SPX 6951.24, US10Y 4.26, WTI 91.87 등 | 2026-04-15 수집/전일 종가 기준 |
각 indicator data_date=2026-04-14 |
STALE | market-indicators 2026-04-16 파일 부재, 2026-04-15 파일 자체가 04-14 종가 |
| morning/fed liquidity | 순유동성 $5.95T, RRP/TGA/WRESBAL | 기존에는 2026-04-16 계산값처럼 보임 | RRP 04-15, TGA/WRESBAL/WALCL 04-08 | LABEL_STALE | forward-fill 원천 날짜 미표시 |
| analyst-macro 07:05/08:15 | WTI -7.3%, US10Y 4.26%, DXY 98.14, BEI 2.38 | 2026-04-16 리포트 | data_vintage=2026-04-14 close |
STALE but DISCLOSED | market-indicators가 04-14 종가 기반. v2 body는 신선도 표시함 |
| analyst-fundamental 07:14/08:15 | WTI $92, Cu z=2.41, 산업 사이클 | 2026-04-16 리포트 | context-fundamental 04-14, macro 04-16(안쪽은 04-14) | STALE/PARTIAL | fundamental context 갱신 지연 + macro stale 전이 |
| analyst-fundamental 07:14/08:15 | ASML Q1 EUR 8.8B, FY 36-40B | 2026-04-16 리포트 | ASML 공식 2026-04-15 | OK | 공식 실적 최신 반영 |
| analyst-fundamental/PM | TSMC “오늘 발표” | 2026-04-16 | 공식 일정 2026-04-16 14:00 Taiwan | OK at morning / TIME-SENSITIVE | 오전에는 맞지만 발표 후 stale 가능 |
| analyst-technical 07:27/08:15 | SOXX RSI 73, XLE RSI 38, PCR 3.316 | 2026-04-16 리포트 | technical-signals 04-15, market_data 04-14 | PARTIAL_STALE | technical 일부는 04-15 파일, 시장/모멘텀 기반은 04-14 |
| analyst-pm 07:40/08:15 | 반도체 20%, 조선 12%, 방산 10% 등 | 2026-04-16 리포트 | macro/fund/tech 입력 날짜 혼합 | DERIVED_STALE | upstream stale가 PM 판단에 전이. v2는 “실제 계좌 아님” 표시 |
| kpi-daily 07:45 | 처리/실패/대기 1/0/6 | 2026-04-16 | ops DB/KPI run 2026-04-16 | OK but SEMANTIC_ISSUE | 데이터 날짜 stale 아님. 다만 0건 성공률 100% 의미 오류는 별도 QC에서 수정 완료 |
| bond numbers | 국고3년 3.362%, 국고10년 3.647%, repo 2.48% | 2026-04-15 | 2026-04-15 | OK | 오늘 아침 기준 최신 |
| SPY chart/price-history | SPY close 694.46 | 2026-04-16 기대 | 2026-04-14 | STALE | price-history refresh 미반영 |
4. 수정 권고
우선순위별:
- market-indicators / price-history collector를 04-15 종가까지 갱신
- 오늘 아침 stale의 핵심 원인이다.
- 04-16 리포트에서 기대되는 일일 시장 데이터는 04-15 미국장 종가다.
-
collector가 04:00 KST에 돌면 아직 미국장이 끝나지 않았을 수 있으므로, 06:30~07:00 KST 재시도 또는 “data_date 검사 후 stale면 재실행/보류”가 필요하다.
-
모든 analyst context에
data_as_of/data_sources_read강제 - macro처럼
data_vintage=2026-04-14 close를 명시한 것은 좋다. -
fundamental/technical/PM도 각 수치별 as-of를 공통 필드로 넣어야 한다.
-
FRED daily/weekly 주기 분리 표시
- RRP는 daily라 04-15가 정상.
- WALCL/TGA/WRESBAL은 weekly/발표 지연이 있으므로 04-08이어도 정상일 수 있다.
-
단, 합성 latest의
date=오늘만 보여주는 것은 금지. component source date를 본문에 노출해야 한다. -
시간 민감 이벤트 라벨 보정
TSMC 오늘 발표는 오전에는 맞지만 발표 시각 이후 stale해진다.-
TSMC 4/16 14:00 Taiwan 예정처럼 날짜+시각으로 표현해야 한다. -
본문 상단 공통 라벨
리포트 작성일과데이터 기준일을 분리.- 예:
작성: 2026-04-16 07:05 KST / 시장 데이터: 2026-04-14 close / FRED RRP: 2026-04-15 / Fed weekly: 2026-04-08.
5. 샘플 수정 — Fed liquidity source date 표시
가장 오해가 큰 부분인 연준 유동성을 샘플 수정했다.
수정 파일:
/Users/ron/.hermes/workspace/scripts/pipeline/fed_liquidity_aggregator.py
/Users/ron/.hermes/workspace/scripts/pipeline/morning_briefing.py
백업:
/Users/ron/.hermes/workspace/scripts/pipeline/fed_liquidity_aggregator.py.bak-stale-audit-20260416-083437
/Users/ron/.hermes/workspace/scripts/pipeline/morning_briefing.py.bak-stale-audit-20260416-083437
핵심 diff:
+def _source_date(series, target_date):
+ dates = [d for d in series.keys() if d <= target_date]
+ return max(dates) if dates else None
+
+source_dates = {
+ "WALCL": "2026-04-08",
+ "RRPONTSYD": "2026-04-15",
+ "WTREGEN": "2026-04-08",
+ "WRESBAL": "2026-04-08"
+}
+as_of_date = min(component_dates)
+data_vintage = "WALCL=...; RRPONTSYD=...; WTREGEN=...; WRESBAL=..."
검증:
python -m py_compile fed_liquidity_aggregator.py morning_briefing.py -> OK
python fed_liquidity_aggregator.py -> exit 0
수정 후 fed-liquidity/latest.json:
{
"date": "2026-04-16",
"as_of_date": "2026-04-08",
"source_dates": {
"WALCL": "2026-04-08",
"RRPONTSYD": "2026-04-15",
"WTREGEN": "2026-04-08",
"WRESBAL": "2026-04-08"
},
"data_vintage": "WALCL=2026-04-08; RRPONTSYD=2026-04-15; WTREGEN=2026-04-08; WRESBAL=2026-04-08"
}
수정 후 morning dry-run 샘플:
연준 순유동성 $+5.95T(전주 $+0.2B), 국면은 유동성 공급 소진 — 동력 없음.
기준일은 역레포 2026-04-15, 재무부계정 2026-04-08, 지준 2026-04-08, 연준자산 2026-04-08.
전체 검증 산출물:
/tmp/stale_audit_260416/fed_aggregator_after.out
/tmp/stale_audit_260416/morning_fed_line_after.txt
/tmp/stale_audit_260416/body_morning_after_sample.txt
/tmp/stale_audit_260416/fed_liquidity_aggregator.diff
/tmp/stale_audit_260416/morning_briefing.diff
6. 남은 이슈
- market-indicators 04-16 부재
- 04-16 아침 analyst/morning의 핵심 stale 원인.
-
별도 collector 정상화 필요.
-
SPY price-history 04-14에서 멈춤
-
/api/chart/SPY쪽 UI와 리포트가 같이 stale될 수 있다. -
fundamental context 04-14
-
실적 이벤트는 최신이어도 산업 사이클/밸류에이션 context는 04-14 기반.
-
technical context 혼합
-
technical-signals는 04-15 파일이 있으나 market_data는 04-14. 본문에는 이 혼합을 더 구조적으로 표시해야 한다.
-
morning 06:45 당시 indicators_count=0
- 08:17 이후 복구 로그는 있지만, 실제 06:45 msg_id 2375는 시장 수치가 거의 없는 품질 문제였을 가능성이 높다.
자체평가
- 정확성: 4.6/5 — 로그, JSON, source date, body 재구성을 대조했다. 과거 Telegram 본문은 API 한계로 직접 역조회 불가라 재구성 근거를 명시했다.
- 완성도: 4.5/5 — 요청한 stale 표, 원인, 권고, 샘플 수정/재실행을 포함했다.
- 검증: 4.6/5 — py_compile, aggregator 재실행, morning dry-run에서 source date 표시를 확인했다.
- 최소 변경: 4.7/5 — 가장 심한 Fed liquidity 라벨 문제에 한해 aggregator와 briefing 표시만 수정했다.
종합: 4.6/5