Hermes migration batch E real
요약
- 최종 이전 성공: 5개
- 검증 기준:
hermes_migration_verify.py,--hermes-exec direct,--once-policy never,--strict-diff, 각 3회 PASS - Cutover: Hermes enabled=true, OpenClaw enabled=false
- Rollback:
ocE-source-quality는 strict diff mismatch로 Hermes disabled, OpenClawjob-fe743793enabled 유지 - 백업:
~/.hermes/cron/jobs.json.bak-batchE-20260414144758,~/.openclaw/cron/jobs.json.bak-batchE-20260414144758 - 금지 준수: LaunchAgents 변경 없음, gateway stop 없음,
shared/llm.py/shared/cycle_base.py수정 없음
최종 이전 5개
industry-news-extractor → ocE-industry-news
- OpenClaw name: 산업 뉴스 NLP 지표 추출
- OpenClaw schedule:
{'kind': 'cron', 'expr': '3 8 * * 3', 'tz': 'Asia/Seoul'} - Command:
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/industry_news_extractor.py - Timeout:
600sec - Output/artifact:
/Users/ron/.openclaw/workspace/memory/market-indicators/industry_news_latest.json - Hermes schedule:
3 8 * * 3/ next2026-04-15T08:03:00+09:00 - Final state: OpenClaw enabled=
False, Hermes enabled=True, Hermes state=scheduled - Dual-run PASS reports:
20260414_145013_industry-news-extractor_ocE-industry-news.json— text_match=True, trigger_delta_ms=1, output=/Users/ron/.hermes/cron/output/ocE-industry-news/2026-04-14_14-50-46.md20260414_145110_industry-news-extractor_ocE-industry-news.json— text_match=True, trigger_delta_ms=1, output=/Users/ron/.hermes/cron/output/ocE-industry-news/2026-04-14_14-51-43.md20260414_145207_industry-news-extractor_ocE-industry-news.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-industry-news/2026-04-14_14-52-41.md
trendforce-collector → ocE-trendforce
- OpenClaw name: TrendForce 지표 수집 (DDR5+LCD)
- OpenClaw schedule:
{'kind': 'cron', 'expr': '0 8 * * 1-5', 'tz': 'Asia/Seoul'} - Command:
PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline python3 /Users/ron/.openclaw/workspace/scripts/pipeline/trendforce_collector.py - Timeout:
300sec - Output/artifact:
/Users/ron/.openclaw/workspace/memory/trendforce-indicators - Hermes schedule:
0 8 * * 1-5/ next2026-04-15T08:00:00+09:00 - Final state: OpenClaw enabled=
False, Hermes enabled=True, Hermes state=scheduled - Dual-run PASS reports:
20260414_145329_trendforce-collector_ocE-trendforce.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-trendforce/2026-04-14_14-53-30.md20260414_145331_trendforce-collector_ocE-trendforce.json— text_match=True, trigger_delta_ms=3, output=/Users/ron/.hermes/cron/output/ocE-trendforce/2026-04-14_14-53-33.md20260414_145334_trendforce-collector_ocE-trendforce.json— text_match=True, trigger_delta_ms=1, output=/Users/ron/.hermes/cron/output/ocE-trendforce/2026-04-14_14-53-35.md
alt-data-collector → ocE-alt-data
- OpenClaw name: 대안 데이터 수집
- OpenClaw schedule:
{'kind': 'cron', 'expr': '55 6 * * 1-5', 'tz': 'Asia/Seoul'} - Command:
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/alt_data_collector.py - Timeout:
300sec - Output/artifact:
/Users/ron/.openclaw/workspace/memory/alt-data/fear-greed.json - Hermes schedule:
55 6 * * 1-5/ next2026-04-15T06:55:00+09:00 - Final state: OpenClaw enabled=
False, Hermes enabled=True, Hermes state=scheduled - Dual-run PASS reports:
20260414_145048_alt-data-collector_ocE-alt-data.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-alt-data/2026-04-14_14-50-49.md20260414_145145_alt-data-collector_ocE-alt-data.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-alt-data/2026-04-14_14-51-46.md20260414_145242_alt-data-collector_ocE-alt-data.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-alt-data/2026-04-14_14-52-43.md
analyst-evolution-tracker → ocE-analyst-evolution
- OpenClaw name: 애널리스트 발전 추적기
- OpenClaw schedule:
{'kind': 'cron', 'expr': '10 8 * * 1-5', 'tz': 'Asia/Seoul'} - Command:
PYTHONPATH=/Users/ron/.openclaw/workspace/scripts python3 /Users/ron/.openclaw/workspace/scripts/pipeline/analyst_evolution_tracker.py - Timeout:
300sec - Output/artifact:
Hermes output md (현재 처리 데이터 0건으로 OpenClaw artifact 없음) - Hermes schedule:
10 8 * * 1-5/ next2026-04-15T08:10:00+09:00 - Final state: OpenClaw enabled=
False, Hermes enabled=True, Hermes state=scheduled - Dual-run PASS reports:
20260414_145330_analyst-evolution-tracker_ocE-analyst-evolution.json— text_match=True, trigger_delta_ms=1, output=/Users/ron/.hermes/cron/output/ocE-analyst-evolution/2026-04-14_14-53-31.md20260414_145333_analyst-evolution-tracker_ocE-analyst-evolution.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-analyst-evolution/2026-04-14_14-53-34.md20260414_145335_analyst-evolution-tracker_ocE-analyst-evolution.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-analyst-evolution/2026-04-14_14-53-36.md
vault-technical-bridge → ocE-technical
- OpenClaw name: 테크니컬 Collector (데이터 수집 + 차트)
- OpenClaw schedule:
{'kind': 'cron', 'expr': '10 7 * * *', 'tz': 'Asia/Seoul'} - Command:
PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline python3 /Users/ron/.openclaw/workspace/scripts/pipeline/technical_collector.py - Timeout:
3600sec - Output/artifact:
/Users/ron/.openclaw/workspace/memory/analyst-context/context-technical.json - Hermes schedule:
10 7 * * */ next2026-04-15T07:10:00+09:00 - Final state: OpenClaw enabled=
False, Hermes enabled=True, Hermes state=scheduled - Dual-run PASS reports:
20260414_145050_vault-technical-bridge_ocE-technical.json— text_match=True, trigger_delta_ms=1, output=/Users/ron/.hermes/cron/output/ocE-technical/2026-04-14_14-51-10.md20260414_145147_vault-technical-bridge_ocE-technical.json— text_match=True, trigger_delta_ms=1, output=/Users/ron/.hermes/cron/output/ocE-technical/2026-04-14_14-52-07.md20260414_145245_vault-technical-bridge_ocE-technical.json— text_match=True, trigger_delta_ms=0, output=/Users/ron/.hermes/cron/output/ocE-technical/2026-04-14_14-53-05.md
Rollback / 제외
job-fe743793→ocE-source-quality: OpenClaw/Hermes 실행은 성공했지만 strict diff에서 섹터 표시 순서가 1줄 달라strict_diff_mismatch. Hermes disabled, OpenClaw enabled 유지.fed-liquidity-aggregator: 현재 날짜 기준 WALCL/RRP/TGA 필수 데이터 없음으로 OpenClaw 자체 실패.research_intelligence_aggregator:save_json_atomic(result, OUTPUT)인자 순서 버그로 OpenClaw 자체 실패.price-history-collector: yfinance DNS/NoneType 실패로 OpenClaw 자체 실패.source-weight-tuner: 사전 실행은 성공했지만 매 실행source_weights.jsonversion을 증가시켜 idempotent 아님. 최종 이전 제외.- 알림/재시작/브라우저/LLM 계열은 Batch E 안전 기준에서 제외.
중복 충돌 확인
- Batch E는
ocE-prefix 사용. - 진행 중 다른 batch의 중복 후보가 jobs.json에 생긴 것을 후반에 확인했으나, 중복 항목들은 대부분 paused/rollback 상태였다. 최종 active cutover는 위 5개
ocE-*로 기록했다. - 이후 batch는
migration.openclaw_id기준으로 active/paused 모두 확인해야 함.
검증 명령
python3 ~/.openclaw/workspace/scripts/hermes_migration_verify.py <openclaw_id> <hermes_id> --once-policy never --hermes-exec direct --strict-diff
python3 -m json.tool ~/.openclaw/cron/jobs.json
python3 -m json.tool ~/.hermes/cron/jobs.json
hermes cron status
현재 상태
- Hermes gateway status: 정상 (
Gateway is running,Scheduler: tick healthy) - Active Hermes jobs count: 24개 확인
- OpenClaw final 5: disabled
- Hermes final 5: active/scheduled
잔존 리스크
- DNS 제한 때문에
industry-news,trendforce,alt-data,technical은 일부 외부 fetch가 실패하지만, OpenClaw/Hermes 출력은 동일하게 재현되어 scheduler 이전 기준은 통과. analyst-evolution은 현재 처리 데이터 0건이라 OpenClaw artifact가 생성되지 않음. 실행 동등성은 Hermes output md와 strict text diff로 확인.- 사전 실행 과정에서
source-weight-tuner가 한 번 실행되어 source_weights version이 증가했다. 최종 이전에서는 제외했고, 반복 실행 위험으로 리스크에 남김.
자체 평가
- 정확성: 4.7/5 — 5개 cutover와 1개 rollback 기준 충족. 중복 batch가 후발로 보여 충돌 리스크를 문서화함.
- 완성도: 4.7/5 — 백업/변환/3회 strict 검증/OpenClaw disable/Hermes enable/보고 완료.
- 검증: 4.8/5 — 각 최종 항목 3회 strict PASS, JSON 유효성, cron status 확인.
- 최소 변경: 4.5/5 — jobs.json만 수정. 다만 사전 실행으로 source-weight side effect가 1회 발생.
종합: 4.7/5