virtual-insanity
← 리포트 목록

oil_supply_monitor 가격 신선도 + macro 입력 chain 점검

2026-04-24 oil [oil-supply-monitor, macro, freshness, yfinance, hermes]

Executive Summary

  • oil_supply_monitor 가격 provenance 2026-04-17 정체의 직접 원인은 yfinance 현재 실패가 아니라 oil_supply_monitor.py 안의 2026-04-17 provenance hardcode였다.
  • 패치 후 강제 실행 완료: WTI/Brent provenance가 2026-04-172026-04-23으로 갱신됐고, WTI 95.85, Brent 105.07이 state에 반영됐다.
  • macro 입력 chain은 Hermes market-indicators가 오늘 13:05 KST 기준 최신이다. 다만 ron-pipeline MCP는 OpenClaw memory를 우선 읽고 있어 Hermes 우선으로 패치했다.

1. 진단 결과

1.1 가격 stale 원인

문제 상태:

지표 Before provenance After provenance After 값
WTI 2026-04-17 2026-04-23 95.85
Brent 2026-04-17 2026-04-23 105.07
JKM 2026-04-17 2026-04-23 16.39
Singapore crack proxy 2026-04-17 2026-04-23 49.18

확인한 직접 원인:

  • collect_spot_prices() 자체는 /opt/homebrew/bin/python3.11에서 CL=F, BZ=F, HO=F, RB=F, NG=F를 정상 수집했다.
  • 그러나 _apply_verified_source_overrides()가 provenance 날짜를 2026-04-17로 고정해 state/snapshot에 낡은 출처처럼 남겼다.
  • 과거 로그에는 possibly delisted yfinance 에러가 있었지만, 현재 가격 stale의 핵심 원인은 fetch 실패가 아니라 provenance hardcode였다.

1.2 wiki 연속 실패

강제 실행 로그에 wiki 연속실패 43회 감지 → 대체 쿼리 활성화가 남아 있다. 이 작업에서는 가격 신선도가 핵심이라 중단 대신 가격 수집 경로를 분리·검증했다. 실행은 정상 종료됐고 wiki 실패는 가격 갱신을 막지 않았다.

2. 수정 내역

2.1 백업

  • /Users/ron/.hermes/workspace/scripts/pipeline/oil_supply_monitor.py.bak-price-provenance-20260424
  • /Users/ron/.hermes/workspace/scripts/shared/telegram.py.bak-oil-import-os-20260424
  • /Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js.bak-indicators-hermes-20260424

2.2 코드 변경

  1. /Users/ron/.hermes/workspace/scripts/pipeline/oil_supply_monitor.py
  2. collect_spot_prices()가 값뿐 아니라 _dates, _tickers를 반환하도록 보강.
  3. WTI/Brent/JKM/Crack provenance를 hardcoded 2026-04-17 대신 yfinance 실제 data_date로 기록.
  4. CL futures chain provenance도 curve item의 data_date를 우선 사용.

  5. /Users/ron/.hermes/workspace/scripts/shared/telegram.py

  6. os.environ 사용부가 있는데 import os가 없어 oil monitor import 시 실패하던 문제 수정.

  7. /Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js

  8. get_latest_indicators가 OpenClaw market-indicators만 읽던 로직을 Hermes 우선, OpenClaw fallback으로 변경.
  9. Hermes 경로: /Users/ron/.hermes/workspace/memory/market-indicators/
  10. OpenClaw fallback: /Users/ron/.openclaw/workspace/memory/market-indicators/

3. 강제 재실행 검증

실행 명령:

PYTHONPATH=/Users/ron/.hermes/workspace/scripts:/Users/ron/.hermes/workspace/scripts/shared:/Users/ron/.hermes/workspace/scripts/pipeline \
/opt/homebrew/bin/python3.11 /Users/ron/.hermes/workspace/scripts/pipeline/oil_supply_monitor.py

증거:

  • 로그: /Users/ron/.hermes/logs/oil_supply_monitor_manual_20260424_freshness_fix.log
  • stderr: /Users/ron/.hermes/logs/oil_supply_monitor_manual_20260424_freshness_fix.err.log
  • state: /Users/ron/.hermes/workspace/memory/oil-supply-monitor/state.json
  • snapshot: /Users/ron/knowledge-agent/500-signals/에너지/260424_oil-supply-snapshot.md

