virtual-insanity
← 리포트 목록

ranto28 224252069321 수동 수집 및 파이프라인 누락 원인

2026-04-15 ranto28 [ranto28, blog-ingest, bug-fix]

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