virtual-insanity
← 리포트 목록

260420 bond briefing recovery

2026-04-20 bond-briefing [bond, briefing, hermes, recovery]

채권 브리핑 복구 보고 — 2026-04-20

결론

  • 수동 복구 발송 완료: 2026-04-20 14:17 KST, briefing_2026-04-16.pdf 해리 DM 전송 성공.
  • DM message_id=11830
  • 그룹 백업 전송 message_id=52677
  • Hermes cron scheduler 정상: Gateway PID 75878, 실제 listen port 8642, active job 41개.
  • bond jobs enabled=True 유지:
  • ocAK-AK000-bond-daily-dry-run: next 2026-04-21T02:30:00+09:00
  • ocAO-AO003-bond-morning-command: next 2026-04-21T07:03:00+09:00

1. 마지막 자동 실행 확인

마지막 정상 자동 PDF/DM 발송은 사용자 제공값과 일치했다.

파일: ~/.hermes/cron/output/ocAK-AK000-bond-daily-dry-run/2026-04-18_02-30-33.md
[2026-04-18 02:30:27] bond_daily_report 시작
[2026-04-18 02:30:27] 노트: 260416_황대진_전달-일일-416-목-마감정리-및-CP-발행내역-DS증권-황대진.md
[2026-04-18 02:30:27] PDF 생성: .../briefing_2026-04-16.pdf (102KB) [ReportLab AppleGothic]
[2026-04-18 02:30:30] 텔레그램 그룹 PDF: 성공 message_id=52253
[2026-04-18 02:30:33] PDF DM 전송: briefing_2026-04-16.pdf message_id=11792

2. 오늘 공백 원인

2-1. bond-daily-report는 스케줄상 오늘 실행 대상이 아님

현재 스케줄은 30 2 * * 2-6이다. 즉 화~토 02:30만 실행된다.

  • 2026-04-19: 일요일 → 실행 제외 정상
  • 2026-04-20: 월요일 → daily report 실행 제외 정상
  • 다음 실행: 2026-04-21 화요일 02:30

따라서 daily PDF가 4/19~4/20 자동 생성되지 않은 것은 cron 실패가 아니라 스케줄 설계 결과다.

2-2. bond-morning-poll은 오늘 실행됐지만 신규 저장 0건

사용자 관찰과 달리 morning poll 자체는 4/20 월요일 07:03~09:33에 모두 실행됐다.

~/.hermes/cron/output/ocAO-AO003-bond-morning-command/
2026-04-20_07-03-26.md
2026-04-20_07-33-39.md
2026-04-20_08-03-36.md
2026-04-20_09-03-41.md
2026-04-20_09-33-53.md

각 실행 핵심 로그:

[정대호] 0건 발견
[이향기] 0건 발견
[황대진] 6건 발견
[fixed-income] query_attempts=3 query_failures=0 detail_failures=0
[fixed-income] 볼트 저장 0건
완료

즉 “실행 없음”이 아니라 메일 검색은 성공했지만 신규 볼트 저장이 0건이었다.

2-3. 실제 장애 지점: 최신 원천 노트가 읽기 경로에서 빠져 stale March fallback 위험

bond_daily_report.py는 최신 황대진 raw note를 ~/knowledge-agent/100-inbox/119-크레딧메일 및 legacy inbox에서 찾는다. 그런데 최신 4/16 원천 노트가 현재 읽기 경로가 아니라 아래 staging에 있었다.

~/knowledge-agent/200 아토믹/_staging/frontmatter_fix/260416_황대진_전달-일일-416-목-마감정리-및-CP-발행내역-DS증권-황대진.md

이 상태에서는 수동 실행 시 3월 원천 노트로 떨어질 수 있어, 최신 4/16 원천 노트를 현재 읽기 경로로 복구했다.

복구 위치:
~/knowledge-agent/100-inbox/119-크레딧메일/260416_황대진_전달-일일-416-목-마감정리-및-CP-발행내역-DS증권-황대진.md

3. Scheduler / Gateway 상태

sandbox에서 ps는 권한 제한으로 직접 확인 실패했으나, Hermes 자체 상태와 포트 점유로 확인했다.

