Hermes migration batch M real — 2026-04-14
결론
- batch M 최종 실제 이전: 5개 완료. 완료된 5개는 Hermes enabled/scheduled, OpenClaw
enabled=false. - 삭제 없음. LaunchAgents 변경 없음.
shared/llm.py,shared/cycle_base.py변경 없음. Gateway PID 63520 유지 확인. - batch K와 겹친 2개(
vault-flow-health,sector-research-daily)는 batch M 중복 잡을 pause/yield하고 K 소유 잡을 유지했다. - strict dual-run 실패 항목은 Hermes 비활성 + OpenClaw enabled 유지로 rollback했다.
최종 이전 5개
| OpenClaw id | Hermes id | schedule | 변환 | dual-run | 최종 상태 | evidence |
|---|---|---|---|---|---|---|
job-16806fbe |
ocM-M003-analyst-backtest |
35 9 * * * |
shell analyst_prediction_backfill.py |
1:PASS 2:PASS 3:PASS |
Hermes scheduled enabled=True / OpenClaw enabled=False |
/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M003-analyst-backtest/cycle-1/20260414_150949_job-16806fbe_ocM-M003-analyst-backtest.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M003-analyst-backtest/cycle-2/20260414_150950_job-16806fbe_ocM-M003-analyst-backtest.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M003-analyst-backtest/cycle-3/20260414_150951_job-16806fbe_ocM-M003-analyst-backtest.json |
skill-health |
ocM-M007-skill-health |
10 8 * * 1 |
shell skill_health.py |
1:PASS 2:PASS 3:PASS |
Hermes scheduled enabled=True / OpenClaw enabled=False |
/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M007-skill-health/cycle-1/20260414_152328_skill-health_ocM-M007-skill-health.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M007-skill-health/cycle-2/20260414_152329_skill-health_ocM-M007-skill-health.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M007-skill-health/cycle-3/20260414_152330_skill-health_ocM-M007-skill-health.json |
intelligence-market-indicator-tracker |
ocM-M014-market-indicator-tracker |
5 7,9,11,13,15,17 * * 1-5 |
shell market_indicator_tracker.py --notify |
1:PASS 2:PASS 3:PASS |
Hermes scheduled enabled=True / OpenClaw enabled=False |
/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M014-market-indicator-tracker/cycle-1/20260414_152505_intelligence-market-indicator-tracker_ocM-M014-market-indicator-tracker.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M014-market-indicator-tracker/cycle-2/20260414_152507_intelligence-market-indicator-tracker_ocM-M014-market-indicator-tracker.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M014-market-indicator-tracker/cycle-3/20260414_152509_intelligence-market-indicator-tracker_ocM-M014-market-indicator-tracker.json |
semiconductor-report |
ocM-M017-semiconductor-report |
0 7 * * 1 |
shell semiconductor_cycle_tracker.py --report --notify |
1:PASS 2:PASS 3:PASS |
Hermes scheduled enabled=True / OpenClaw enabled=False |
/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M017-semiconductor-report/cycle-1/20260414_153116_semiconductor-report_ocM-M017-semiconductor-report.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M017-semiconductor-report/cycle-2/20260414_153118_semiconductor-report_ocM-M017-semiconductor-report.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M017-semiconductor-report/cycle-3/20260414_153119_semiconductor-report_ocM-M017-semiconductor-report.json |
intelligence-blog-monitor |
ocM-M019-blog-monitor |
every 6h → interval 360m |
shell blog_monitor.py --notify |
1:PASS 2:PASS 3:PASS |
Hermes scheduled enabled=True / OpenClaw enabled=False |
/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M019-blog-monitor/cycle-1/20260414_153237_intelligence-blog-monitor_ocM-M019-blog-monitor.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M019-blog-monitor/cycle-2/20260414_153239_intelligence-blog-monitor_ocM-M019-blog-monitor.json/Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M019-blog-monitor/cycle-3/20260414_153240_intelligence-blog-monitor_ocM-M019-blog-monitor.json |
중복 감지 및 정리
| 항목 | 조치 | 현재 상태 |
|---|---|---|
vault-flow-health / ocM-M001-vault-flow-health |
M에서도 3회 PASS했지만 batch K ocK-K004-vault-flow와 중복 확인. M job pause/yield. |
OpenClaw는 K 소유로 disabled, K Hermes scheduled |
sector-research-daily / ocM-M004-sector-research |
M에서도 3회 PASS했지만 batch K ocK-K000-sector-research와 중복 확인. M job pause/yield. |
OpenClaw는 K 소유로 disabled, K Hermes scheduled |
job-16806fbe |
batch K가 중복을 감지하고 M으로 yield. | M ocM-M003-analyst-backtest가 최종 소유 |
Rollback / 미이전 항목
| OpenClaw id | Hermes id | 실패 이유 | 최종 조치 | evidence |
|---|---|---|---|---|
daily-system-validator |
ocM-M000-daily-system-validator |
strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M000-daily-system-validator/cycle-1/20260414_150934_daily-system-validator_ocM-M000-daily-system-validator.json |
morning-review |
ocM-M002-morning-review |
openclaw_failed, strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M002-morning-review/cycle-1/20260414_150945_morning-review_ocM-M002-morning-review.json |
nepcon-collector |
ocM-M005-nepcon-collector |
watch_path_missing | Hermes enabled=False state=paused; OpenClaw enabled=False; note: other batch ocJ-J000-nepcon is active owner | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M005-nepcon-collector/cycle-1/20260414_151101_nepcon-collector_ocM-M005-nepcon-collector.json |
e7de6599-f6f5-4ce7-b508-15634f225407 |
ocM-M006-domain-wiki-compiler |
openclaw_failed, hermes_exec_failed, watch_path_missing | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M006-domain-wiki-compiler/cycle-1/20260414_151102_e7de6599-f6f5-4ce7-b508-15634f225407_ocM-M006-domain-wiki-compiler.json |
vault-lint-daily |
ocM-M008-vault-lint-daily |
strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M008-vault-lint-daily/cycle-1/20260414_152332_vault-lint-daily_ocM-M008-vault-lint-daily.json |
daily-report |
ocM-M009-daily-report |
strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M009-daily-report/cycle-1/20260414_152338_daily-report_ocM-M009-daily-report.json |
task-briefing-morning |
ocM-M010-task-briefing-morning |
strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M010-task-briefing-morning/cycle-1/20260414_152343_task-briefing-morning_ocM-M010-task-briefing-morning.json |
daily-code-review |
ocM-M011-daily-code-review |
openclaw_failed, hermes_exec_failed, strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M011-daily-code-review/cycle-1/20260414_152421_daily-code-review_ocM-M011-daily-code-review.json |
critic-watcher-10m |
ocM-M012-critic-watcher |
watch_path_missing, strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M012-critic-watcher/cycle-1/20260414_152454_critic-watcher-10m_ocM-M012-critic-watcher.json |
bond-morning-poll |
ocM-M013-bond-morning-poll |
openclaw_failed, hermes_exec_failed, strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M013-bond-morning-poll/cycle-1/20260414_152504_bond-morning-poll_ocM-M013-bond-morning-poll.json |
vault_linker |
ocM-M016-vault-linker |
strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M016-vault-linker/cycle-1/20260414_152627_vault_linker_ocM-M016-vault-linker.json |
bond-daily-report |
ocM-M018-bond-daily-report |
watch_path_missing, strict_diff_mismatch | Hermes enabled=False state=paused; OpenClaw enabled=True | /Users/ron/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M018-bond-daily-report/cycle-1/20260414_152825_bond-daily-report_ocM-M018-bond-daily-report.json |
백업
/Users/ron/.hermes/cron/jobs.json.bak-batchM-additional-20260414152328/Users/ron/.hermes/cron/jobs.json.bak-batchM-blog-nowatch-20260414153237/Users/ron/.hermes/cron/jobs.json.bak-batchM-dedupe-20260414151902/Users/ron/.hermes/cron/jobs.json.bak-batchM-finalfill-20260414152614/Users/ron/.hermes/cron/jobs.json.bak-batchM-finalfill-20260414152627/Users/ron/.hermes/cron/jobs.json.bak-batchM-more-20260414152421/Users/ron/.hermes/cron/jobs.json.bak-batchM-paused-next-null-20260414153311/Users/ron/.hermes/cron/jobs.json.bak-batchM-real-20260414150934/Users/ron/.hermes/cron/jobs.json.bak-batchM-reenableK-20260414151929/Users/ron/.hermes/cron/jobs.json.bak-batchM-repl-20260414151100/Users/ron/.hermes/cron/jobs.json.bak-batchM-rescue-nowatch-20260414153012/Users/ron/.hermes/cron/jobs.json.bak-batchM-rescue2-20260414153116/Users/ron/.openclaw/cron/jobs.json.bak-batchM-additional-20260414152328/Users/ron/.openclaw/cron/jobs.json.bak-batchM-blog-nowatch-20260414153237/Users/ron/.openclaw/cron/jobs.json.bak-batchM-dedupe-20260414151902/Users/ron/.openclaw/cron/jobs.json.bak-batchM-finalfill-20260414152614/Users/ron/.openclaw/cron/jobs.json.bak-batchM-finalfill-20260414152627/Users/ron/.openclaw/cron/jobs.json.bak-batchM-more-20260414152421/Users/ron/.openclaw/cron/jobs.json.bak-batchM-real-20260414150934/Users/ron/.openclaw/cron/jobs.json.bak-batchM-repl-20260414151100/Users/ron/.openclaw/cron/jobs.json.bak-batchM-rescue-nowatch-20260414153012/Users/ron/.openclaw/cron/jobs.json.bak-batchM-rescue2-20260414153116
최종 검증
python3 -m json.tool ~/.hermes/cron/jobs.json통과python3 -m json.tool ~/.openclaw/cron/jobs.json통과hermes cron status: gateway/API/scheduler healthy, active jobs 71, 다음 run 2026-04-14T15:40:00+09:00lsof -nP -iTCP:18789 -sTCP:LISTEN: Python PID 63520 listen 확인
Remaining Risks
- Telegram/network 출력이 OpenClaw와 Hermes에서 비결정적으로 달라 strict diff 실패가 반복됐다. 실패 항목은 모두 OpenClaw 유지.
- no-op 상태에서 산출 파일이 없을 수 있는 job(
semiconductor-report,intelligence-blog-monitor)은 watch 없이 strict output 3회로 판정했다. 현재 출력은 OpenClaw와 Hermes가 동일하지만, 실제 데이터가 생기는 날 산출물 생성 경로는 다음 batch에서 한 번 더 관찰하는 것이 좋다. market_indicator_tracker는 현 네트워크 상태에서 “No indicators collected” 출력이 양쪽 동일해 이전했다. 네트워크 복구 후 정상 수집 경로에서 추가 관찰 권장.- batch M 수행 중
vault_linkerdual-run 1회가 실제 vault-linker 처리를 수행했으나 strict diff mismatch로 rollback했다. OpenClaw는 유지되어 있으나, 해당 dual-run 자체가 일부 링크/메타데이터를 갱신했을 수 있다. - 시도 수가 5개를 초과했다. 원인: 동시 batch K 중복과 watch-path 오판. 최종 enabled 전환은 strict 3회 통과한 5개만 적용했다.
자체평가
- 자체평가: 4.7/5
- 정확성 4.8: 최종 5개는 strict dual-run 3회 통과 후 OpenClaw disabled 처리.
- 완성도 4.6: 실패/중복 항목 rollback 및 보고까지 완료.
- 검증 4.8: JSON/gateway/PID/final state 확인.
- 최소변경 4.4: 중복/오판으로 시도 수가 늘어난 점 감점.