virtual-insanity
← 리포트 목록

지식사랑방 인사이트 파이프라인 입력원 고갈 — discovery_filter 입력 재설계 제안서

2026-09-28 hermes [discovery_filter, 지식사랑방, 인사이트파이프라인, 입력원고갈, 제안서, 보고규칙, 크레딧]

discovery_filter 입력 재설계 제안서 (2026-09-28)

한 줄 요약: 필터는 멀쩡히 돌지만 읽는 폴더 6개가 전부 죽어 있고, 살아있는 자료(에이전트 수신함 텔레그램 335건/7일, 외사 리서치 md 329건/7일)는 아예 안 보고 있다. 게다가 채점 사전에 채권·크레딧 단어가 없어서 입력만 바꿔도 통과율이 3.6%에 그친다. 입력 교체(A) + 채점 사전 보강 + "0건 연속이면 정상완료 금지" 규칙을 같이 넣어야 한다.

1. [권고]

1순위 — A안 채택: 살아있는 입력원 2개 추가 + 죽은 입력원 3개 제외 (codex 위임, 코드 수정)

  • 무엇을: collect_candidates()(595행)에 1) ~/knowledge-agent/400-reports/외사 리서치/<최근 7일>/{01_US_IG_시장전반, 02_섹터·발행사, 03_발행·수급, 04_데일리·마켓브리핑, 06_지표·이벤트}/*.md 추가 (최근 7일 329건 중 크레딧 단어 포함 322건 = 97.9%). 2) ~/knowledge-agent/100-inbox/119-텔레그램/**/*.md 추가, 단 _daily.md 제외 + 에너지/호르무즈/질소비료 키워드 본문 매칭 시 드롭 (최근 7일 328건 중 본문 에너지계열 92건 = 28% 드롭 예상). 3) 입력 목록에서 memory/github-ideas·memory/telegram-topics·memory/youtube-collector(3개 모두 파일 0건) 제거, memory/cu-research는 7일 mtime 컷 적용(현재 후보 3,777건 중 3,515건 = 93%가 08-16에 멈춘 cu-research).
  • 왜: 이게 유일하게 "오늘 들어온 원료"를 필터에 넣는 방법이다. 죽은 크론을 되살리는 B안은 원인이 사용량 한도(아래 현황)라 다시 죽을 공산이 크고, 되살려도 채권 관심과 무관한 블로그·깃허브 원료다.
  • 기대효과: 일 신규 후보 0~1건 → 약 90건/일(외사 ~47건/일 + 텔레그램 ~34건/일 에너지 드롭 후). 현 채점 기준으로도 7일 통과 13건(외사 12 + 텔레그램 1) 이상, 즉 "Passed 0" 11회 연속 → 일 1~2건.

1순위(동반) — 채점 사전(KEYWORD_SCORES 119~135행)에 채권·크레딧 단어 추가 (codex 위임)

  • 무엇을: KEYWORD_SCORES에 채권/크레딧/스프레드/IG/하이일드/국채/회사채/금리/연준/FOMC/발행/수급/듀레이션/커브 등 추가(각 1~2점). 현재 사전은 ETF·엔지니어링·Claude·제텔카스텐 중심이고 "채권·크레딧·스프레드"가 0개다(채권은 139행 레짐 가산에만 있음).
  • 왜: 사전 보강 없이 외사 리서치만 넣으면 중앙값 2.3점, 6점 이상 3.6%다. 해리 최우선 관심(크레딧)이 점수에 반영돼야 통과물이 해리 쪽으로 기운다.
  • 기대효과: 외사 리서치 6점 이상 비율 3.6% → 목표 15~25%(스킬 기준 정상 통과율 15~40%). 수치는 codex 반영 후 재채점으로 확인.

2순위 — 보고 규칙 도입: "exit 0인데 Passed 0이 연속 3회면 정상 완료 금지" (아래 4절 초안, codex가 agent_queue_worker.py 5871행 반영)

  • 왜: 현재 agent_queue_worker.py 5871행 judgment = "정상 완료"는 세 단계 종료코드만 본다. 그래서 산출 0건이 11회 연속인데 매번 "정상 완료"로 올라간다.
  • 기대효과: 가짜 정상완료 보고 11회/4일 → 0회. 원천 고갈이 3회(약 1일) 안에 드러남.

