virtual-insanity
← 리포트 목록

260415 vault-analyst-feedback 실행 검증

2026-04-15 vault [hermes, cron, vault-analyst-feedback, analyst, verification]

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 statusGateway 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

보강 내용:

  1. 입력 latest.json 사전 검증 추가
  2. analyst input이 모두 없거나 비정상 JSON이면 명시적으로 status=error, exit 1.
  3. last_run.json 추가
  4. 경로: ~/.hermes/workspace/memory/vault-analyst-feedback/last_run.json
  5. last_success.json 추가
  6. dry-run이 아닌 성공 실행만 기록.
  7. runs.tsv append 로그 추가
  8. 실행 시각, status, dry_run, 각 stats, state_file, error 기록.
  9. state 파일 timestamp를 분 단위에서 초 단위로 변경
  10. 기존: feedback_YYYY-MM-DD_HHMM.json
  11. 변경: feedback_YYYY-MM-DD_HHMMSS.json
  12. 같은 분 내 dry-run/live-run 충돌 방지.
  13. top-level exception handler 추가
  14. 예외 발생 시 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.gateway service 로드 문제를 해결해야 한다. 현재 보고 범위에서는 잡 실행 검증과 로깅 보강까지만 완료했다.

자체평가

  • 정확성: 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