virtual-insanity
← 리포트 목록

BAMLC0A0CM.json 09-28 07:10 갱신 주체 특정

2026-09-28 guardian [ops, cron, macro-timeseries, BAMLC0A0CM, US-IG-OAS]

BAMLC0A0CM.json 09-28 07:10 갱신 주체 특정

조회 시각: 2026-09-28 11:10~11:20 KST (조회만, 변경 없음)

결론

갱신 주체는 크론 fi-morning-brief (해외채권 모닝 브리핑, enabled=true, 평일 07:10) 이다. 이 잡의 래퍼 스크립트 /Users/ron/.hermes/scripts/migrated/fi-morning-brief.sh 10~12행이 브리핑 발송 직전에 핵심 11개 FRED 시리즈를 scripts/pipeline/macro_series_collector.py --series <ID>로 재수집한다. BAMLC0A0CM 은 그 목록의 9번째다. market-indicator-tracker 는 이 파일을 쓰지 않는다(비활성, 무관).

(1) 파일 수정시각

  • stat -f '%Sm' -t '%Y-%m-%d %H:%M:%S' memory/macro-timeseries/BAMLC0A0CM.json → 2026-09-28 07:10:50
  • 같은 폴더에서 07:10:40~07:10:53 사이 갱신된 파일은 정확히 11개이며, 순서가 래퍼 스크립트 루프 순서와 1:1로 같다: DGS2 07:10:40 / DGS5 :41 / DGS10 :42 / DGS30 :44 / T10Y2Y :45 / DFII10 :46 / T10YIE :47 / T5YIFR :49 / BAMLC0A0CM :50 / BAMLH0A0HYM2 :52 / BAMLEMCBPIOAS :53
  • 파일 내용: last_updated: 2026-09-28, 최신 관측치 2026-09-23=0.77, 2026-09-24=0.79 (FRED 공표 지연으로 관측일은 09-24에 머묾 — 파일 쓰기는 됐지만 새 관측치는 없음)

(2) executions.db 06:55~07:20 실행 기록

  • 주의: sqlite3 -readonly /Users/ron/.hermes/cron/executions.db 직접 실행은 unable to open database file (14)로 실패(WAL 공유메모리 파일 생성 불가 추정). 라이브 DB를 건드리지 않기 위해 /tmp/exec_copy.db로 복사본을 떠서 sqlite3 -readonly로 조회함.
  • 쿼리: SELECT job_id,status,started_at,finished_at,error,delivery_outcome FROM executions WHERE started_at/finished_at/claimed_at BETWEEN '2026-09-28T06:55' AND '2026-09-28T07:20:59' → 35행 반환.
  • 테이블에 exit code 컬럼은 없음 → status(completed/failed)와 error로 대체. 35행 전부 status=completed, error 빈값.
  • 07:10 창과 겹치는 잡:
job_id 시작 종료 상태 비고
fi-morning-brief 07:10:39.98 07:11:48.85 completed 파일 mtime 07:10:40~53이 이 실행 구간 안
industry-fix-choi-report-collect 07:10:39.95 07:10:43.52 completed choi_report_collector.py만 실행, macro-timeseries 무관
telegram-outbox-flusher 07:10:39.98 07:10:40.12 completed 무관
research-broker-retry-0600 07:10:39.99 07:10:40.19 completed 무관
  • 크론 출력 증빙: /Users/ron/.hermes/cron/output/fi-morning-brief/2026-09-28_07-11-48.md → [send] ok=True model=openai-codex/gpt-5.4 len=3224

(3) jobs.json 참조 잡과 enabled 상태 (총 158개 잡 중)

  • ocRESTORE-market-indicator-tracker (jobs.json 3101행): scripts/pipeline/market_indicator_tracker.py --notify, enabled=false, 마지막 실행 2026-08-16 07:05 error
  • macro-series-collector (jobs.json 157행): scripts/pipeline/macro_series_collector.py, enabled=false, 마지막 실행 2026-08-14 06:50 ok
  • fi-morning-brief (jobs.json 6569행): script migrated/fi-morning-brief.sh, enabled=true, 스케줄 10 7 * * 1-5, 마지막 실행 2026-09-28 07:11:48 ok — jobs.json 문자열 검색에는 macro-timeseries가 안 잡히지만 래퍼 셸 스크립트 안에서 수집기를 호출함 (이게 지난 3회 조사에서 놓친 지점)
  • 참고: market_indicator_tracker.py 882행은 BAMLC0A0CM을 IG_SPREAD 지표로 참조만 함.

(4) 로그 grep

  • grep -rIn "2026-09-28[ T]0(6:5[5-9]|7:[01][0-9]|7:20)" /Users/ron/.hermes/logs | grep "BAMLC0A0CM|market_indicator" → 3행, 전부 agent-queue-guardian.log(177057/177102/177206행)의 이 조사 태스크 본문 자체이며 실제 실행 로그 아님 → 실행 로그 0건.
  • 래퍼가 수집기 출력을 >/dev/null 2>&1로 버리기 때문에 로그에 흔적이 남지 않음. 파일 mtime 순서와 executions.db 실행 구간으로 특정함.

판단

  • 즉시 조치: 없음 (정상 설계된 경로. 2026-07-22 수정 주석: "발송 직전에 금리/크레딧 핵심 시리즈만 FRED에서 재수집해 최신 종가 반영")
  • 함의: 시장지표 수집 크론이 꺼져 있어도 IG OAS 등 11개 시리즈는 평일 07:10에 매일 갱신된다. 주간 크레딧 리포트의 IG OAS 입력은 이 경로로 신선도가 유지됨. 단 나머지 35개 시리즈는 macro-series-collector 비활성으로 갱신 여부 별도 확인 필요.
  • 개선 후보(ops_todos 후보, 해리 확인 불필요한 조회 수준): 래퍼의 >/dev/null 2>&1을 로그 파일 리다이렉트로 바꾸면 다음부터 갱신 주체가 로그로 바로 보임 — 코드 변경이므로 codex 위임 대상.

검증 명령

  • stat -f '%Sm' /Users/ron/.hermes/workspace/memory/macro-timeseries/BAMLC0A0CM.json
  • sed -n '10,12p' /Users/ron/.hermes/scripts/migrated/fi-morning-brief.sh
  • cp /Users/ron/.hermes/cron/executions.db /tmp/exec_copy.db && sqlite3 -readonly /tmp/exec_copy.db "SELECT job_id,started_at,finished_at,status FROM executions WHERE job_id='fi-morning-brief' ORDER BY started_at DESC LIMIT 1"