virtual-insanity
← 리포트 목록

batch_J_real

2026-04-14 hermes

Hermes 마이그레이션 batch J — 실제 이전 결과

  • 스냅샷: 2026-04-14 15:35:55 KST
  • 범위: OpenClaw cron 5개를 Hermes shell-job으로 이전, 실패 후보는 rollback
  • LaunchAgents/daemon 변경: 없음
  • 금지 파일(shared/llm.py, shared/cycle_base.py) 변경: 없음

결론

  • 이전 완료: 5개 — Hermes enabled / OpenClaw disabled
  • Rollback: 3개 후보 — Hermes disabled / OpenClaw enabled 유지
  • Hermes gateway/status: 127.0.0.1:18789 healthy, scheduler tick healthy 확인

백업

  • /Users/ron/.hermes/cron/jobs.json.bak-batchJ-20260414150938
  • /Users/ron/.openclaw/cron/jobs.json.bak-batchJ-20260414150938

변경 파일

  • /Users/ron/.hermes/cron/jobs.json: batch J Hermes job 추가/상태 갱신
  • line 3598: ocJ-J000-nepcon
  • line 3649: ocJ-J001-url-enricher
  • line 3700: ocJ-J002-kr-research
  • line 3805: ocJ-J004-vault-flow
  • line 6569: ocJ-J007-hyp-lifecycle
  • line 3751: ocJ-J003-blueprint
  • line 5275: ocJ-J005-daily-validator
  • line 6483: ocJ-J006-daily-kpi
  • /Users/ron/.openclaw/cron/jobs.json: 통과한 OpenClaw job enabled=false, rollback 후보 enabled=true 유지/복구
  • line 1340: nepcon-collector
  • line 5147: cu-url-enricher
  • line 5228: cu-kr-research-collector
  • line 386: vault-flow-health
  • line 5614: hypothesis_lifecycle
  • line 9852: blueprint-updater
  • line 3087: daily-system-validator
  • line 666: daily-kpi-eval
  • /Users/ron/knowledge-agent/400-reports/260414_hermes_batch_J_real.md: 본 보고서

최종 이전 5개

nepcon-collector → ocJ-J000-nepcon

  • OpenClaw line: 1340 / Hermes line: 3598
  • OpenClaw schedule: {'kind': 'cron', 'expr': '37 1,7,13,19 * * *'}
  • OpenClaw final enabled: False
  • Hermes final: enabled=True, state=scheduled, next=2026-04-14T19:37:00+09:00
  • Command: cd /Users/ron/.openclaw/workspace/scripts/pipeline && python3 nepcon_collector.py --collect
  • Output hint: /Users/ron/.openclaw/workspace/memory/nepcon
  • 3회 dual-run 증거:
  • 20260414_151426_nepcon-collector_ocJ-J000-nepcon.json — PASS=True, text_match=True, reasons=None
  • 20260414_151733_nepcon-collector_ocJ-J000-nepcon.json — PASS=True, text_match=True, reasons=None
  • 20260414_152008_nepcon-collector_ocJ-J000-nepcon.json — PASS=True, text_match=True, reasons=None
  • 참고: 최초 1회는 output_hint가 좁아 watch_path_missing이었고, output_hint를 디렉터리로 보정한 뒤 3회 PASS.

cu-url-enricher → ocJ-J001-url-enricher

  • OpenClaw line: 5147 / Hermes line: 3649
  • OpenClaw schedule: {'kind': 'cron', 'expr': '15 2 * * *', 'tz': 'Asia/Seoul'}
  • OpenClaw final enabled: False
  • Hermes final: enabled=True, state=scheduled, next=2026-04-15T02:15:00+09:00
  • Command: PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline:/Users/ron/.openclaw/workspace/scripts python3 /Users/ron/.openclaw/workspace/scripts/pipeline/url_enricher.py --batch-size 30
  • Output hint: /Users/ron/.openclaw/workspace/memory/url-enricher
  • 3회 dual-run 증거:
  • 20260414_151427_cu-url-enricher_ocJ-J001-url-enricher.json — PASS=True, text_match=True, reasons=None
  • 20260414_151735_cu-url-enricher_ocJ-J001-url-enricher.json — PASS=True, text_match=True, reasons=None
  • 20260414_152009_cu-url-enricher_ocJ-J001-url-enricher.json — PASS=True, text_match=True, reasons=None

