---
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` 같은 업무 로직 경고는 남았습니다.

## 결론
- 이번 수정으로 오전 브리핑 계열 스케줄의 런타임 정합성과 강제 실행 검증은 닫혔고, 남은 콜드메일 경고는 별도 도메인 로직 이슈로 분리됐습니다.