결과:

  • exit code: 0
  • state mtime: 2026-04-24 13:17:24 KST
  • WTI provenance: yfinance CL=F, date 2026-04-23, method api
  • Brent provenance: yfinance BZ=F, date 2026-04-23, method api
  • Telegram market 발송 및 차트 발송 완료 로그 확인
  • 품질 평가: 5.0/5.0

잔여 stderr:

  • CLH26.NYM, NGH26.NYM 등 과거/전쟁전 커브용 일부 ticker 404가 남았다.
  • 현물 WTI/Brent 수집에는 영향 없음.

4. macro 입력 chain 점검

4.1 market-indicators

Hermes 최신 파일:

  • /Users/ron/.hermes/workspace/memory/market-indicators/2026-04-24.json
  • mtime: 2026-04-24 13:05:43 KST
  • collected_at: 2026-04-24T13:05:43.213066

핵심 지표:

지표 data_date
WTI 95.85 2026-04-23
BRENT 105.07 2026-04-23
DXY 98.80 2026-04-23
VIX 19.31 2026-04-23

OpenClaw 쪽 동일 날짜 파일은 mtime 02:00:59 KST로 Hermes보다 낡았다. 그래서 MCP도 Hermes 우선으로 바꿨다.

4.2 ron-pipeline MCP get_latest_indicators

  • 기존: /Users/ron/.openclaw/workspace/memory/market-indicators만 읽음.
  • 수정 후: Hermes market-indicators 우선, 없을 때만 OpenClaw fallback.
  • 검증: node --check /Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js 통과.
  • 주의: 이미 떠 있는 MCP 프로세스는 재시작/새 세션에서 반영될 수 있다.

4.3 DART / EDGAR

오늘 산출물 존재:

  • DART: /Users/ron/knowledge-agent/100-inbox/124 dart-edgar/2026-04-24_dart_latest.json, mtime 06:00:48 KST
  • EDGAR: /Users/ron/knowledge-agent/100-inbox/124 dart-edgar/2026-04-24_edgar_latest.json, mtime 06:11:07 KST

판정: 오늘 데이터 산출 확인.

4.4 ETF / price-history / KIS

  • price-history sample: /Users/ron/.hermes/workspace/memory/price-history/SPY.json, mtime 2026-04-24 13:00:05 KST
  • 관련 Hermes cron은 존재하고 enabled 상태다.
  • 현재 Codex 세션에는 kis-api MCP tool이 직접 노출되어 있지 않아 live MCP 호출은 못 했다.
  • 파일 mtime 기준 price-history chain은 오늘 갱신 확인. 단, 내부 data_date 필드 표준화는 별도 과제다.

5. 검증 명령 결과

  • python3 -m py_compile scripts/pipeline/oil_supply_monitor.py scripts/shared/telegram.py → 통과
  • node --check /Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js → 통과
  • collect_spot_prices() 단독 호출 → WTI/Brent/HH/JKM/HO/RB 모두 2026-04-23 기준 수집
  • oil_supply_monitor.py 강제 실행 → exit 0, state/snapshot 갱신

Remaining Risks

  1. wiki fetch 연속 실패 43회는 아직 남아 있다. 가격 critical path는 회피됐지만 wiki/news fetch는 별도 안정화가 필요하다.
  2. 과거 futures ticker 일부 404가 stderr에 남는다. 현재 현물 가격 갱신에는 영향 없지만 chart/history 품질에는 영향 가능.
  3. Hermes cron jobs state의 last_run 표시가 실제 파일 mtime보다 낡게 보이는 잡들이 있다. scheduler state audit가 필요하다.
  4. ron-pipeline MCP 패치는 코드 검증까지 완료했지만, 이미 떠 있는 MCP 프로세스에는 재시작/새 세션이 필요할 수 있다.

자체평가

  • 정확성: 4.5/5 — stale 원인 특정, 가격 provenance 갱신, macro chain 주요 경로 확인.
  • 완성도: 4.2/5 — wiki 43회 실패와 futures 404는 별도 리스크로 남김.
  • 검증: 4.5/5 — py_compile, node check, 단독 fetch, 강제 실행, state 확인 완료.
  • 최소 변경: 4.5/5 — 가격 provenance와 MCP 경로 우선순위 중심의 제한적 수정.

종합: 4.4/5

DONE