cu-kr-research-collector → ocJ-J002-kr-research

  • OpenClaw line: 5228 / Hermes line: 3700
  • OpenClaw schedule: {'kind': 'cron', 'expr': '30 9 * * 1-5', 'tz': 'Asia/Seoul'}
  • OpenClaw final enabled: False
  • Hermes final: enabled=True, state=scheduled, next=2026-04-15T09:30:00+09:00
  • Command: PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline python3 /Users/ron/.openclaw/workspace/scripts/pipeline/kr_research_collector.py
  • Output hint: /Users/ron/.openclaw/workspace/memory/cu-research
  • 3회 dual-run 증거:
  • 20260414_151501_cu-kr-research-collector_ocJ-J002-kr-research.json — PASS=True, text_match=True, reasons=None
  • 20260414_151736_cu-kr-research-collector_ocJ-J002-kr-research.json — PASS=True, text_match=True, reasons=None
  • 20260414_152043_cu-kr-research-collector_ocJ-J002-kr-research.json — PASS=True, text_match=True, reasons=None

vault-flow-health → ocJ-J004-vault-flow

  • OpenClaw line: 386 / Hermes line: 3805
  • OpenClaw schedule: {'kind': 'cron', 'expr': '0 7 * * *', 'tz': 'Asia/Seoul'}
  • OpenClaw final enabled: False
  • Hermes final: enabled=True, state=scheduled, next=2026-04-15T07:00:00+09:00
  • Command: cd /Users/ron/.openclaw/workspace/scripts/pipeline && python3 vault_flow_health.py
  • Output hint: /Users/ron/.openclaw/workspace/memory/vault-flow-health
  • 3회 dual-run 증거:
  • 20260414_151731_vault-flow-health_ocJ-J004-vault-flow.json — PASS=True, text_match=True, reasons=None
  • 20260414_152005_vault-flow-health_ocJ-J004-vault-flow.json — PASS=True, text_match=True, reasons=None
  • 20260414_152312_vault-flow-health_ocJ-J004-vault-flow.json — PASS=True, text_match=True, reasons=None

hypothesis_lifecycle → ocJ-J007-hyp-lifecycle

  • OpenClaw line: 5614 / Hermes line: 6569
  • OpenClaw schedule: {'kind': 'cron', 'expr': '45 3 * * *'}
  • OpenClaw final enabled: False
  • Hermes final: enabled=True, state=scheduled, next=2026-04-15T03:45:00+09:00
  • Command: python3 /Users/ron/.openclaw/workspace/scripts/pipeline/hypothesis_lifecycle.py
  • Output hint: /Users/ron/.openclaw/workspace/memory/hypotheses
  • 3회 dual-run 증거:
  • 20260414_153256_hypothesis_lifecycle_ocJ-J007-hyp-lifecycle.json — PASS=True, text_match=True, reasons=None
  • 20260414_153258_hypothesis_lifecycle_ocJ-J007-hyp-lifecycle.json — PASS=True, text_match=True, reasons=None
  • 20260414_153300_hypothesis_lifecycle_ocJ-J007-hyp-lifecycle.json — PASS=True, text_match=True, reasons=None
  • 참고: Hermes shell silent=false 보정 후 stdout 비교가 가능해져 3회 PASS. 현재 run은 파일 수정 0건, 승격 추천 DM만 발생 가능.

Rollback / 제외 후보

blueprint-updater → ocJ-J003-blueprint

  • 판정: rollback — strict diff 불일치 3회
  • OpenClaw final enabled: [True, True]
  • Hermes final: enabled=False, state=paused
  • 20260414_151637_blueprint-updater_ocJ-J003-blueprint.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']
  • 20260414_151912_blueprint-updater_ocJ-J003-blueprint.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']
  • 20260414_152219_blueprint-updater_ocJ-J003-blueprint.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']