3순위 — C안(실행 빈도 축소)은 A안 반영 전까지 임시로만

  • 현재 하루 약 3회(09-25~09-28 사이 12회) 도는데 매번 3,777건 전체를 다시 읽고 전량 스킵한다. A안 반영 전 1~2일은 하루 1회로 줄여도 손해가 없다. 단 오케스트레이터 루틴 빈도 조정도 해리 확인 대상이면 제안만 한다.

B안(죽은 상류 크론 재가동) — 비권고, 해리 확인 대상이라 실행하지 않음

  • 세 크론 모두 사람이 아니라 사용량 한도 초과(429, usage_limit_reached)와 2시간 타임아웃으로 죽었다. 원인 해소 없이 켜면 같은 방식으로 재사망한다.
  • 되살려도 원료가 블로그(ranto28)·깃허브·아이디어 수집 계열이라 채권·크레딧 관심과 거리가 멀다.

2. [현황] (조회 2026-09-28 04:0x~04:15 KST)

2-1. 파이프라인 결과 로그 — 최근 11회 전부 통과 0건

명령: grep -hE 'Passed' logs/insight-pipeline-result-*.log (최신 12개)

로그 후보 스킵 신규 통과(≥6)
20260928T032852 3777 3777 0 0
20260927T212222 3777 3777 0 0
20260927T152123 3777 3776 1 0
20260927T091800 3776 3776 0 0
20260927T031315 3776 3776 0 0
20260926T211156 3776 3776 0 0
20260926T135633 3776 3776 0 0
20260926T074904 3776 3776 0 0
20260925T204719 3777 3777 0 0
20260925T190323 3777 3777 0 0
20260925T130209 3777 3777 0 0
  • 연속 Passed(≥6): 0 = 11회 (12번째 로그 20260925T081200에는 Passed 줄 자체가 없음). 로그 총 100개, 가장 오래된 것 20260829T113315.
  • 같은 기간 지식사랑방 인사이트 리포트(260923~260926)는 "신규 0건 N일째"를 적고 FRED 대체 인사이트로 때웠다.

2-2. 입력 폴더 6개 — 최근 3일 신규 0건

명령: find <폴더> -type f -mtime -3 | wc -l, 최신 파일 ls -t

입력 폴더 (33~42행) 총 파일 최근 3일 최신 파일 날짜
memory/github-ideas 0 0 없음
memory/telegram-topics 0 0 없음
memory/blog-insights 200 0 2026-07-20 (.processed_blogs.json)
memory/cu-research 275 0 2026-08-16 (consensus/2026-08-16.json)
reports/ideas 67 0 2026-06-30 (discoveries_20260630.jsonl)
memory/youtube-collector 0 0 없음
  • 추가로 코드가 읽는 볼트 노트(shared.vault_paths INBOX=~/knowledge/100 수신함, LEGACY_NOTES=~/knowledge/200 아토믹, 7일 컷)는 해리 볼트 수신함 최근 7일 0건.
  • collect_candidates() 직접 호출 결과 후보 3,777건 출처: cu-research 3,515 / blog 199 / idea 58 / vault 5. 처리완료 캐시(.processed_filter.json) 10,000건(517행 캡)에 3,777건 전량 포함 → 매번 전량 스킵.
  • 캐시 무시 재채점: 현재 후보 중앙값 0점, 6점 이상 60건(1.6%). 즉 문제는 임계값이 아니라 원료.

2-3. 상류 수집 크론 3개 — 모두 꺼짐, 원인은 한도·타임아웃

출처: /Users/ron/.hermes/cron/jobs.json (총 158개)

크론 id enabled 마지막 상태 마지막 실행 마지막 오류
ocM-M019-blog-monitor False error 2026-08-16 09:32 HTTP 429 usage_limit_reached (prolite)
ocRESTORE-intelligence-cluster False error 2026-06-28 03:00 TimeoutExpired 7200s
ocRESTORE-inbox-bridge False error 2026-08-16 12:31 HTTP 429 usage_limit_reached (prolite)
  • 같은 날(08-16) 같은 429로 죽은 형제 크론: oc118-channel-collector, ocRESTORE-vault120-sync, ocRESTORE-discovery-enricher(08-16 01:35 error).
  • intelligence-cluster는 idea_collector → discovery_filter → discovery_digest 체인 자체였다. 현재 discovery_filter는 이 크론이 아니라 오케스트레이터 "지식사랑방 인사이트" 루틴(agent_queue_worker.py 5860~5935행)에서만 돈다.

