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