virtual-insanity
← 리포트 목록

담낭이 Substack 크론 무수신 진단 + 복구

2026-04-15 damnang

결론

완전 복구는 아직 아니다. Substack 뉴스레터 크론 자체는 Hermes에 재등록했지만, Damnang 메일은 현재 로컬 수집 토큰이 보는 Gmail 계정에 들어오지 않는다.

핵심 원인은 2개다.

  1. Hermes 마이그레이션 누락/오검증: OpenClaw gmail-newsletter-collector는 비활성화되어 있는데, 대응 Hermes job ocAQ-AQ004-gmail-newsletter-command가 현재 ~/.hermes/cron/jobs.json에 없었다. AQ 검증은 실제 수집기를 실행한 게 아니라 OpenClaw 명령 문자열을 출력한 것끼리 diff했다.
  2. Gmail 계정 불일치: Damnang 최신 메일은 [email protected]으로 오고 있으나, 로컬 수집기 OAuth 토큰은 [email protected]을 보고 있다. 그래서 수집기에서 from:[email protected] 검색 결과가 0건이다.

“담낭이” 식별 결과

  • 식별명: Damnang / Damnang2
  • Substack 발신자: Damnang <[email protected]>
  • Substack URL: https://damnang2.substack.com
  • X/Twitter alias: @damnang2
  • 로컬 근거:
  • ~/knowledge/.../260311_x_twitter_httpsxcomdamnang2status2031238446.md
  • ~/knowledge-agent/200 아토믹/220 기업/260311_x_twitter_httpsxcomdamnang2statu.md
  • 과거 OpenClaw twitter collector archive의 handle damnang2
  • Gmail connector 근거:
  • 최신 메일: Credo Technology Deep Dive, 2026-04-15T03:26:50Z, 수신자 [email protected]
  • 최근 Damnang 메일 다수 확인: LWLG Structural Technology Risk Analysis, Is CXMT a Threat or an Illusion?, Citron Sees the Valuation, but Misses the Technology

수집 채널 + cron job

채널은 Substack email → Gmail API → gmail_newsletter_collector.py → vault 121 뉴스레터 → Telegram digest 구조다.

  • 수집기: ~/.openclaw/workspace/scripts/pipeline/gmail_newsletter_collector.py
  • Damnang 정의:
  • name: Damnang
  • query: from:[email protected]
  • category: 반도체-테크
  • OpenClaw job:
  • id: gmail-newsletter-collector
  • schedule: 47 6 * * * Asia/Seoul
  • 현재: enabled=false, migrationStatus=migrated-to-hermes
  • Hermes job:
  • 원래 있어야 할 id: ocAQ-AQ004-gmail-newsletter-command
  • 진단 시점: 없음
  • 조치 후: enabled=true, next run 2026-04-16T06:47:00+09:00

마지막 수신 / 끊긴 시점

  • Gmail 자체 수신은 끊기지 않았다.
  • Gmail connector에서 Damnang 최신 메일 확인: 2026-04-15 12:26:50 KST (Credo Technology Deep Dive)
  • vault 수신은 사실상 Damnang에 대해 동작한 흔적이 없다.
  • ~/knowledge-agent/100 수신함/121 뉴스레터/에는 BondEconomics, MacroCompass, CompoundingQuality 노트만 있고 Damnang 노트는 없다.
  • rg Damnang|damnang2|담낭 결과도 newsletter 노트가 아니라 X/Twitter 노트만 확인됐다.
  • 수집기 상태 파일:
  • ~/.openclaw/workspace/memory/gmail-newsletter/state.json
  • 마지막 수동 진단 실행 후 last_run=2026-04-15T12:42:57+09:00, last_count=0

원인 진단 근거

1) Hermes AQ 마이그레이션 검증이 실제 수집을 하지 않음

AQ 검증 파일:

  • ~/.openclaw/workspace/verification/hermes-migration/batchAQ/20260414_165058_gmail-newsletter-collector_ocAQ-AQ004-gmail-newsletter-command.json
  • ...165059...
  • ...165101...

검증의 OpenClaw side command는 실제 collector가 아니라 아래 형태였다.

python3 -c '... print(next(j["payload"]["command"] ... id=="gmail-newsletter-collector"))'

출력도 실제 수집 결과가 아니라 collector 명령 문자열이었다.

PYTHONPATH=... python3 .../gmail_newsletter_collector.py --days 2

따라서 AQ의 strict diff PASS는 “수집 정상” 검증이 아니라 “명령 문자열 출력 일치” 검증이었다.

2) 현재 Hermes jobs.json에서 newsletter job이 사라져 있었음

진단 시 hermes cron list에는 newsletter job이 없었고, ~/.hermes/cron/jobs.json에서도 ocAQ-AQ004-gmail-newsletter-command가 없었다.

