260415 vault-analyst-feedback 실행 검증
vault-analyst-feedback 실행 검증
결론
vault-analyst-feedback는 shell job 정의와 스크립트 실행 자체는 정상이다. 2026-04-15 20:40 KST에 직접 1회 live 실행했고 exit code 0으로 완료됐다.
실행 결과:
| 항목 | 결과 |
|---|---|
| 프로필 업데이트 | 11건 |
| 매크로 시그널 생성 | 4건 |
| 매크로 시그널 업데이트 | 0건 |
| 테크니컬 태그 업데이트 | 0건 |
| exit code | 0 |
| stderr | 없음 |
| ops 텔레그램 | send_sector(ops) 호출 확인, message_id 미기록 |
단, Hermes cron 자연 발화는 아직 위험하다. hermes cron list에는 active/next run이 보이지만, hermes cron status는 Gateway is not running — cron jobs will NOT fire라고 보고한다. 18789 포트의 /health API는 살아 있으나 launchd service는 Hermes CLI 기준 not loaded다.
1) 현재 잡 정의
파일: ~/.hermes/cron/jobs.json
{
"id": "41c2736f0527",
"name": "vault-analyst-feedback",
"enabled": true,
"state": "scheduled",
"schedule": {"kind": "cron", "expr": "0 9 * * *", "display": "0 9 * * *"},
"next_run_at": "2026-04-16T09:00:00+09:00",
"last_run_at": "2026-04-15T15:19:40.572470+09:00",
"last_status": "error",
"last_error": "RuntimeError: Codex token refresh failed with status 401.",
"type": "shell",
"job_type": "shell",
"kind": "shell",
"command": "/usr/bin/python3 /Users/ron/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py",
"cwd": "/Users/ron/.hermes/workspace",
"timeout_seconds": 300
}
호출 스크립트:
/Users/ron/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py
스케줄:
- cron expr:
0 9 * * * - 다음 예정:
2026-04-16 09:00 KST
주의: 직접 실행은 성공했지만, Hermes jobs.json의 last_status는 아직 이전 Codex token 401 에러 상태다. 직접 python 실행은 Hermes cron 상태 필드를 갱신하지 않기 때문이다.
2) 1회 수동 실행 결과
실행 명령:
cd /Users/ron/.hermes/workspace
/usr/bin/python3 /Users/ron/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py \
> /Users/ron/.hermes/logs/vault_analyst_feedback_manual_260415.out \
2> /Users/ron/.hermes/logs/vault_analyst_feedback_manual_260415.err
결과:
- exit code:
0 - stdout:
/Users/ron/.hermes/logs/vault_analyst_feedback_manual_260415.out - stderr:
/Users/ron/.hermes/logs/vault_analyst_feedback_manual_260415.err— 0 bytes
stdout 최종 JSON:
{"status": "ok", "profiles_updated": 11, "signals_created": 4, "signals_updated": 0, "tags_updated": 0}
주요 stdout 근거:
[경로1] 추출된 기업 26개
[경로1] ASML 프로필 업데이트: /Users/ron/knowledge/300 지식망/331 정보기술/260328_ASML_인사이트종합.md
[경로1] TSMC 프로필 업데이트: /Users/ron/knowledge/300 지식망/331 정보기술/260324_TSMC_인사이트종합.md
[경로2] 신규 시그널 노트 생성: /Users/ron/knowledge/500 시그널/510 매크로/macro-signal-energy_demand_weakness.md
[경로2] 신규 시그널 노트 생성: /Users/ron/knowledge/500 시그널/510 매크로/macro-signal-fed_cycle_end.md
[경로2] 신규 시그널 노트 생성: /Users/ron/knowledge/500 시그널/510 매크로/macro-signal-gpr_oil_divergence.md
[경로2] 신규 시그널 노트 생성: /Users/ron/knowledge/500 시그널/510 매크로/macro-signal-gold_safe_haven.md
[경로3] 추출된 기업 시그널 0개
[SECTOR_TRACE] send_sector(ops) caller=vault_analyst_feedback.py:656 text='[분석환류] 프로필 11건, 시그널 4건, 태그 0건'
3) 산출물 확인
업데이트된 해리 볼트 프로필 11개
2026-04-15 20:40 KST 실행으로 아래 파일들이 수정됐다.
/Users/ron/knowledge/300 지식망/310 에너지/호르무즈-wti-선물커브-해석.md
/Users/ron/knowledge/300 지식망/328 금융/260325_금융_비상장AI기업-밸류에이션-스냅샷.md
/Users/ron/knowledge/300 지식망/331 정보기술/260313_sapiens_엔비디아-GTC-Preview-새로운-시대-새로운-패러.md
/Users/ron/knowledge/300 지식망/331 정보기술/260324_TSMC_인사이트종합.md
/Users/ron/knowledge/300 지식망/331 정보기술/260328_ASML_인사이트종합.md
/Users/ron/knowledge/300 지식망/331 정보기술/MOC-FRO.md
/Users/ron/knowledge/300 지식망/331 정보기술/펀더멘탈/BYD-펀더멘탈.md
/Users/ron/knowledge/300 지식망/331 정보기술/펀더멘탈/KAI-펀더멘탈.md
/Users/ron/knowledge/300 지식망/370 크로스섹터/기술/MOC-EUV.md
/Users/ron/knowledge/300 지식망/373 산업분석/260311_해운_탱커-LNG운임-투자-추적.md
/Users/ron/knowledge/300 지식망/388 정책/260324_지정학_scs.md
샘플 확인:
/Users/ron/knowledge/300 지식망/331 정보기술/260328_ASML_인사이트종합.md
85: ## 분석 피드백
86: > 자동 생성: vault_analyst_feedback (2026-04-15)
88: - **펀더멘탈 등급**: N/A (2026-04-15)
89: - **최근 분석**: ASML Q1 매출 EUR 8.8B, GM 53% — 실적 호조
신규 생성된 매크로 시그널 4개
/Users/ron/knowledge/500 시그널/510 매크로/macro-signal-energy_demand_weakness.md
/Users/ron/knowledge/500 시그널/510 매크로/macro-signal-fed_cycle_end.md
/Users/ron/knowledge/500 시그널/510 매크로/macro-signal-gpr_oil_divergence.md
/Users/ron/knowledge/500 시그널/510 매크로/macro-signal-gold_safe_haven.md
샘플:
# energy_demand_weakness 이상 감지
| 날짜 | 값 | z-score | 해석 |
|------|-----|---------|------|
| 2026-04-15 | 91.87 | N/A | WTI -7.3% + 디젤크랙 -12.5% + 히팅오일 -9.3% — 에너지 수요 우려, 정제마진 붕괴 |
Hermes memory/state
라이브 실행 증거:
/Users/ron/.hermes/logs/vault_analyst_feedback_manual_260415.out/Users/ron/.hermes/logs/vault_analyst_feedback_manual_260415.err/Users/ron/.hermes/workspace/memory/vault-analyst-feedback/feedback_2026-04-15_204001_manual-live.json/Users/ron/.hermes/workspace/memory/vault-analyst-feedback/last_success.json/Users/ron/.hermes/workspace/memory/vault-analyst-feedback/runs.tsv
참고: 원래 스크립트의 state 파일명이 분 단위(%Y-%m-%d_%H%M)라 후속 dry-run이 feedback_2026-04-15_2040.json을 덮어썼다. 그래서 라이브 stdout 기반으로 feedback_2026-04-15_204001_manual-live.json을 복원해 두었고, 이후 스크립트는 초 단위 state filename을 쓰도록 보강했다.
Telegram
- 호출 경로:
send_sector("ops", "[분석환류] 프로필 11건, 시그널 4건, 태그 0건") - trace:
/Users/ron/.hermes/logs/sector_trace.log - 확인 줄:
2026-04-15 20:40:01 [SECTOR_TRACE] send_sector(ops) caller=vault_analyst_feedback.py:656 text='[분석환류] 프로필 11건, 시그널 4건, 태그 0건'
현재 send_sector() 기본 반환이 bool이라 message_id는 남지 않는다.
4) 로깅 강화 내역
수정 파일:
/Users/ron/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py
보강 내용:
- 입력 latest.json 사전 검증 추가
- analyst input이 모두 없거나 비정상 JSON이면 명시적으로
status=error, exit 1. last_run.json추가- 경로:
~/.hermes/workspace/memory/vault-analyst-feedback/last_run.json last_success.json추가- dry-run이 아닌 성공 실행만 기록.
runs.tsvappend 로그 추가- 실행 시각, status, dry_run, 각 stats, state_file, error 기록.
- state 파일 timestamp를 분 단위에서 초 단위로 변경
- 기존:
feedback_YYYY-MM-DD_HHMM.json - 변경:
feedback_YYYY-MM-DD_HHMMSS.json - 같은 분 내 dry-run/live-run 충돌 방지.
- top-level exception handler 추가
- 예외 발생 시 JSON 에러를 stderr에 쓰고 exit 1.
검증:
/usr/bin/python3 -m py_compile /Users/ron/.hermes/workspace/scripts/pipeline/vault_analyst_feedback.py
→ py_compile_ok
로깅 검증용 dry-run:
- exit code: 0
- state:
/Users/ron/.hermes/workspace/memory/vault-analyst-feedback/feedback_2026-04-15_204113.json - last_run:
/Users/ron/.hermes/workspace/memory/vault-analyst-feedback/last_run.json - TSV:
/Users/ron/.hermes/workspace/memory/vault-analyst-feedback/runs.tsv
5) 내일 자연 발화 대비
Hermes cron 목록 기준:
41c2736f0527 [active]
Name: vault-analyst-feedback
Schedule: 0 9 * * *
Next run: 2026-04-16T09:00:00+09:00
Deliver: local
그러나 scheduler 상태는 불안정하다.
hermes cron status
✗ Gateway is not running — cron jobs will NOT fire
8 active job(s)
Next run: 2026-04-15T22:46:46.116361+09:00
동시에 low-level health는 살아 있다.
lsof -iTCP:18789 → Python PID 20146 LISTEN
http://127.0.0.1:18789/health → 200 {"status":"ok","platform":"hermes-agent"}
hermes gateway start도 시도했지만 launchd 로드가 실패했다.
Unload failed: 5: Input/output error
Load failed: 5: Input/output error
Not privileged to start service.
...
Command '['launchctl', 'start', 'ai.hermes.gateway']' returned non-zero exit status 1.
판정:
- 이 잡의 command 자체는 내일 실행 가능하다.
- 하지만 Hermes CLI 기준 gateway service가 loaded 상태가 아니라서 내일 09:00 자연 발화는 보장 불가다.
- 별도 조치: launchd
ai.hermes.gatewayservice 로드 문제를 해결해야 한다. 현재 보고 범위에서는 잡 실행 검증과 로깅 보강까지만 완료했다.
자체평가
- 정확성: 4.6/5 — shell job 정의, 직접 실행, 산출물, 로그, cron/gateway 상태를 모두 확인했다.
- 완성도: 4.5/5 — 실행 성공과 로깅 보강은 완료. 단, gateway launchd 문제는 이 작업 범위를 넘어 남았다.
- 검증: 4.7/5 — live run, py_compile, dry-run logging, 산출물 mtime/내용 확인 완료.
- 최소 변경: 4.6/5 — 스크립트 수정은 실행 이력/exit 1 보강에 제한했다.
종합: 4.6/5