2-4. 실제로 살아있는 자료 — 필터가 안 보는 곳

경로 최근 3일 최근 7일 최신 상태
~/knowledge-agent/100-inbox 전체 (.md) 122 342 2026-09-27 살아있음
└ 119-텔레그램/Trillion_labs 117 335 2026-09-27 크론 oc119-trillion-labs-collector enabled, 09-27 21:00 ok
└ 114 youtube-insights 4 6 2026-09-27 시스템·AI도구 영상 위주
└ 117 macro-series 1 1 2026-09-25 FRED 요약 1개
└ 119-크레딧메일 0 0 2026-09-04 멈춤(151건)
└ 118 텔레그램 / 120 지식사랑방 / 121 뉴스레터 0 0 2026-09-12 멈춤
~/knowledge-agent/400-reports/외사 리서치 332 파일 md 329 2026-09-27 살아있음, 크레딧 중심

입력 후보별 적합도(최근 7일, 현 채점 기준, 캐시 무시):

후보 입력 건수 점수 중앙값 6점 이상 크레딧 단어 포함 에너지계열 포함
외사 리서치 md 329 2.3 12 (3.6%) 322 (97.9%) 70 (21%)
119-텔레그램 (본문 기준) 328 2.7 1 (0.3%) 6 (1.8%) 92 (28%)
114 youtube-insights 6 6.2 4 (66.7%) — —

해석: 외사 리서치가 해리 관심사(크레딧)와 가장 맞고 양도 충분하다. 텔레그램은 양은 많지만 크레딧 비중 1.8%, 에너지 28%라 제외 필터 없이는 해리가 "요새 안 본다"고 한 주제가 인사이트를 채우게 된다. 유튜브는 통과율은 높지만 시스템·AI도구 내용이라 투자 인사이트 목적과 다르다(유지하되 가중치 낮게).

2-5. 선택지 비교

기준 A 살아있는 입력 추가 B 죽은 상류 크론 재가동 C 실행 빈도 축소
신규 원료 약 90건/일 블로그·아이디어 수집 재개 시 수십 건(08-16 이전 수준) 0 (변화 없음)
해리 관심 적합 높음(외사 크레딧 97.9%) 낮음(블로그·깃허브) 해당 없음
재발 위험 낮음(원천 크론 살아있음) 높음(429·타임아웃 원인 미해소) 해당 없음
해리 확인 필요 아니오(코드 수정, codex) 예(크론 재활성화) 루틴 빈도 조정 시 예
판정 채택 비권고 A 반영 전 임시

입력 범위 제안(해리 관심 기준): - 포함: 외사 리서치 01_US_IG_시장전반 / 02_섹터·발행사 / 03_발행·수급 / 04_데일리·마켓브리핑 / 06_지표·이벤트, 119-크레딧메일(재개되면 자동 반영), 117 macro-series. - 조건부 포함: 119-텔레그램(에너지·호르무즈·이란·유가·디젤·LNG·정유·질소·비료 본문 매칭 드롭), 05_매크로·심화전략(135건으로 양이 가장 많아 편중 우려 — 소스당 상한 필요). - 제외: 00_외사별일일(다른 폴더 원문의 요약본이라 중복), *.bak-* 폴더, _daily.md 묶음 파일, github-ideas/telegram-topics/youtube-collector(빈 폴더).