hermes cron status
✓ Gateway is running — cron jobs will fire automatically
PID: 75878
41 active job(s)
Next run: 2026-04-20T14:30:00+09:00
lsof -nP -iTCP:8642 -sTCP:LISTEN
Python 75878 ron TCP 127.0.0.1:8642 (LISTEN)

참고: 지시에는 18789 포트 확인이 있었으나 현재 Hermes Gateway는 8642에서 동작 중이다. 18789 listener는 확인되지 않았다.

4. Jobs 상태

ocAK-AK000-bond-daily-dry-run
- enabled=True
- schedule=30 2 * * 2-6
- last=2026-04-18T02:30:33.955862+09:00
- last_status=ok
- next=2026-04-21T02:30:00+09:00

ocAO-AO003-bond-morning-command
- enabled=True
- schedule=3,33 7-9 * * 1-5
- last=2026-04-20T09:33:53.656698+09:00
- last_status=ok
- next=2026-04-21T07:03:00+09:00

5. 수동 복구 실행 결과

실행 명령:

cd /Users/ron/.hermes/workspace
PYTHONPATH=/Users/ron/.hermes/workspace/scripts/shared:/Users/ron/.hermes/workspace/scripts/pipeline:/Users/ron/.hermes/workspace/scripts \
/usr/bin/python3 /Users/ron/.hermes/workspace/scripts/pipeline/bond_daily_report.py --notify

결과:

[2026-04-20 14:17:44] bond_daily_report 시작
[2026-04-20 14:17:44] 노트: 260416_황대진_전달-일일-416-목-마감정리-및-CP-발행내역-DS증권-황대진.md
[2026-04-20 14:17:44] 파싱 완료 — 타입: 입찰안내, 날짜: 2026-04-16, 낙찰: 3건
[2026-04-20 14:17:44] PDF 생성: /Users/ron/.hermes/workspace/memory/bond-briefing/briefing_2026-04-16.pdf (102KB) [ReportLab AppleGothic]
[2026-04-20 14:17:47] 텔레그램 그룹 PDF: 성공 message_id=52677
[2026-04-20 14:17:50] PDF DM 전송: briefing_2026-04-16.pdf message_id=11830

파일 확인:

/Users/ron/.hermes/workspace/memory/bond-briefing/briefing_2026-04-16.pdf 103KB
/Users/ron/knowledge-agent/100-inbox/119-크레딧메일/260416_황대진_전달-일일-416-목-마감정리-및-CP-발행내역-DS증권-황대진.md 33KB

bond_daily_last_telegram.tsv 최신 tail:

2026-04-18T02:30:33+09:00  492860021        11792  success
2026-04-20T14:17:47+09:00  -1003076685086  39439  52677  success
2026-04-20T14:17:50+09:00  492860021               11830  success

6. 복구 조치

  • Hermes Gateway는 이미 정상이라 재시작하지 않았다.
  • bond-daily-reportbond-morning-poll 모두 jobs.json에서 enabled=True 유지 확인.
  • 최신 4/16 황대진 원천 노트를 100-inbox/119-크레딧메일 읽기 경로에 복구.
  • bond_daily_report.py --notify 수동 1회 실행으로 해리 DM 발송 확인.

7. 남은 리스크 / 후속 권고

  1. morning poll 저장 0건 문제는 별도 수리 필요
    4/20 오전 실행은 성공했지만 [fixed-income] 볼트 저장 0건이었다. 메일 중복 판정 또는 저장 경로 정책 때문에 신규 저장이 막혔을 가능성이 있다.

  2. 원천 노트 staging 이동 문제
    최신 크레딧메일 원천 노트가 _staging/frontmatter_fix로 빠져 bond_daily_report.py의 read path에서 사라졌다. 향후에는 frontmatter_fix 이후에도 100-inbox/119-크레딧메일 mirror가 유지되도록 ingestion/mirror 로직을 보강해야 한다.

  3. 포트 문서 불일치
    지시에는 Hermes Gateway port 18789가 언급됐지만 실측 Gateway는 8642다. 운영 문서의 포트 표기를 최신화할 필요가 있다.

최종 상태

  • 오늘 DM 도착: PASSmessage_id=11830
  • Scheduler 정상: PASS — PID 75878, port 8642, active jobs 41개
  • jobs enabled=True 유지: PASS
  • 내일 자동 실행 기대: PASS — 2026-04-21 02:30 daily, 07:03 morning