From 7eea592636167bc7bcfdf38b05dc16238475c3af Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 18 Mar 2026 09:34:44 +0900 Subject: [PATCH] docs: record scheduler recovery and debug --- journey/README.md | 2 ++ ..._재기동후_브리핑실패_디버그.md | 26 +++++++++++++++ journey/debug/README.md | 2 ++ ...타임정합화_및_강제실행검증.md | 32 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 journey/debug/260318_스케줄러_재기동후_브리핑실패_디버그.md create mode 100644 journey/worklog/260318_브리핑스케줄_런타임정합화_및_강제실행검증.md diff --git a/journey/README.md b/journey/README.md index 8315d4b..481012f 100644 --- a/journey/README.md +++ b/journey/README.md @@ -110,6 +110,7 @@ - [디버그 인덱스](./debug/README.md) – 구현 직전 단계에서 문제 지점과 상태 차이를 고정하는 보조 문서 계층 - [콜드메일 IR 분석이 첫 번째 PDF를 잘못 선택하는 상태](./debug/260313_coldmail_ir_분석대상_오선택_디버그.md) - [콜드메일 IR 분석 로딩 메시지가 완료 후 갱신되지 않는 상태](./debug/260313_coldmail_ir_로딩메시지_미갱신_디버그.md) +- [스케줄러 재기동 후 브리핑 실패 디버그](./debug/260318_스케줄러_재기동후_브리핑실패_디버그.md) ## Worklog Journey @@ -119,6 +120,7 @@ - Company X 내부문서 RAG 근거응답 구현 및 시나리오 검증 – `worklog/260312_companyx_내부문서_rag_근거응답_구현및시나리오검증.md` - LLM 모델 SSOT 1차구현 및 로컬검증 – `worklog/260316_llm_model_ssot_1차구현_및_로컬검증.md` - gpt-5-mini 전환과 skill-news provider-agnostic 정리 – `worklog/260316_gpt5_mini_전환과_skill_news_provider_agnostic_정리.md` +- 브리핑 스케줄 런타임 정합화 및 강제실행 검증 – `worklog/260318_브리핑스케줄_런타임정합화_및_강제실행검증.md` ## Scenarios diff --git a/journey/debug/260318_스케줄러_재기동후_브리핑실패_디버그.md b/journey/debug/260318_스케줄러_재기동후_브리핑실패_디버그.md new file mode 100644 index 0000000..8d1252e --- /dev/null +++ b/journey/debug/260318_스케줄러_재기동후_브리핑실패_디버그.md @@ -0,0 +1,26 @@ +--- +tags: [debug, scheduler, briefing, headlines, coldmail, rb8001] +--- + +# 스케줄러 재기동 후 브리핑 실패 디버그 + +**작성일**: 2026-03-18 +**상태**: closed + +## 정의 +- 2026-03-18 오전 스케줄러는 실제로 실행됐지만, `naverworks_daily`, `coldmail_daily`, `daily_headlines`가 정상 완료되지 않았습니다. + +## 기준 +- 스케줄 성공은 `트리거됨`이 아니라 `필수 env/토큰/호출 계약이 맞아 실제 전송까지 완료됨`으로 판단합니다. +- 확인 근거는 `rb8001` 컨테이너 로그, 런타임 env, 실제 강제 실행 결과입니다. + +## 적용 +- `NAVERWORKS_COMPANY_EMAIL` 누락으로 `naverworks_daily`, `coldmail_daily`가 실패했습니다. +- `OpenAIHandler.extract_keywords()`가 `custom_prompt` 인자를 받지 않아 `daily_headlines`가 실패했습니다. +- `daily_headlines`와 `naverworks_briefing`은 채널별 Slack bot token을 고정 env가 아니라 `slack_channel -> slack_workspace.bot_token` 경로로 찾아야 했습니다. +- `naverworks_briefing`, `coldmail` 계열은 host network 환경인데 `SKILL_SLACK_URL` 기본값이 `http://skill-slack:8502`여서 로컬 호출에 실패했습니다. +- `coldmail` 계열 일부 경로는 `SERVICE_API_KEY`가 아니라 `SKILL_SLACK_API_KEY`만 읽어서 `401 API key is missing`가 발생했습니다. + +## 디버그 결론 +- 문제는 스케줄러 자체가 아니라 `재기동 후 드러난 런타임 env 누락 + Slack token 선택 경로 불일치 + LLM 호출 계약 불일치`였습니다. +- 위 값과 계약을 현재 SSOT에 맞춘 뒤 강제 실행으로 다시 검증했습니다. diff --git a/journey/debug/README.md b/journey/debug/README.md index 4901a95..e5f746d 100644 --- a/journey/debug/README.md +++ b/journey/debug/README.md @@ -18,3 +18,5 @@ tags: [debug, journey, documentation, index] - 상태: `closed (fixed)` - [콜드메일 IR 분석 로딩 메시지가 완료 후 갱신되지 않는 상태](./260313_coldmail_ir_로딩메시지_미갱신_디버그.md) - 상태: `open` +- [스케줄러 재기동 후 브리핑 실패 디버그](./260318_스케줄러_재기동후_브리핑실패_디버그.md) + - 상태: `closed` diff --git a/journey/worklog/260318_브리핑스케줄_런타임정합화_및_강제실행검증.md b/journey/worklog/260318_브리핑스케줄_런타임정합화_및_강제실행검증.md new file mode 100644 index 0000000..83e37ce --- /dev/null +++ b/journey/worklog/260318_브리핑스케줄_런타임정합화_및_강제실행검증.md @@ -0,0 +1,32 @@ +--- +tags: [rb8001, scheduler, briefing, headlines, coldmail, worklog] +--- + +# 브리핑 스케줄 런타임 정합화 및 강제실행 검증 + +## 관련 문서 +- [스케줄러 재기동 후 브리핑 실패 디버그](../debug/260318_스케줄러_재기동후_브리핑실패_디버그.md) + +## 왜 +- 2026-03-18 오전 스케줄러는 실행됐지만 `naverworks_daily`, `coldmail_daily`, `daily_headlines`가 런타임 값과 호출 계약 불일치로 실패했습니다. + +## 무엇 +- `workspace-config/runtime.env`에 `NAVERWORKS_COMPANY_EMAIL`, `NAVERWORKS_BRIEFING_CHANNEL_ID`, `SKILL_SLACK_URL`를 추가했습니다. +- `OpenAIHandler.extract_keywords()`가 `custom_prompt`를 받도록 맞췄습니다. +- `headlines_workflow`, `naverworks_briefing`은 채널 기준 DB 조회로 Slack bot token을 고르도록 수정했습니다. +- `coldmail_processor`, `coldmail_workflow`, `slack/coldmail_service`는 `SKILL_SLACK_API_KEY`가 없을 때 `SERVICE_API_KEY`를 fallback으로 사용하도록 수정했습니다. + +## 어떻게 검증했는지 +- `rb8001`를 `docker compose up -d --build --force-recreate rb8001`로 재배포했습니다. +- 런타임 env에서 `NAVERWORKS_COMPANY_EMAIL=info@company-x.partners`, `NAVERWORKS_BRIEFING_CHANNEL_ID=C09C98KK2TT`, `SKILL_SLACK_URL=http://localhost:8502`, `SERVICE_API_KEY=skill-slack-api-key-2025` 반영을 확인했습니다. +- 강제 실행 결과: + - `NanerWorksBriefingSkill().process_briefing()` 예외 없이 종료 + - `run_headlines_workflow('C09C98KK2TT')` 결과 `{'success': True, 'message_ts': '1773793679.992769', 'errors': []}` + - `coldmail_daily` 재실행에서 기존 `401 API key is missing`는 재현되지 않음 + +## 확인된 사실과 남은 범위 +- 브리핑/헤드라인 스케줄 실패 원인이던 env, token, LLM 계약 문제는 복구됐습니다. +- `coldmail_daily`는 스케줄 호출 자체는 복구됐지만, 이번 실행에서도 `IR attachment 선택 실패`, `No PDF attachments processed` 같은 업무 로직 경고는 남았습니다. + +## 결론 +- 이번 수정으로 오전 브리핑 계열 스케줄의 런타임 정합성과 강제 실행 검증은 닫혔고, 남은 콜드메일 경고는 별도 도메인 로직 이슈로 분리됐습니다.