3. [리스크]

  • 단일 장애점: 새 입력도 결국 외사 수집기(hermes-research-sales-engine)와 Trillion_labs 수집 크론 둘에 의존한다. 두 곳 중 하나라도 멈추면 같은 고갈이 재발 → 4절 보고 규칙이 그 안전망이다.
  • 캐시 포화: 처리완료 캐시는 최근 10,000건만 남긴다(517행). 새 입력이 하루 90건이면 약 110일 치가 들어가 문제는 없지만, cu-research 3,515건이 캐시 자리를 계속 차지하므로 7일 컷 적용이 같이 가야 한다.
  • 편중: 외사 05_매크로·심화전략 한 폴더가 135/329(41%)라 컷 없이 넣으면 한 폴더가 인사이트를 독식한다. 소스별 상한(예: 폴더당 일 20건) 필요.
  • 중복 알림: 9점 이상 heartbeat DM(905~915행)이 외사 리서치를 "새 발견"으로 알릴 수 있다. 외사 리포트는 네빌 브리핑이 이미 다루므로 heartbeat 대상에서 외사 소스는 빼는 것이 안전(볼트 노트를 뺀 08-24 패치와 같은 논리).
  • 에너지 필터 과잉: "금리+유가"를 같이 다룬 크레딧 글까지 드롭될 수 있다. 크레딧 단어가 함께 있으면 드롭하지 않는 예외가 필요.
  • 이번 제안은 코드·크론을 건드리지 않았다. 반영 전까지 "지식사랑방 인사이트" 루틴은 계속 0건을 낸다.

4. 보고 규칙 초안 — "exit 0 + Passed 0 연속"은 정상 완료가 아니다

적용 대상: 오케스트레이터 "오늘의 지식사랑방 인사이트" 루틴(agent_queue_worker.py 5860~5935행) 및 [대행:X] 재라우팅 건.

  1. 판정은 종료코드와 산출 건수를 둘 다 본다. discovery_filter 로그의 New와 Passed(≥min_score)를 뽑아 판정한다.
  2. Passed = 0이 연속 3회 이상(최근 insight-pipeline-result 로그 기준)이면 판정 문구는 "정상 완료"가 아니라 원천 고갈(Passed 0 연속 N회)로 쓴다. status는 done으로 두되 결론 줄 맨 앞에 이 문구를 넣는다.
  3. 추가로 New = 0 또는 New / Candidates < 1%가 연속 3회면 "입력원 고갈 의심"으로 ops 채널에 1회 알린다(같은 날 중복 알림 금지).
  4. 원천 고갈 판정 중에는 오케스트레이터가 같은 루틴을 재발행하지 않는다(스킬 hermes-pipeline-empty-output-diagnosis의 "원료가 멈춘 상태에서 재발행 금지"와 동일).
  5. 결론 4블록 예시:
  6. 결론: 인사이트 파이프라인 3단계 실행했으나 원천 고갈(Passed 0 연속 11회) — 산출 0건
  7. 근거: discovery_filter 종료코드 0(후보 3777/신규 0/통과 0), 입력 폴더 6개 최근 3일 신규 0건
  8. 검증: grep -c 'Passed(≥6): 0' 최근 로그 → 11 / exit code 0
  9. 근거파일: logs/insight-pipeline-result-.log "Passed(≥6): 0"
  10. 해제 조건: Passed ≥ 1이 1회라도 나오면 연속 카운트를 0으로 리셋.

5. [검증방법] (codex 반영 후)

지표 명령 기대값 롤백 조건
신규 후보 다음 실행 로그 grep -h 'Candidates' logs/insight-pipeline-result-*.log New ≥ 30 New < 5가 2회 연속
통과 건수 같은 로그 Passed(≥6) 1회당 ≥ 1, 7일 합 ≥ 7 7일 합 0
통과율 collect_candidates()+score_text() 재채점 새 입력 6점 이상 15~40% 60% 초과(사전 과잉 가산)
에너지 드롭 통과물 제목에 에너지 키워드 grep 0건(크레딧 동반 예외 제외) 에너지 통과물 ≥ 3건/주
가짜 정상완료 bus_commands result_note에서 "정상 완료" + Passed 0 동시 출현 0건 규칙 반영 후에도 발생
캐시 .processed_filter.json 중 cu: 접두 비율 7일 컷 후 점진 감소 캐시 캡 도달로 신규 스킵 재발

원본 경로

  • 필터 코드: /Users/ron/.hermes/workspace/scripts/pipeline/discovery_filter.py (33~42행 입력, 119~135행 채점 사전, 517행 캐시 캡, 595행 collect_candidates, 904행 결과 로그)
  • 판정 코드: /Users/ron/.hermes/workspace/scripts/agent_queue_worker.py 5871행 judgment = "정상 완료"
  • 크론 장부: /Users/ron/.hermes/cron/jobs.json
  • 결과 로그: /Users/ron/.hermes/workspace/logs/insight-pipeline-result-2026092*.log
  • 관련 스킬: hermes-pipeline-empty-output-diagnosis