virtual-insanity
← 리포트 목록

macro-timeseries(BAMLC0A0CM 등) 09-28 07:10 갱신 주체 특정

2026-09-28 guardian [ops, macro-timeseries, FRED, IG-OAS, cron, 주간크레딧]

macro-timeseries 07:10 갱신 주체 특정 (조사 2026-09-28 10:22 KST, Guardian, 조회만)

결론

  • memory/macro-timeseries/BAMLC0A0CM.json 등을 09-28 07:10에 갱신한 주체는 활성 크론 fi-morning-brief(해외채권 모닝 브리핑, 평일 07:10) 이다.
  • 이 크론의 래퍼 /Users/ron/.hermes/scripts/migrated/fi-morning-brief.sh 10~12행이 브리핑 직전에 scripts/pipeline/macro_series_collector.py --series <ID>를 11개 시리즈에 대해 순차 실행한다.
  • 정지된 market-indicator-tracker는 이 폴더에 쓰지 않는다 (market_indicator_tracker.py 31행 OUTPUT_DIR = WORKSPACE / "memory" / "market-indicators"). 즉 시장지표 크론 정지와 IG OAS 파일 갱신은 서로 무관하다.
  • 따라서 주간 크레딧 리포트의 IG OAS 입력은 평일 아침마다 FRED에서 새로 받아지고 있다. 마지막 관측치가 09-24(0.79)인 것은 수집 실패가 아니라 FRED 원천 게시 지연(ICE BofA 시리즈는 통상 1~2영업일 늦게 게시)으로 판단 — 원천 게시일은 별도 미확인.
  • 참고: 전체 시리즈 수집 크론 macro-series-collector는 비활성(enabled=False, 마지막 실행 08-14). 51개 중 브리핑 래퍼가 도는 11개만 최신이고 나머지 40개는 갱신되지 않는다.

조사 결과 (명령별)

(1) jobs.json 키워드 매칭 (macro-timeseries / market_indicator / fred)

명령: python3로 /Users/ron/.hermes/cron/jobs.json(총 158개) 전체 JSON 문자열 매칭 → exit 0 | id | name | enabled | last_run_at | last_status | |---|---|---|---|---| | macro-series-collector | FRED macro timeseries collector | False | 2026-08-14T06:50:32 | ok | | ocRESTORE-market-indicator-tracker | market-indicator-tracker | False | 2026-08-16T07:05:43 | error |

→ 키워드로는 활성 잡 0건. 그래서 07:05~07:20 실행된 활성 잡을 추가로 뽑았고, 그중 fi-morning-brief(schedule 10 7 * * 1-5, last_run_at 2026-09-28T07:11:48, ok, script migrated/fi-morning-brief.sh)가 해당. 이 잡은 스크립트 이름에 키워드가 없어 1차 필터에 안 걸렸다.

(2) macro-timeseries 경로를 쓰는 스크립트

grep -rln 'macro-timeseries' /Users/ron/.hermes/workspace/scripts → exit 0. 실제 쓰기 코드는 scripts/pipeline/macro_series_collector.py(31행 MACRO_DIR, 287~289행 atomic_write)뿐. 나머지(fi_market_snapshot, us_cycle_dashboard, signal_synthesizer, orchestrator 등)는 읽기 참조. macro_series_collector 호출처: fi_market_snapshot.py(주석), cron/jobs.json(비활성 잡), 그리고 크론 래퍼 ~/.hermes/scripts/migrated/fi-morning-brief.sh.

(3) 크론 밖 실행 경로 (LaunchAgents)

ls ~/Library/LaunchAgents | grep -i -E 'market|macro|fred' → exit 0: com.hermes.analyst-fundamental-market-resend, com.openclaw.agent-queue-macro, com.openclaw.analyst-macro (+ .bak 3개) launchctl list | grep ... → exit 0: analyst-fundamental-market-resend(-, 0), analyst-macro(-, 0), agent-queue-macro(PID 46460, -15) - analyst-macro: analyst_common_wrapper.sh macro, 07:00 — 이 폴더 쓰기 증거 없음 - analyst-fundamental-market-resend: analyst_fundamental_resend.py — 이 폴더 쓰기 증거 없음 → LaunchAgent 경로는 갱신 주체 아님.

(4) 07:05~07:15 수정된 로그

find /Users/ron/.hermes/logs -type f -newermt '2026-09-28 07:05' ! -newermt '2026-09-28 07:15' → exit 0, 6건 모두 analyst_fundamental 계열(07:10:05~07:12:28). 래퍼가 수집기 출력을 >/dev/null 2>&1로 버려서 logs 폴더엔 흔적이 없다. 대신 크론 출력 /Users/ron/.hermes/cron/output/fi-morning-brief/2026-09-28_07-11-48.md에 [send] ok=True 기록.

결정적 증거: 파일 mtime 순서 = 래퍼 루프 순서

래퍼 10행 순서 DGS2 DGS5 DGS10 DGS30 T10Y2Y DFII10 T10YIE T5YIFR BAMLC0A0CM BAMLH0A0HYM2 BAMLEMCBPIOAS mtime: DGS2 07:10:40 → DGS5 :41 → DGS10 :42 → DGS30 :44 → T10Y2Y :45 → DFII10 :46 → T10YIE :47 → T5YIFR :49 → BAMLC0A0CM :50 → BAMLH0A0HYM2 :52 → BAMLEMCBPIOAS :53 오늘 수정된 파일 수 11/51 = 래퍼 리스트 11개와 정확히 일치. 이후 07:11:48 브리핑 발송.

판단 / 다음행동

  • 즉시 조치 불필요. IG OAS 입력은 살아 있음.
  • 운영 공백 2건(ops_todos 후보): ① 래퍼가 수집 로그를 버려 실패해도 흔적이 안 남음(silent fail 위험) → 로그 파일로 리다이렉트 권고. ② 전체 수집 크론 비활성으로 40개 시리즈 정체 → 재가동은 해리 확인 필요(크론 활성화 변경).
  • 검증 명령: stat -f '%Sm %N' -t '%T' ~/.hermes/workspace/memory/macro-timeseries/BAML*.json (평일 07:10 직후 갱신 확인)