2026-04-14 Hermes migration batch L (real)
결론
Batch L에서 OpenClaw cron 5개를 Hermes shell-job으로 실제 이전했다. 5개 모두 hermes_migration_verify.py strict dual-run 3회 통과 후 OpenClaw 쪽은 enabled=false, Hermes 쪽은 enabled=true / scheduled로 전환했다.
LaunchAgents, gateway, shared/llm.py, shared/cycle_base.py는 수정하지 않았다.
백업
- Hermes 백업:
/Users/ron/.hermes/cron/jobs.json.bak-batchL-20260414150829 - OpenClaw 비활성화 전 백업:
/Users/ron/.openclaw/cron/jobs.json.bak-batchL-20260414151154
최종 이전 5개
| OpenClaw ID | Hermes ID | 형식 | 최종 상태 |
|---|---|---|---|
methodology-feedback-inbox |
ocL-L000 |
shell | OpenClaw disabled / Hermes scheduled |
deep-dive-vault-publisher |
ocL-L001 |
shell | OpenClaw disabled / Hermes scheduled |
indicator-extractor |
ocL-L002 |
shell | OpenClaw disabled / Hermes scheduled |
analyst-quality-tracker |
ocL-L004 |
shell | OpenClaw disabled / Hermes scheduled |
media_enricher |
ocL-L005 |
shell | OpenClaw disabled / Hermes scheduled |
검증 결과
methodology-feedback-inbox → ocL-L000
- Command:
cd /Users/ron/.openclaw/workspace && python3 /Users/ron/.openclaw/workspace/scripts/pipeline/methodology_inbox.py - Watch:
/Users/ron/.openclaw/workspace/memory/methodology-feedback - PASS 3/3:
/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_150853_methodology-feedback-inbox_ocL-L000.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_150906_methodology-feedback-inbox_ocL-L000.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_150918_methodology-feedback-inbox_ocL-L000.json
deep-dive-vault-publisher → ocL-L001
- Command:
cd /Users/ron/.openclaw/workspace && PYTHONPATH=scripts python3 scripts/pipeline/deep_dive_to_vault.py - Watch:
/Users/ron/.openclaw/workspace/memory/analyst-fundamental/latest.json - Note: 현재 converge 항목이 없어 no-op 정상 종료. 원래 output state는 새 발행 항목이 있을 때만 생긴다.
- PASS 3/3:
/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151021_deep-dive-vault-publisher_ocL-L001.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151022_deep-dive-vault-publisher_ocL-L001.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151023_deep-dive-vault-publisher_ocL-L001.json
indicator-extractor → ocL-L002
- Command:
cd /Users/ron/.openclaw/workspace && PYTHONPATH=scripts python3 scripts/pipeline/indicator_extractor.py --collect --days 2 2>&1 | tail -15 - Watch:
/Users/ron/.openclaw/workspace/memory/extracted-indicators - PASS 3/3:
/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_150856_indicator-extractor_ocL-L002.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_150909_indicator-extractor_ocL-L002.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_150921_indicator-extractor_ocL-L002.json
analyst-quality-tracker → ocL-L004
- Command:
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/analyst_quality_tracker.py - Watch:
/Users/ron/.openclaw/workspace/memory/analyst-quality - Hermes setting:
silent=true - 이유: 원본 stdout이 비어 있어 Hermes wrapper의 기본 “completed” 문구가 strict diff를 깨뜨렸음.
- PASS 3/3:
/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151004_analyst-quality-tracker_ocL-L004.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151007_analyst-quality-tracker_ocL-L004.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151010_analyst-quality-tracker_ocL-L004.json
media_enricher → ocL-L005
- Command:
PYTHONPATH=/Users/ron/.openclaw/workspace/scripts python3 /Users/ron/.openclaw/workspace/scripts/pipeline/media_enricher.py --limit 50 - Watch:
/Users/ron/.openclaw/workspace/workspace/memory/media_enricher_state.json - Note: script의 현재
STATE_FILE계산이workspace/workspace/memory로 해석된다. 코드 수정은 하지 않고 실제 쓰는 경로만 watch에 반영했다. - PASS 3/3:
/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151121_media_enricher_ocL-L005.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151123_media_enricher_ocL-L005.json/Users/ron/.openclaw/workspace/verification/hermes-migration/20260414_151125_media_enricher_ocL-L005.json
최종 상태 확인
| 항목 | 상태 |
|---|---|
| JSON 파싱 | ~/.hermes/cron/jobs.json, ~/.openclaw/cron/jobs.json 모두 OK |
| OpenClaw 5개 | 모두 enabled=false, state.hermesId=ocL-* 기록됨 |
| Hermes 5개 | 모두 enabled=true, state=scheduled, last_status=ok |
| 중복 검사 | 최종 5개는 다른 Hermes migration openclaw_id와 중복 없음 |
Hermes next run:
- ocL-L005: 2026-04-15T03:00:00+09:00
- ocL-L000: 2026-04-15T06:00:00+09:00
- ocL-L001: 2026-04-15T08:00:00+09:00
- ocL-L004: 2026-04-15T08:10:00+09:00
- ocL-L002: 2026-04-15T15:00:00+09:00
Rollback / 제외
| Hermes ID | OpenClaw ID | 이유 | 상태 |
|---|---|---|---|
ocL-L003 |
sector-research-daily |
strict 3/3 PASS였지만 batch K/M과 중복 확인 | Hermes disabled, OpenClaw 유지 |
관찰된 이슈
deep_dive_to_vault.py는 현재 no-op이면 자체 state 파일을 만들지 않는다. 검증 harness용 watch는 기존 입력 메모리 파일로 대체했다.analyst_quality_tracker.py는 성공 시 stdout이 비어 있다. Hermes shell wrapper 문구와 diff가 나므로silent=true가 필요했다.media_enricher.py의STATE_FILE이/Users/ron/.openclaw/workspace/workspace/memory/media_enricher_state.json로 잡힌다. 이번 작업에서는 코드 수정 금지라 실제 경로만 기록했다.- 후보 사전 점검 중
sector-research-daily가 batch K/M과 충돌했다. 이후 batch는 최종 전환 직전에도 migration metadata 재조회가 필수다.
자체 평가
- 정확성: 4.9/5 — 최종 5개는 3회 strict 검증 후만 전환했고 중복 후보는 rollback.
- 완성도: 4.8/5 — 변환/검증/상태/백업/이슈 기록 완료.
- 검증: 5/5 — strict dual-run 15 PASS + JSON 파싱 + 최종 enabled 상태 확인.
- 최소 변경: 4.8/5 — cron JSON 두 개만 변경. 중간 중복 후보
ocL-L003은 disabled 처리.
종합: 4.88/5