그 외 깨진 리포트 파이프라인 정상화 — 2026-04-14
결론: 대상 Hermes 리포트 파이프라인을 강제 실행해 확인했고, 실제 장애 2건을 복구했다.
commodity-alertsmorning job은 Hermes에서pandasimport 실패 → 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_datalast_llm_modellast_llm_errorlast_delivery_oklast_delivery_errorlast_forced- LLM fallback/parse fail 시 stdout에
[DEGRADED]marker 출력. - 당일 이미 전송된 경우 stdout에
[SKIP] ... use --force ...출력.
검증:
python3 -m py_compile scripts/pipeline/daily_report.pypython3 -m pytest tests/test_daily_report.py -q→70 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-spikecommand를 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, topiccommodity_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-market와ocV-V005-daily-report가 모두daily_report.py --notify계열이라 08:00대 중복 전송 가능.
조치:
- canonical job은
ocV-V005-daily-report로 유지. - duplicate
ocV-V000-daily-market은enabled=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.json도dry_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:52commodity_spike_analyzer,success=1,message_id=23012026-04-14 19:17:02data_freshness_watcher,success=1,message_id=2300
Sector trace 확인:
2026-04-14 19:13:00send_sector(report)callerdaily_report.py2026-04-14 19:14:02send_sector(ops)callergoal_alignment.py2026-04-14 19:16:59send_sector(market)callervault_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 경고:
geopoliticalstale,analyst-technicalagent-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:00ocAN-AN000-commodity-watch: enabled, scheduled, last_status ok,2026-04-14T19:12:02+09:00ocV-V005-daily-report: enabled, scheduled, last_status ok,2026-04-14T19:13:01+09:00ocV-V000-daily-market: disabled/paused duplicateocV-V006-daily-kpi: enabled, scheduled, last_status ok,2026-04-14T19:14:04+09:00ocG-010: enabled, scheduled, last_status ok,2026-04-14T19:15:06+09:00ocAF-AF006-data-freshness: enabled, scheduled, last_status ok,2026-04-14T19:17:02+09:00ocAH-AH000-daily-system-validator-dry-run: enabled, scheduled, last_status ok,2026-04-14T19:18:02+09:00ocA-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.pytests:70 passed- 구문 확인:
python3 -m py_compile daily_report.py commodity_spike_analyzer.pybash -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