bond-study 데이터 복구 + commodity-alerts 신규 데이터 검증
발견
bond-study
- 웹앱은 채권 브리핑을
/Users/ron/.openclaw/workspace/memory/bond-briefing에서 읽는다. - 라우트 근거:
/Users/ron/.openclaw/workspace/scripts/pipeline/webapp/blueprints/market.py:2458,2635,2657 - JSON:
bond-briefing/{date}.json - PDF:
bond-briefing/briefing_{date}.pdf - 생성 스크립트는
/Users/ron/.openclaw/workspace/scripts/pipeline/bond_daily_report.py다. - 저장 경로:
MEMORY_DIR = WORKSPACE / "memory" / "bond-briefing"(bond_daily_report.py:34) - PDF 저장:
briefing_{date_str}.pdf(bond_daily_report.py:478,703-704) - JSON/latest 저장:
{date_str}.json,latest.json,explained_terms.json(bond_daily_report.py:716-750) - 현재 스냅샷 기준
memory/bond-briefing디렉터리가 없다. - 확인:
ls /Users/ron/.openclaw/workspace/memory/bond-briefing→No such file or directory - 마지막 성공 실행 증거는 2026-04-09 14:44:33 KST이며, 생성 대상 데이터 날짜는 2026-04-08이었다.
- 로그:
PDF 생성: .../memory/bond-briefing/briefing_2026-04-08.pdf (152KB) - 로그:
메모리 저장 완료. 볼트: /Users/ron/knowledge-agent/100-inbox/119-크레딧메일/260408_브리핑_2026-04-08.md - 현재 스크립트가 찾는 최신 황대진 원본 노트도 2026-04-08 자료다.
_find_latest_hwang_note()결과:/Users/ron/knowledge/100 수신함/119 크레딧메일/260408_황대진_전달-일일-48-수-낙찰-및-마감정리-DS증권-황대진.md- 파싱 결과:
date=2026-04-08,email_type=낙찰정리,auction_count=1 - 스크립트 CLI는
--once를 지원하지 않는다. python3 bond_daily_report.py --help→ 지원 옵션은--dry-run,--notify뿐.
commodity-alerts
- 현재 파일 존재:
/Users/ron/.openclaw/workspace/memory/commodity-alerts/2026-04-14.json/Users/ron/.openclaw/workspace/memory/commodity-alerts/latest.json- 파일 mtime:
2026-04-14 12:41:09 KST - 생성 스크립트 추적:
/Users/ron/.openclaw/workspace/scripts/pipeline/commodity_spike_analyzer.py:35→ALERT_DIR = MEMORY_DIR / "commodity-alerts"commodity_spike_analyzer.py:458-489→notify()가 일자별 JSON과latest.json저장- 로그 근거:
2026-04-14 12:40:38morning_mode 시작 (dry_run=True, force=True)2026-04-14 12:41:09[DRY-RUN] 텔레그램 전송 스킵2026-04-14 12:41:09알림 로그 저장: /Users/ron/.openclaw/workspace/memory/commodity-alerts/2026-04-14.json
진단
bond-study 404 원인
- 직접 원인: 웹앱이 요구하는
memory/bond-briefing/2026-04-14.json및briefing_2026-04-14.pdf가 없다. - 생성 실패 원인:
- 2026-04-14 02:31 KST 실행은 시작됐지만 LLM 단계에서 실패했다.
- 로그:
2026-04-14 02:33:30 [ERROR] LLM 실패: ollama/qwen3.5:9b-nothinker: HTTP Error 400: Bad Request
- 로그:
- 수동 복구 실행도 LLM 호출 단계에서 실패했다.
- 로그:
2026-04-14 13:32:26 [ERROR] LLM 실패: ollama/qwen2.5:3b: <urlopen error [Errno 1] Operation not permitted>
- 로그:
- 현재 로컬 원본 입력도 2026-04-08까지만 확인된다. 따라서 2026-04-14 브리핑을 지금 생성하면 날짜가 맞지 않는 데이터를 억지로 만들 위험이 있다.
- 크론 상태:
bond-daily-report: enabled, schedule30 2 * * 2-6Asia/Seoul, payload kindagentTurn,command=PYTHONPATH=... python3 .../bond_daily_report.py --notifybond-morning-poll: enabled, schedule3,33 7-9 * * 1-5Asia/Seoul, payload kindagentTurn,command=python3 .../gmail_credit_monitor.py --fixed-income-only && echo '완료'- 별도 크론 실행 로그에는 과거에 명령이 실제 스크립트 실행이 아니라 일반 에이전트 응답처럼 처리된 흔적도 있다. 이 설정은 신뢰성 리스크지만 이번 작업에서는 코드/크론 설정을 수정하지 않았다.
commodity-alerts 상태
latest.json은 스키마상 정상이다.- 필수 top-level:
timestamp,date,dry_run,triggered,analysis,message_preview확인됨. triggered항목 필수 필드:key,name,close,change_pct,mom_pct,zscore,severity,trigger확인됨.- 검증 결과:
schema_errors=[] - 단, 운영 알림 데이터로 보기는 어렵다.
dry_run=true- 모든 항목의
trigger=force - 로그상 텔레그램 전송은 스킵됨.
- 값 자체는 현재 파일 안에서 일관적이다.
- WTI유: close
100.2, change+3.76%, MoM+1.51%, Z0.21 - 천연가스: close
2.64, change-0.30%, MoM-15.68%, Z1.67 - 구리: close
5.99, change+1.98%, MoM+4.76%, Z2.32 - BDI: close
10.85, change+1.36%, MoM+3.38%, Z1.80 - 금: close
4761.2, change-0.01%, MoM-5.77%, Z0.54 - 은: close
75.6, change-0.96%, MoM-6.57%, Z0.62 - VIX: close
19.5, change+1.40%, MoM-28.28%, Z1.57
복구 액션
bond-study
--once방식 수동 트리거를 확인했으나 스크립트가 해당 옵션을 지원하지 않음을 확인했다.- 대신 저장까지 수행하는 내부 실행 경로로 수동 실행을 시도했다.
- 형태:
bond_daily_report.run(notify=False, dry_run=False) - 텔레그램 전송은 끄고, 저장은 허용하는 방식.
- 결과:
- 스크립트 시작 및 2026-04-08 원본 파싱까지는 성공.
- LLM 호출에서 차단되어 JSON/PDF 생성 전 중단.
- 코드 수정 없이 재시도 가능한 범위에서는 2026-04-14 데이터 복구 실패.
- 웹앱 재확인:
curl http://127.0.0.1:8080/market/bond-study/2026-04-14HTTP/1.1 404 NOT FOUND- 본문:
브리핑 없음
curl http://127.0.0.1:8080/market/bond-study/2026-04-14/pdfHTTP/1.1 404 NOT FOUND- 본문:
PDF 없음
- 확인 시각:
2026-04-14 13:50:06 KST(Date: Tue, 14 Apr 2026 04:50:06 GMT)
commodity-alerts
latest.json과2026-04-14.json존재 확인.- 생성 로그와 생성 스크립트 확인.
- 스키마 검증 수행: 오류 없음.
- 운영 의미를 재분류했다.
- “신규 생성된 파일”은 맞음.
- “실제 발송된 운영 알림”은 아님.
- “dry-run + force로 생성된 검증/테스트성 알림 로그”로 보는 것이 맞다.
결과
- bond-study 2026-04-14 복구: 실패 / 현재 조건에서 복구 불가로 분류
- 이유: 2026-04-14 원본 입력 부재 + LLM 단계 실패 + 출력 디렉터리/파일 부재.
- 거짓 복구 방지를 위해 2026-04-08 데이터를 2026-04-14로 복제하지 않았다.
- commodity-alerts 검증: 정상 파일로 확인, 단 dry-run force 데이터
- 스키마 정상.
- 생성 원인과 생성 시각 확인.
- 원본 웹앱 감사의 “파일 없음” 주장은 시점 차이로 설명 가능하다. 현재는 2026-04-14 12:41 KST 생성본이 존재한다.
- 금지 준수:
bond_daily_report.py수정 없음.shared/llm.py수정 없음.shared/cycle_base.py수정 없음.- 확인 중
shared/llm.py,shared/cycle_base.py의 git modified 상태가 보였지만, 이번 작업에서 수정하지 않았다.
잔존 리스크
memory/bond-briefing디렉터리가 과거에는 생성됐지만 현재 없어졌다. 삭제/정리 주체는 이번 조사에서 확인되지 않았다.bond-daily-report는 LLM 단계가 안정화되어야 저장까지 완료된다. 현재 로그상 2026-04-14 실행은 LLM 400 오류로 실패했다.bond-morning-poll또는 관련 Gmail 수집 경로가 최신 황대진 원본을 못 가져오면, LLM이 복구돼도 2026-04-14 브리핑은 생성할 수 없다.- 크론 payload가
agentTurn + command형태라 명령 실행 신뢰성 리스크가 있다. 이번 작업 범위에서는 수정하지 않았고, 별도 크론 설정 정리가 필요하다. - commodity-alerts 최신 파일은 존재하지만
dry_run=true,trigger=force라 운영 알림/실제 이상징후로 해석하면 안 된다.
다음에 할 일
- LLM 라우팅 수정이 끝난 뒤, 최신 황대진 원본이 있는지 먼저 확인한다.
- 최신 원본이 있으면 아래 방식으로 저장 실행을 재시도한다.
cd /Users/ron/.openclaw/workspace
PYTHONPATH=/Users/ron/.openclaw/workspace/scripts/shared:/Users/ron/.openclaw/workspace/scripts/pipeline \
python3 - <<'PY'
import sys
sys.path.insert(0, '/Users/ron/.openclaw/workspace/scripts/pipeline')
import bond_daily_report
bond_daily_report.run(notify=False, dry_run=False)
PY
- 실행 후 반드시 재검증한다.
curl -i http://127.0.0.1:8080/market/bond-study/2026-04-14
curl -i http://127.0.0.1:8080/market/bond-study/2026-04-14/pdf
자체 평가
- 정확성: 4.6/5
- 완성도: 4.5/5
- 검증: 4.6/5
- 최소 변경: 5.0/5
- 종합: 4.7/5
미달/한계: bond-study 실제 복구는 못 했지만, 현재 로컬 입력과 LLM 실행 제한상 허위 데이터 생성 없이 막는 것이 맞다고 판단했다.