Hermes batch AM 실제 이전 리포트
- 시작: 2026-04-14T16:39:52+09:00
- Hermes backup:
/Users/ron/.hermes/cron/jobs.json.bak-batchAM-20260414_163952 - OpenClaw backup:
/Users/ron/.openclaw/cron/jobs.json.bak-batchAM-20260414_163952 -
기준: strict 미선점은 고갈. OpenClaw enabled + Hermes enabled owner 없음 + disabled placeholder만 있는 후보를 재검증.
-
candidate
etf-insight-extractor: prior disabled claims=['ocAI-AI001'] - candidate
commodity-spike-watch: prior disabled claims=['ocQ-Q002'] - candidate
etf-data-collect-domestic-index: prior disabled claims=['ocC-etf-dom-idx'] - candidate
cu-queue-processor: prior disabled claims=['ocQ-Q006'] - candidate
jisik-promote-dkzkyq: prior disabled claims=['ocQ-Q011'] - candidate
etf-data-collect-domestic-value: prior disabled claims=['ocQ-Q014'] - candidate
gmail-credit-monitor: prior disabled claims=['ocQ-Q007']
검증: etf-insight-extractor → ocAM-AM000-etf-insight-extractor
- rationale: Y에서 1회 strict diff 후 2026-04-14 state가 생겼으므로 안정화 재검증
- command:
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/etf_insight_extractor.py - schedule:
25 16 * * 1-5 - cycle 1: rc=0, verdict=ok, diff_ok=None, elapsed=1.86s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM000-etf-insight-extractor/cycle-1 - cycle 2: rc=0, verdict=ok, diff_ok=None, elapsed=1.87s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM000-etf-insight-extractor/cycle-2 - cycle 3: rc=0, verdict=ok, diff_ok=None, elapsed=1.86s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM000-etf-insight-extractor/cycle-3 - 최종 상태: MIGRATED
검증: commodity-spike-watch → ocAM-AM001-commodity-spike-watch
- rationale: Q에서 1회 pass 이력, OpenClaw는 아직 enabled
- command:
cd /Users/ron/.openclaw/workspace && PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline:/Users/ron/.openclaw/workspace/scripts python3 scripts/pipeline/commodity_spike_analyzer.py --mode watch - schedule:
*/30 10-23 * * 1-5 - cycle 1: rc=2, verdict=fail, diff_ok=None, elapsed=1.74s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM001-commodity-spike-watch/cycle-1
th 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020\n warnings.warn(\n 6 Failed downloads:\n-['GC=F', 'CL=F', 'NG=F', 'SI=F', 'HG=F', '^VIX']: TypeError(\"'NoneType' object is not subscriptable\")\n+['^VIX', 'HG=F', 'GC=F', 'CL=F', 'NG=F', 'SI=F']: TypeError(\"'NoneType' object is not subscriptable\")",
"strict_diff": true,
"text_match": false,
"watched_before": [
{
"path": "/Users/ron/.openclaw/workspace/memory/commodity-alerts",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1776152195132770515,
"sha256": null,
"file_count": 2,
"total_size": 2504,
"digest": "9602ed49c910d95c02480815130281f338d041e782f296213d6cd01e8c9066c9",
"sample_files": [
"2026-04-14.json",
"latest.json"
]
}
],
"watched_after": [
{
"path": "/Users/ron/.openclaw/workspace/memory/commodity-alerts",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1776152195132770515,
"sha256": null,
"file_count": 2,
"total_size": 2504,
"digest": "9602ed49c910d95c02480815130281f338d041e782f296213d6cd01e8c9066c9",
"sample_files": [
"2026-04-14.json",
"latest.json"
]
}
],
"watched_changed": [],
"verdict": {
"ok": false,
"openclaw_ok": true,
"hermes_trigger_ok": true,
"hermes_exec_ok": true,
"watch_ok": true,
"text_match": false,
"strict_diff": true,
"trigger_delta_ms": 0,
"changed_watch_paths": [],
"reasons": [
"strict_diff_mismatch"
]
},
"report_path": "/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM001-commodity-spike-watch/cycle-1/20260414_163958_commodity-spike-watch_ocAM-AM001-commodity-spike-watch.json"
}
- 최종 상태: ROLLBACK
검증: etf-data-collect-domestic-index → ocAM-AM002-etf-domestic-index
- rationale: 국내지수 ETF, 최근 144초 성공, enabled owner 없음
- command:
python3 /Users/ron/.openclaw/skills/etf-tracker/scripts/run_etf_tracker.py domestic_index - schedule:
0 16 * * 1-5 - cycle 1: rc=2, verdict=fail, diff_ok=None, elapsed=261.19s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM002-etf-domestic-index/cycle-1
:00",
"duration_ms": 260004,
"stdout": "",
"stderr": "",
"timed_out": true,
"error": "timeout after 260s"
},
"hermes_output_file": null,
"hermes_response": "",
"text_diff": "",
"strict_diff": true,
"text_match": true,
"watched_before": [
{
"path": "/Users/ron/.openclaw/skills/etf-tracker/knowledge/logs",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1774995471550605789,
"sha256": null,
"file_count": 3,
"total_size": 15419,
"digest": "4f964d34bcbcc9e443f4e82c6862e4b65cbe3068e94c885a1808dcee4b9aa938",
"sample_files": [
"2026-02_execution.md",
"2026-03_execution.md",
"2026-04_execution.md"
]
}
],
"watched_after": [
{
"path": "/Users/ron/.openclaw/skills/etf-tracker/knowledge/logs",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1774995471550605789,
"sha256": null,
"file_count": 3,
"total_size": 15419,
"digest": "4f964d34bcbcc9e443f4e82c6862e4b65cbe3068e94c885a1808dcee4b9aa938",
"sample_files": [
"2026-02_execution.md",
"2026-03_execution.md",
"2026-04_execution.md"
]
}
],
"watched_changed": [],
"verdict": {
"ok": false,
"openclaw_ok": false,
"hermes_trigger_ok": true,
"hermes_exec_ok": false,
"watch_ok": true,
"text_match": true,
"strict_diff": true,
"trigger_delta_ms": 0,
"changed_watch_paths": [],
"reasons": [
"openclaw_failed",
"hermes_exec_failed"
]
},
"report_path": "/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM002-etf-domestic-index/cycle-1/20260414_163959_etf-data-collect-domestic-index_ocAM-AM002-etf-domestic-index.json"
}
- 최종 상태: ROLLBACK
검증: cu-queue-processor → ocAM-AM003-cu-queue-processor
- rationale: CU queue processor, 최근 11초 성공, enabled owner 없음
- 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/cu_queue_processor.py --batch-size 20 - schedule:
20 2 * * * - cycle 1: rc=2, verdict=fail, diff_ok=None, elapsed=1.55s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM003-cu-queue-processor/cycle-1
_port_rendezvous_mac.cc:155] Check failed: kr == KERN_SUCCESS. bootstrap_check_in org.chromium.Chromium.MachPortRendezvousServer.30499: Permission denied (1100)\n - [pid=<pid>] <gracefully close start>\n - [pid=<pid>] <kill>\n - [pid=<pid>] <will force kill>",
"strict_diff": true,
"text_match": false,
"watched_before": [
{
"path": "/Users/ron/.openclaw/workspace/memory/cu-fetch-queue",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1776152562523154338,
"sha256": null,
"file_count": 1,
"total_size": 27226,
"digest": "628f0d7ff0ff1b6f35dee04c88ea7e7f57c80bd2519b4fe295eab35b58bb266d",
"sample_files": [
"pending.json"
]
}
],
"watched_after": [
{
"path": "/Users/ron/.openclaw/workspace/memory/cu-fetch-queue",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1776152662547022959,
"sha256": null,
"file_count": 1,
"total_size": 27226,
"digest": "c990d81001bcd927c454aa1384db43e9a2a771dd1867167be9ddfe5fe7182dd0",
"sample_files": [
"pending.json"
]
}
],
"watched_changed": [
"/Users/ron/.openclaw/workspace/memory/cu-fetch-queue"
],
"verdict": {
"ok": false,
"openclaw_ok": true,
"hermes_trigger_ok": true,
"hermes_exec_ok": true,
"watch_ok": true,
"text_match": false,
"strict_diff": true,
"trigger_delta_ms": 1,
"changed_watch_paths": [
"/Users/ron/.openclaw/workspace/memory/cu-fetch-queue"
],
"reasons": [
"strict_diff_mismatch"
]
},
"report_path": "/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM003-cu-queue-processor/cycle-1/20260414_164421_cu-queue-processor_ocAM-AM003-cu-queue-processor.json"
}
- 최종 상태: ROLLBACK
검증: jisik-promote-dkzkyq → ocAM-AM004-jisik-promote
- rationale: 지식사랑방 승격, 최근 13초 성공, enabled owner 없음
- command:
PYTHONPATH=scripts python3 scripts/pipeline/note_atomizer.py --promote --inbox-dir '120 지식사랑방' --batch-size 100 - schedule:
15 3 * * * - cycle 1: rc=2, verdict=fail, diff_ok=None, elapsed=18.52s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM004-jisik-promote/cycle-1
tive=40\n+[<timestamp>] [99/100] 참조 260324_articles... score=40 weight=1.0 effective=40\n+[<timestamp>] [100/100] 미국 텍사스주 포트아서의 정유 공장에서 폭발로 추정되는 사고 발생 이후 ... score=50 weight=1.5 effective=75\n+[<timestamp>] 승격: 260324_articles_미국_텍사스주_포트아서의_정유_공장에서_.md → 210 원자노트/260324_articles_미국_텍사스주_포트아서의_정유_공장에서_.md (resources)\n+[<timestamp>] Phase 3 완료: resources 11건, areas후보 3건, LLM판단 0건, 유지 86건\n+[<timestamp>] 상태 저장 완료\n+[<timestamp>] 리포트 생성: <path> 운영/840 리포트/atomizer-<timestamp>.md\n+[<timestamp>] 리포트: <path> 운영/840 리포트/atomizer-<timestamp>.md\n+[SECTOR_TRACE] send_sector(ops) caller=note_atomizer.py:2329 text='[원자화] 100건 처리, 14건 승격\\n• https://n.news.naver.com/mnews/article/6\\n• https://www.g'\n+[<timestamp>] note_atomizer 완료\n no oauth token found for github.com\n-Traceback (most recent call last):\n-File \"<path>\", line 2337, in <module>\n-main()\n-File \"<path>\", line 2308, in main\n-save_state(state)\n-File \"<path>\", line 177, in save_state\n-tmp.rename(STATE_FILE)\n-File \"/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/pathlib.py\", line 1372, in rename\n... diff truncated at 220 lines ...",
"strict_diff": true,
"text_match": false,
"watched_before": [],
"watched_after": [],
"watched_changed": [],
"verdict": {
"ok": false,
"openclaw_ok": false,
"hermes_trigger_ok": true,
"hermes_exec_ok": true,
"watch_ok": true,
"text_match": false,
"strict_diff": true,
"trigger_delta_ms": 0,
"changed_watch_paths": [],
"reasons": [
"openclaw_failed",
"strict_diff_mismatch"
]
},
"report_path": "/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM004-jisik-promote/cycle-1/20260414_164422_jisik-promote-dkzkyq_ocAM-AM004-jisik-promote.json"
}
- 최종 상태: ROLLBACK
검증: etf-data-collect-domestic-value → ocAM-AM005-etf-domestic-value
- rationale: 국내배당밸류 ETF, 최근 151초 성공, enabled owner 없음
- command:
python3 /Users/ron/.openclaw/skills/etf-tracker/scripts/run_etf_tracker.py domestic_value - schedule:
8 16 * * 1-5 - cycle 1: rc=2, verdict=fail, diff_ok=None, elapsed=301.19s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM005-etf-domestic-value/cycle-1
:00",
"duration_ms": 300004,
"stdout": "",
"stderr": "",
"timed_out": true,
"error": "timeout after 300s"
},
"hermes_output_file": null,
"hermes_response": "",
"text_diff": "",
"strict_diff": true,
"text_match": true,
"watched_before": [
{
"path": "/Users/ron/.openclaw/skills/etf-tracker/knowledge/logs",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1774995471550605789,
"sha256": null,
"file_count": 3,
"total_size": 15419,
"digest": "4f964d34bcbcc9e443f4e82c6862e4b65cbe3068e94c885a1808dcee4b9aa938",
"sample_files": [
"2026-02_execution.md",
"2026-03_execution.md",
"2026-04_execution.md"
]
}
],
"watched_after": [
{
"path": "/Users/ron/.openclaw/skills/etf-tracker/knowledge/logs",
"exists": true,
"kind": "dir",
"size": null,
"mtime_ns": 1774995471550605789,
"sha256": null,
"file_count": 3,
"total_size": 15419,
"digest": "4f964d34bcbcc9e443f4e82c6862e4b65cbe3068e94c885a1808dcee4b9aa938",
"sample_files": [
"2026-02_execution.md",
"2026-03_execution.md",
"2026-04_execution.md"
]
}
],
"watched_changed": [],
"verdict": {
"ok": false,
"openclaw_ok": false,
"hermes_trigger_ok": true,
"hermes_exec_ok": false,
"watch_ok": true,
"text_match": true,
"strict_diff": true,
"trigger_delta_ms": 0,
"changed_watch_paths": [],
"reasons": [
"openclaw_failed",
"hermes_exec_failed"
]
},
"report_path": "/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM005-etf-domestic-value/cycle-1/20260414_164441_etf-data-collect-domestic-value_ocAM-AM005-etf-domestic-value.json"
}
- 최종 상태: ROLLBACK
검증: gmail-credit-monitor → ocAM-AM006-gmail-credit-monitor
- rationale: Gmail monitor, 최근 14초 성공, enabled owner 없음; DNS 실패 시 rollback
- command:
python3 /Users/ron/.openclaw/scripts/gmail_credit_monitor.py && echo '완료' - schedule:
every 21600000ms - cycle 1: rc=2, verdict=fail, diff_ok=None, elapsed=1.46s, report=
/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM006-gmail-credit-monitor/cycle-1
le.api_core.\n warnings.warn(message, FutureWarning)\n Gmail 인증 실패: HTTPSConnectionPool(host='oauth2.googleapis.com', port=443): Max retries exceeded with url: /token (Caused by NameResolutionError(\"HTTPSConnection(host='oauth2.googleapis.com', port=443): Failed to resolve 'oauth2.googleapis.com' ([Errno 8] nodename nor servname provided, or not known)\"))\n+```",
"strict_diff": true,
"text_match": false,
"watched_before": [
{
"path": "/Users/ron/.openclaw/cron/runs/gmail-credit-monitor.jsonl",
"exists": true,
"kind": "file",
"size": 113287,
"mtime_ns": 1775957710942322865,
"sha256": "9e1d46b42a295226cf1915031f7c7c2cffcf7eb2140d1b25093936ce29c176db",
"file_count": null,
"total_size": null,
"digest": null,
"sample_files": []
}
],
"watched_after": [
{
"path": "/Users/ron/.openclaw/cron/runs/gmail-credit-monitor.jsonl",
"exists": true,
"kind": "file",
"size": 113287,
"mtime_ns": 1775957710942322865,
"sha256": "9e1d46b42a295226cf1915031f7c7c2cffcf7eb2140d1b25093936ce29c176db",
"file_count": null,
"total_size": null,
"digest": null,
"sample_files": []
}
],
"watched_changed": [],
"verdict": {
"ok": false,
"openclaw_ok": false,
"hermes_trigger_ok": true,
"hermes_exec_ok": false,
"watch_ok": true,
"text_match": false,
"strict_diff": true,
"trigger_delta_ms": 1,
"changed_watch_paths": [],
"reasons": [
"openclaw_failed",
"hermes_exec_failed",
"strict_diff_mismatch"
]
},
"report_path": "/Users/ron/.openclaw/workspace/verification/hermes-batch-AM-real/ocAM-AM006-gmail-credit-monitor/cycle-1/20260414_164942_gmail-credit-monitor_ocAM-AM006-gmail-credit-monitor.json"
}
- 최종 상태: ROLLBACK
종료
- batch AM enabled migrations: 1개
- 종료: 2026-04-14T16:49:43+09:00
Rollback placeholder 정리 (2026-04-14T16:50:14+09:00)
- Hermes cleanup backup:
/Users/ron/.hermes/cron/jobs.json.bak-batchAM-rollback-cleanup-20260414_165014 - 제거한 disabled rollback Hermes 항목: [('ocAM-AM001-commodity-spike-watch', 'commodity-spike-watch'), ('ocAM-AM002-etf-domestic-index', 'etf-data-collect-domestic-index'), ('ocAM-AM003-cu-queue-processor', 'cu-queue-processor'), ('ocAM-AM004-jisik-promote', 'jisik-promote-dkzkyq'), ('ocAM-AM005-etf-domestic-value', 'etf-data-collect-domestic-value'), ('ocAM-AM006-gmail-credit-monitor', 'gmail-credit-monitor')]
- 이유: AM 실패 후보가 다음 batch source 탐지를 막지 않도록 정리. OpenClaw job 삭제 없음.
최종 검증 요약 (2026-04-14T16:51:03+09:00)
Batch AM 최종 이전 결과
| OpenClaw cron | Hermes job | OpenClaw enabled | Hermes enabled/state | schedule | verifier |
|---|---|---|---|---|---|
etf-insight-extractor |
ocAM-AM000-etf-insight-extractor |
False |
True/scheduled |
25 16 * * 1-5 |
3/3 strict-diff OK |
5개 미달 사유
- batch AM이 실제 이전 완료한 것은 1개다.
- strict 미선점 후보는 시작 시점부터 고갈되어 있었고, AM은 OpenClaw enabled + Hermes enabled owner 없음 후보를 재검증했다.
- 6개 보충 후보는 timeout, network/DNS, strict-diff mismatch, Playwright sandbox 오류, state race로 rollback했다.
- 실행 중 다른 batch(AO/AP/AQ)가 일부 후보를 enabled Hermes owner로 선점/이전했다. AM은 해당 source를 건드리지 않도록 AM rollback placeholder를 cleanup했다.
- 현재 OpenClaw enabled로 남은 9개는 모두 Hermes enabled owner가 이미 존재한다. 즉 AM이 새로 잡을 미선점 후보는 0개다.
현재 OpenClaw enabled + Hermes owner 상태
| OpenClaw id | name | enabled Hermes owner | disabled claims |
|---|---|---|---|
etf-data-collect-global-theme |
ETF 데이터 수집 (글로벌 테마) | ['ocX-X004-etf-global-theme'] | [] |
gmail-credit-monitor |
Gmail 크레딧 아그리콜 리포트 모니터 | ['ocAP-AP003-gmail-credit-command'] | ['ocQ-Q007', 'ocAN-AN004-gmail-credit'] |
etf-data-collect-domestic-theme |
ETF 데이터 수집 (국내테마) | ['ocAI-AI000'] | [] |
dm-analyst-prompt-refresh |
DM 애널리스트 시스템 프롬프트 일일 갱신 | ['ocAQ-AQ000-dm-prompt-refresh-text'] | ['ocQ-Q015', 'ocAN-AN002-dm-prompt-refresh'] |
etf-data-collect-domestic-value |
ETF 데이터 수집 (국내배당밸류) | ['ocAO-AO001-etf-domestic-value-prompt'] | ['ocQ-Q014'] |
oil-supply-monitor |
글로벌 석유 공급망 모니터 | ['ocAQ-AQ001-oil-supply-morning-prompt'] | ['ocAI-AI003'] |
methodology-weekly-reflector |
방법론 주간 고찰 | ['ocAQ-AQ002-methodology-reflector-text'] | [] |
gitnexus-reindex-legacy |
GitNexus 재인덱싱 | ['ocAQ-AQ003-gitnexus-reindex-text'] | [] |
gmail-newsletter-collector |
Gmail 뉴스레터 수집기 | ['ocAQ-AQ004-gmail-newsletter-command'] | ['ocU-U007-gmail-newsletter-collector', 'ocAN-AN003-gmail-newsletter'] |
안전 가드 확인
- JSON parse: OK (
/Users/ron/.hermes/cron/jobs.json,/Users/ron/.openclaw/cron/jobs.json) - OpenClaw 전체 enabled: 9
- Hermes 전체 enabled: 162
- AM 성공 항목은 OpenClaw disabled / Hermes scheduled / enabled overlap 없음
- Gateway 18789 PID 63520 LISTEN 확인
- 금지 파일 미수정 확인:
shared/llm.py,shared/cycle_base.pymtime 유지 - LaunchAgents/daemon 변경 없음
자체평가
- 정확성 4.6/5, 완성도 2.8/5, 검증 4.7/5, 최소변경 4.5/5
- 미달 항목: 요청 수량 5개 중 1개만 AM 단독으로 strict dual-run 통과. 남은 미선점 후보가 없고, 다른 batch owner와 충돌하지 않기 위해 중단.
- Remaining Risks: OpenClaw enabled 9개가 Hermes enabled owner와 동시 존재한다. 이는 AM이 만든 overlap은 아니지만, 해당 owner batch(AO/AP/AQ/X/AI)의 OpenClaw disabled 후처리 누락 여부를 별도 점검해야 한다.