3) 로컬 Gmail 수집 토큰은 Damnang 메일함을 보지 못함

로컬 수집기가 쓰는 Gmail profile:

emailAddress: [email protected]

동일 토큰으로 직접 Gmail API 검색:

from:[email protected] newer_than:30d => 0 []
from:[email protected] newer_than:7d => 7 [...]
from:substack.com newer_than:7d => 10 [...]

반면 Gmail connector 검색에서는 Damnang 메일이 [email protected]으로 수신되어 있었다. 즉 작가/메일 발송 문제도, Substack 전체 장애도 아니고 수집기가 바라보는 Gmail 계정이 다르다.

적용한 복구 조치

1) Hermes newsletter cron 재등록

백업:

  • ~/.hermes/cron/jobs.json.bak-damnang-newsletter-20260415_124244

추가/복구한 job:

  • id: ocAQ-AQ004-gmail-newsletter-command
  • type/job_type/kind: shell
  • schedule: 47 6 * * *
  • command: PYTHONPATH=... python3 .../gmail_newsletter_collector.py --days 2
  • enabled: true
  • next_run_at: 2026-04-16T06:47:00+09:00

검증:

ocAQ-AQ004-gmail-newsletter-command [active]
Name: gmail-newsletter-collector
Schedule: 47 6 * * *
Next run: 2026-04-16T06:47:00+09:00

추가 관찰: hermes cron list는 “Gateway is not running” 경고를 냈지만, 프로세스 검색에서는 python -m hermes_cli.main gateway run PID 50183이 살아 있었다. Gateway 상태 판정 경로가 불일치할 수 있어 별도 점검 필요.

2) 수집기 안전 옵션 추가

수정 파일:

  • ~/.openclaw/workspace/scripts/pipeline/gmail_newsletter_collector.py

변경 요약:

  • --only 추가: 특정 newsletter만 수동 진단 가능
  • --limit 추가: 한 번에 저장할 최대 건수 제한
  • --no-digest 추가: 진단 실행 때 Telegram 발송 생략
  • Substack chat/verification noise skip:
  • verification code
  • new thread from

구문 검증:

python3 -m py_compile .../gmail_newsletter_collector.py => OK

라이브 1회 실행 결과

실행:

PYTHONPATH=... python3 gmail_newsletter_collector.py --days 7 --only Damnang --limit 1 --no-digest

결과:

[start] 뉴스레터 수집 시작 (days=7, backfill=False, only=Damnang, limit=1)
[done] 0건 수집 완료

해석: collector 동작 자체는 실패하지 않았지만, 로컬 Gmail 계정([email protected])에 Damnang 메일이 없어 수집할 수 없었다. 따라서 Damnang 신규 노트/Telegram 발송은 아직 성공하지 않았다.

남은 차단점

완전 복구에는 아래 중 하나가 필요하다.

  1. ~/.credentials/gmail_token.json을 Damnang 메일이 도착하는 [email protected] 계정으로 재인증한다.
  2. Damnang Substack 수신 주소를 현재 collector 계정인 [email protected]으로 바꾼다.
  3. newsletter collector가 계정별 token을 지원하도록 확장하고, Damnang만 [email protected] 토큰을 쓰게 한다.

현재는 1번이 가장 빠르고 안전하다. 다만 OAuth 재인증은 계정 선택/브라우저 승인이 필요해서 해리 확인이 필요하다.

재발 방지 권고

  • Hermes migration harness는 “명령 문자열 echo”가 아니라 실제 side-effect/출력 파일/상태 파일 변화를 검증해야 한다.
  • newsletter별 staleness monitor 추가:
  • 예: Damnang 최근 3일 이메일은 있는데 vault 저장 0건이면 경보
  • Gmail API query count와 vault note count를 별도로 비교
  • Gmail token profile을 collector 시작 시 로그에 남기기:
  • [email protected]처럼 실제 계정 출력
  • Substack 비본문 메일 필터 유지:
  • chat thread, verification code는 수집 대상에서 제외
  • Hermes Gateway 상태 판정 불일치 점검:
  • 프로세스는 살아 있으나 CLI list는 not running 경고를 내고 있음

자체평가

  • 정확성: 4.5/5 — 원인 2개를 실제 로그/API로 확인했다.
  • 완성도: 4.0/5 — cron 재등록과 안전 옵션은 완료. Damnang 수집 자체는 Gmail 계정 재인증 전이라 미완.
  • 검증: 4.5/5 — py_compile, Hermes list, Gmail API query, targeted live run 확인.
  • 최소 변경: 4.5/5 — 관련 collector와 해당 Hermes job만 수정했다.

종합: 4.4/5. 남은 리스크는 OAuth 계정 재정렬 전까지 Damnang 신규 글이 계속 수집되지 않는다는 점이다.