ranto28 224252069321 수동 수집 및 파이프라인 누락 원인
ranto28 224252069321 수동 수집 및 파이프라인 누락 원인
결론
- 수동 수집 노트 저장 완료:
~/knowledge/100 수신함/120 지식사랑방/122 articles/260414_ranto28_미장유동성_AS.md - 누락 원인 1줄: 2026-04-14 Hermes 이전 검증 시 RSS/DNS 실패가
ok/new_posts=0으로 처리되어 OpenClaw job이 꺼졌고, 현재 Hermes jobs.json에는 이전된 blog-monitor job이 없어 2026-04-15 00:10 KST 게시글이 실행 주체 없이 지나갔다. 224252069321자체는 RSS 후보/카테고리 필터를 정상 통과한다. 중복 제거·태그·글자수 문제는 아니었다.
수동 수집
- 대상 URL:
https://blog.naver.com/ranto28/224252069321 - 모바일 URL:
https://m.blog.naver.com/ranto28/224252069321 - 저장 파일:
~/knowledge/100 수신함/120 지식사랑방/122 articles/260414_ranto28_미장유동성_AS.md - 볼트 스키마 참조:
~/knowledge/000 선언/003 v4-스키마.md - 기존 참고 형식:
260414_ranto28_중국황산수출금지_나비효과_비료구리니켈.md - 저장 검증:
- 파일 존재: OK
- 크기: 7,286 bytes
- 라인: 160
- frontmatter title/url: OK
- 핵심 표식
RRP,TGA,지급준비금: OK
참고: RSS 기준 게시시각은 2026-04-15 00:10:00 +0900로 확인됐다. 해리 지정 파일명/frontmatter 날짜는 2026-04-14를 유지했고, frontmatter에 source_published_at: 2026-04-15T00:10:00+09:00를 추가했다.
파이프라인 위치
OpenClaw 원본 job
- 파일:
~/.openclaw/cron/jobs.json - id:
intelligence-blog-monitor - command:
python3 /Users/ron/.openclaw/workspace/scripts/pipeline/blog_monitor.py --notify - 원래 schedule: every 6h
- 현재 상태:
enabled=false - disabledReason:
migrated to Hermes ocM-M019-blog-monitor after 3 strict dual-run passes
스크립트
- 파일:
~/.openclaw/workspace/scripts/pipeline/blog_monitor.py - RSS:
https://rss.blog.naver.com/ranto28 - 출력:
~/.openclaw/workspace/memory/blog-insights - 중복 파일:
~/.openclaw/workspace/memory/blog-insights/.processed_blogs.json
Hermes 이전 상태
- 이전 보고서:
~/knowledge-agent/400-reports/260414_hermes_batch_M_real.md - 이전 target:
ocM-M019-blog-monitor - 현재
~/.hermes/cron/jobs.json에는 감사 전 해당 job이 없었음. - 이번 조치로
ocM-M019-blog-monitor를 다시 등록함.
로그/후보 분석
2026-04-14 이전 검증 로그
관련 파일:
- ~/.openclaw/workspace/logs/blog_monitor.log
- ~/knowledge-agent/400-reports/260414_hermes_batch_M_real.blog_nowatch.json
- ~/.openclaw/workspace/verification/hermes-batch-M-real/ocM-M019-blog-monitor/...
관찰된 반복 출력:
[2026-04-14 15:32:39] Fetching RSS from https://rss.blog.naver.com/ranto28
[2026-04-14 15:32:39] [ERROR] RSS parse error: <urlopen error [Errno 8] nodename nor servname provided, or not known>
[2026-04-14 15:32:39] No entries found
{"status":"ok","new_posts":0}
문제는 RSS 실패 자체보다 실패를 정상 종료로 반환한 것이다. 이 때문에 Hermes dual-run은 “양쪽 출력이 같은 no-op”으로 PASS했고 OpenClaw source job이 꺼졌다.
RSS 현재 후보 확인
2026-04-15 10시대 RSS 직접 확인 결과:
items=50
2 224252069321 Wed, 15 Apr 2026 00:10:00 +0900 [경제/주식/국제정세/사회] 미장은 언제부터 오를수 있을까? A/S
5 224250398767 Tue, 14 Apr 2026 00:10:00 +0900 [경제/주식/국제정세/사회] 중국의 황산 수출금지가 일으키는 나비효과? ...
두 글 모두 INCLUDE_CATEGORIES에 포함되는 경제/주식/국제정세/사회라서 카테고리 필터 문제는 아니다.
dry-run 전후 확인
수정 전 dry-run:
RSS fetched: 50 entries
Category filter: 50 → 44 entries
New entries: 44
[DRY-RUN] 미장은 언제부터 오를수 있을까? A/S [경제/주식/국제정세/사회]
수정 후 dry-run:
RSS fetched: 50 entries
Category filter: 50 → 44 entries
New entries: 44
[DRY-RUN] 미장은 언제부터 오를수 있을까? A/S [경제/주식/국제정세/사회]
즉, 대상 글은 현재 파이프라인 후보에는 정상적으로 올라온다. 누락은 후보 필터 탈락이 아니라 실행/상태 처리 결함이다.
수정 내역
1) blog_monitor.py RSS 실패를 실패로 처리
파일: ~/.openclaw/workspace/scripts/pipeline/blog_monitor.py
변경 요약:
- feedparser.parse(RSS_URL) 직접 호출 대신 httpx.get(..., headers=_HTTP_HEADERS, timeout=20, follow_redirects=True)로 RSS를 먼저 가져오도록 변경.
- LAST_RSS_ERROR를 추가해 fetch/parse/zero-entry 실패를 기록.
- RSS 실패 시 JSON status=error, error=<원인> 출력 후 SystemExit(2).
- 목적: RSS/DNS 장애가 다시 발생하면 크론/이전 검증이 no-op 성공으로 오판하지 못하게 함.
Diff 핵심:
+ LAST_RSS_ERROR = None
+ r = httpx.get(RSS_URL, headers=_HTTP_HEADERS, timeout=20, follow_redirects=True)
+ r.raise_for_status()
+ feed = feedparser.parse(r.text)
+ status: "error" if LAST_RSS_ERROR else "ok"
+ if LAST_RSS_ERROR: raise SystemExit(2)
2) Hermes blog-monitor job 복구
파일: ~/.hermes/cron/jobs.json
백업:
- ~/.hermes/cron/jobs.json.bak-ranto28-gap-20260415104614
복구 job:
id: ocM-M019-blog-monitor
name: batchM-intelligence-blog-monitor
type: shell
command: python3 /Users/ron/.openclaw/workspace/scripts/pipeline/blog_monitor.py --notify
schedule: every 360m
enabled: true
next_run_at: 2026-04-15T16:46:14+09:00
Hermes CLI 확인:
ocM-M019-blog-monitor [active]
Name: batchM-intelligence-blog-monitor
Schedule: every 360m
검증 결과
스크립트 구문 검증
python3 -m py_compile /Users/ron/.openclaw/workspace/scripts/pipeline/blog_monitor.py
=> OK
정상 RSS 검증
python3 blog_monitor.py --dry-run --limit 10
=> RSS fetched: 50 entries
=> Category filter: 50 → 44 entries
=> target 224252069321 제목이 dry-run 목록에 포함됨
RSS 실패 회귀 검증
RSS_URL을 로컬 실패 URL로 monkeypatch 후 fetch_rss() 호출:
entries 0
error_set True
error_prefix RSS fetch error
Hermes 등록 검증
hermes cron list | grep ocM-M019-blog-monitor
=> active
잔존 리스크
--notify실제 실행은 LLM 추출/텔레그램 알림을 동반하고 현재 processed 파일이 비어 있어 backlog 44건을 한 번에 후보로 볼 수 있다. 이번 검증은 중복 알림 폭주를 피하려고--dry-run으로 제한했다.- 224250398767의 볼트 노트는
collected_by: claude-code이고~/.openclaw/workspace/memory/blog-insights에는 산출물이 없었다. 즉 “볼트에 있음”과 “blog_monitor가 정상 수집함”은 별개일 수 있다. - 다음 정기 실행 전에 backlog 처리 정책이 필요하다. 안전한 방법은 processed seed를 복구하거나,
blog_monitor.py에 단일 URL/최근 N시간만 처리 옵션을 추가한 뒤 알림을 제한하는 것이다.
자체평가
- 정확성: 4.7/5
- 완성도: 4.5/5
- 검증: 4.5/5
- 최소 변경: 4.6/5
- 종합: 4.6/5