virtual-insanity
← 리포트 목록

reports_recovery

2026-04-14 other

그 외 깨진 리포트 파이프라인 정상화 — 2026-04-14

결론: 대상 Hermes 리포트 파이프라인을 강제 실행해 확인했고, 실제 장애 2건을 복구했다.

  • commodity-alerts morning job은 Hermes에서 pandas import 실패 → wrapper 방식으로 복구 후 재실행 PASS.
  • daily-report는 LLM/무데이터/전송 상태가 success처럼 보이는 관측성 부족 → 상태 메타데이터와 --force를 추가하고 중복 Hermes job 1개를 비활성화.
  • daily-kpi-eval, vault-context-builder, data-freshness-watcher, vault-control-sync는 Hermes 강제 실행 후 산출물 갱신 확인.
  • 알림센터 도달: commodity alert 성공 row 확인, data-freshness 성공 row 확인. daily-report/goal-alignment는 sector route trace 확인.
  • webapp 도달: webapp_refresh.py --dry-run 기준 daily-report 포함 7개 소스가 “오늘 데이터 있음”으로 판정.

변경한 것

1) daily_report.py 관측성 보강

파일: /Users/ron/.openclaw/workspace/scripts/pipeline/daily_report.py

추가한 동작:

  • --force 옵션 추가: 당일 전송 기록이 있어도 수동 복구 검증 시 1회 실행 가능.
  • 분석 상태 메타데이터 기록:
  • last_analysis_status: llm_ok, llm_fallback, llm_parse_failed, no_data
  • last_llm_model
  • last_llm_error
  • last_delivery_ok
  • last_delivery_error
  • last_forced
  • LLM fallback/parse fail 시 stdout에 [DEGRADED] marker 출력.
  • 당일 이미 전송된 경우 stdout에 [SKIP] ... use --force ... 출력.

검증:

  • python3 -m py_compile scripts/pipeline/daily_report.py
  • python3 -m pytest tests/test_daily_report.py -q70 passed
  • Hermes force 실행 성공: /Users/ron/.hermes/cron/output/ocV-V005-daily-report/2026-04-14_19-13-01.md

백업:

  • /Users/ron/.openclaw/workspace/scripts/pipeline/daily_report.py.bak-other-reports-20260414T191002

2) commodity-alerts morning Hermes job 복구

문제:

  • ocAF-AF008-commodity-spike 강제 실행 시 Hermes shell 환경에서 ModuleNotFoundError: No module named 'pandas' 발생.
  • 실패 output: /Users/ron/.hermes/cron/output/ocAF-AF008-commodity-spike/2026-04-14_19-11-59.md

복구:

  • 기존 watch job처럼 wrapper로 실행하도록 변경.
  • 새 wrapper: /Users/ron/.openclaw/workspace/scripts/hermes_wrappers/af_commodity_morning_normalized.sh
  • Hermes ocAF-AF008-commodity-spike command를 wrapper로 교체.

검증:

  • wrapper 직접 실행 성공.
  • Hermes 강제 실행 성공: /Users/ron/.hermes/cron/output/ocAF-AF008-commodity-spike/2026-04-14_19-20-52.md
  • commodity-alerts/latest.json 갱신: 2026-04-14 19:20:52, dry_run=false
  • 알림센터 로그 성공 row 확인: 2026-04-14 19:20:52, topic commodity_spike_analyzer, success=1, message_id=2301

백업:

  • /Users/ron/.hermes/cron/jobs.json.bak-other-reports-commodity-wrapper-20260414T191859

3) daily-report 중복 Hermes job 정리

문제:

  • ocV-V000-daily-marketocV-V005-daily-report가 모두 daily_report.py --notify 계열이라 08:00대 중복 전송 가능.

조치:

  • canonical job은 ocV-V005-daily-report로 유지.
  • duplicate ocV-V000-daily-marketenabled=false, state=paused 처리.
  • 수동 검증을 위해 ocV-V005-daily-report에 일시적으로 --force를 붙여 실행한 뒤 원래 command로 복원.

백업:

  • /Users/ron/.hermes/cron/jobs.json.bak-other-reports-daily-observe-20260414T191026
  • /Users/ron/.hermes/cron/jobs.json.bak-other-reports-force-daily-20260414T191049
  • /Users/ron/.hermes/cron/jobs.json.bak-other-reports-restore-daily-command-20260414T192109

강제 실행 결과

카테고리 Hermes job 운영 모드 결과 산출물/증거
commodity-alerts morning ocAF-AF008-commodity-spike production, dry_run=false, --force 없음 복구 후 PASS output 2026-04-14_19-20-52.md, commodity-alerts/latest.json 19:20:52
commodity-alerts watch ocAN-AN000-commodity-watch production, dry_run=false, wrapper PASS output 2026-04-14_19-12-02.md, 급변 없음 정상 종료
daily-report ocV-V005-daily-report production notify, 수동 검증 때만 --force PASS output 2026-04-14_19-13-01.md, state 19:13:01
daily-kpi-eval ocV-V006-daily-kpi production PASS output 2026-04-14_19-14-04.md, goal-alignment/latest.json 19:14:02
vault-context-builder ocG-010 production PASS output 2026-04-14_19-15-06.md, /Users/ron/.claude/vault-context.md 19:15:06
data-freshness-watcher ocAF-AF006-data-freshness production PASS output 2026-04-14_19-17-02.md, 갱신 2/실패 0
daily-system-validator ocAH-AH000-daily-system-validator-dry-run dry-run 유지 PASS output 2026-04-14_19-18-02.md, 발송 스킵 명시
vault-control-sync ocA-vault-control report mode PASS output 2026-04-14_19-18-34.md, latest_report.json 19:18:34