daily-system-validator → ocJ-J005-daily-validator

  • 판정: rollback — 4회 중 2회 strict diff 불일치
  • OpenClaw final enabled: [True]
  • Hermes final: enabled=False, state=paused
  • 20260414_152413_daily-system-validator_ocJ-J005-daily-validator.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']
  • 20260414_152417_daily-system-validator_ocJ-J005-daily-validator.json — PASS=True, text_match=True, reasons=None
  • 20260414_152419_daily-system-validator_ocJ-J005-daily-validator.json — PASS=True, text_match=True, reasons=None
  • 20260414_152426_daily-system-validator_ocJ-J005-daily-validator.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']

daily-kpi-eval → ocJ-J006-daily-kpi

  • 판정: rollback — shell shape 보정 후에도 strict diff 불일치
  • OpenClaw final enabled: [True]
  • Hermes final: enabled=False, state=paused
  • 20260414_153021_daily-kpi-eval_ocJ-J006-daily-kpi.json — PASS=False, text_match=False, reasons=['hermes_exec_failed', 'strict_diff_mismatch']
  • 20260414_153024_daily-kpi-eval_ocJ-J006-daily-kpi.json — PASS=False, text_match=False, reasons=['hermes_exec_failed', 'strict_diff_mismatch']
  • 20260414_153026_daily-kpi-eval_ocJ-J006-daily-kpi.json — PASS=False, text_match=False, reasons=['hermes_exec_failed', 'strict_diff_mismatch']
  • 20260414_153103_daily-kpi-eval_ocJ-J006-daily-kpi.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']
  • 20260414_153106_daily-kpi-eval_ocJ-J006-daily-kpi.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']
  • 20260414_153108_daily-kpi-eval_ocJ-J006-daily-kpi.json — PASS=False, text_match=False, reasons=['strict_diff_mismatch']

안전/엣지 케이스

  • 중복 활성화 방지: 최종 5개 OpenClaw id에 대해 active Hermes migration ref가 각각 1개뿐임을 확인.
  • rollback 가드: diff 불일치가 난 blueprint-updater, daily-system-validator, daily-kpi-eval은 Hermes disabled로 되돌리고 OpenClaw enabled 유지.
  • shell job stdout 비교: Hermes shell job은 기본 silent=true면 검증 harness가 [SILENT]만 비교하므로, stdout 동등성 검증이 필요한 J shell job은 silent=false로 유지.
  • 네트워크/DNS: nepcon, cu-url-enricher, cu-kr-research는 현재 DNS 실패를 정상/동등 출력으로 통과했다. 네트워크 복구 시 실제 수집량은 달라질 수 있으나 OpenClaw/Hermes 명령은 동일하다.
  • 알림 side effect: vault-flow-health, hypothesis_lifecycle은 Telegram/ops 알림을 발생시킬 수 있다. 기존 OpenClaw 동작과 동일 계열이며 dual-run 중 중복 알림이 발생했다.
  • 이전된 job은 삭제하지 않았고 OpenClaw enabled=false만 적용했다.

최종 상태 확인

Hermes cron status: Gateway running / HTTP API healthy / Scheduler tick healthy / active jobs 72
Final cutover: ocJ-J000, J001, J002, J004, J007 enabled
Rollback: ocJ-J003, J005, J006 disabled
OpenClaw disabled: nepcon-collector, cu-url-enricher, cu-kr-research-collector, vault-flow-health, hypothesis_lifecycle
OpenClaw kept enabled: blueprint-updater, daily-system-validator, daily-kpi-eval

자체 평가

  • 정확성: 4.8/5 — 5개 cutover와 3개 rollback을 실제 JSON 상태로 확인.
  • 완성도: 4.7/5 — 보고서, 백업, 증거 JSON, 최종 상태 확인 포함.
  • 검증: 4.8/5 — 통과 job별 3회 dual-run PASS, JSON validation, Hermes status 확인.
  • 최소 변경: 4.7/5 — cron 정의 파일 2개와 보고서만 변경. 코드/daemon 변경 없음.
  • 종합: 4.75/5