run 결과 원본 JSON:

  • /Users/ron/.openclaw/workspace/verification/other-reports-recovery/run_results_20260414T191835.json

운영 모드 점검

  • ocAF-AF008-commodity-spike: production. command에 --dry-run 없음, latest.jsondry_run=false.
  • ocAN-AN000-commodity-watch: production. wrapper 내부 command에 --dry-run 없음.
  • ocV-V005-daily-report: production notify. 정규 command는 daily_report.py --notify; 수동 검증 때만 임시 --force 사용 후 복원 완료.
  • ocV-V006-daily-kpi: production.
  • ocG-010: production.
  • ocAF-AF006-data-freshness: production.
  • ocAH-AH000-daily-system-validator-dry-run: dry-run job. 알림 발송 목적이 아니라 시스템 점검 미리보기로 유지됨.
  • ocA-vault-control: report mode.

알림센터 / webapp 도달 확인

알림센터 DB notification_center_log 확인:

  • 2026-04-14 19:20:52 commodity_spike_analyzer, success=1, message_id=2301
  • 2026-04-14 19:17:02 data_freshness_watcher, success=1, message_id=2300

Sector trace 확인:

  • 2026-04-14 19:13:00 send_sector(report) caller daily_report.py
  • 2026-04-14 19:14:02 send_sector(ops) caller goal_alignment.py
  • 2026-04-14 19:16:59 send_sector(market) caller vault_technical_bridge.py — data-freshness가 테크니컬 브리핑을 재생성하면서 발송

Webapp 신선도 확인:

  • python3 scripts/pipeline/webapp_refresh.py --dry-run
  • 결과: daily-report는 “오늘 데이터 있음”으로 판정.
  • current-webapp-url.txt 존재: https://arrested-cumulative-fellow-showed.trycloudflare.com
  • dry-run 결과에서 오늘 데이터 있음: market-indicators, daily-report, vault-flow-health, sector-news, analyst-macro, analyst-fundamental, analyst-pm
  • 미해결 freshness 경고: geopolitical stale, analyst-technical agent-based라 직접 실행 불가.

현재 Hermes 상태

  • hermes cron status: Gateway running, HTTP API healthy, Scheduler tick healthy.
  • active jobs: 158
  • 확인한 주요 jobs:
  • ocAF-AF008-commodity-spike: enabled, scheduled, last_status ok, 2026-04-14T19:20:52+09:00
  • ocAN-AN000-commodity-watch: enabled, scheduled, last_status ok, 2026-04-14T19:12:02+09:00
  • ocV-V005-daily-report: enabled, scheduled, last_status ok, 2026-04-14T19:13:01+09:00
  • ocV-V000-daily-market: disabled/paused duplicate
  • ocV-V006-daily-kpi: enabled, scheduled, last_status ok, 2026-04-14T19:14:04+09:00
  • ocG-010: enabled, scheduled, last_status ok, 2026-04-14T19:15:06+09:00
  • ocAF-AF006-data-freshness: enabled, scheduled, last_status ok, 2026-04-14T19:17:02+09:00
  • ocAH-AH000-daily-system-validator-dry-run: enabled, scheduled, last_status ok, 2026-04-14T19:18:02+09:00
  • ocA-vault-control: enabled, scheduled, last_status ok, 2026-04-14T19:18:34+09:00

안전 확인

  • shared/llm.py 수정 없음. mtime: Apr 14 12:53:12 2026
  • 데이터 합성 없음. 빈 데이터는 no_data로 기록했고 임의 내용 생성하지 않음.
  • daily_report.py tests: 70 passed
  • 구문 확인:
  • python3 -m py_compile daily_report.py commodity_spike_analyzer.py
  • bash -n af_commodity_morning_normalized.sh

Remaining Risks

  • daily-report는 정상 실행/전송은 됐지만 실제 집계 데이터가 0 posts / 0 tweets / 0 group shares였다. 파이프라인 장애는 아니며, 합성 없이 no_data로 기록했다.
  • geopolitical은 webapp_refresh 기준 stale이고, 이번 요청의 명시 후보는 아니라 실행하지 않았다.
  • analyst-technical은 webapp_refresh 기준 stale이지만 agent-based라 해당 refresh 스크립트가 직접 실행하지 않는다. 별도 agent job 점검 필요.
  • commodity_spike_analyzer.py는 여전히 send_dm() 반환값을 성공/실패로 강제 exit code화하지 않는다. 이번에는 알림센터 success=1을 확인했지만, 전송 실패를 cron failure로 승격하려면 추가 수정이 필요하다.

자체평가

  • 정확성: 4.5/5
  • 완성도: 4.5/5
  • 검증: 4.7/5
  • 최소 변경: 4.5/5
  • 종합: 4.55/5