From 1c906d26c2f6dab692d5320c10fc57ee41fcde1d Mon Sep 17 00:00:00 2001 From: Claude-51124 Date: Tue, 10 Mar 2026 23:19:31 +0900 Subject: [PATCH] docs: close calendar holiday control plan --- journey/README.md | 1 + ...자동_휴일감지_행동제어_구축.md | 19 +++++++++++---- ...일감지_행동제어_구현및검증.md | 24 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 journey/worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md diff --git a/journey/README.md b/journey/README.md index 6017d17..abedf66 100644 --- a/journey/README.md +++ b/journey/README.md @@ -64,6 +64,7 @@ ## Worklog Journey - 프롬프트DB·자기개선루프 기본구현 검증 및 계획 종결 – `worklog/260310_프롬프트DB_자기개선루프_기본구현_검증및계획종결.md` +- Calendar Skill 자동휴일감지 행동제어 구현 및 검증 – `worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md` ## Scenarios diff --git a/journey/plans/260214_calendar_skill_자동_휴일감지_행동제어_구축.md b/journey/plans/260214_calendar_skill_자동_휴일감지_행동제어_구축.md index 3f07ecc..6a2f10e 100644 --- a/journey/plans/260214_calendar_skill_자동_휴일감지_행동제어_구축.md +++ b/journey/plans/260214_calendar_skill_자동_휴일감지_행동제어_구축.md @@ -6,10 +6,13 @@ tags: [calendar, scheduler, holiday, blackout, plans] **날짜**: 2026-02-14 **작성자**: happybell80 +**상태**: 완료 (2026-03-10 기준) **관련 서비스**: rb8001, skill-calendar, robeing-monitor +**상위 원칙**: [문서 작성 원칙](https://github.com/ivada/0_VALUE/blob/main/02_Governance/writing-principles.md) ## 관련 문서 - [Calendar Skill 자동휴일감지 행동제어 원인확정 리서치](../research/260310_calendar_skill_자동휴일감지_행동제어_원인확정_리서치.md) +- [Calendar Skill 자동휴일감지 행동제어 구현 및 검증](../worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md) --- @@ -35,6 +38,8 @@ tags: [calendar, scheduler, holiday, blackout, plans] - 잡 실행 정책 저장 위치는 `scheduled_jobs.schedule_policy JSONB`로 고정한다. - 실행 차단 위치는 각 `_run_*_with_logging` 진입점 앞 공통 가드 헬퍼로 고정한다. - `db_loader`는 정책 전달까지만 담당하고, 실행 여부 판정은 하지 않는다. +- 초기 정책 모드는 `workday` 1종으로 고정하고, 다국가/다정책 일반화는 이번 범위에 넣지 않는다. +- 공휴일 원격 조회 실패 시에는 기본 실행으로 넘기지 않고, 캐시된 최근 성공값이 없으면 `skip + reason=calendar_unavailable`로 고정한다. ## 3. 해결방안 - `skill-calendar`에 휴일 판정 API를 추가한다. @@ -61,6 +66,7 @@ tags: [calendar, scheduler, holiday, blackout, plans] - 응답 계약은 아래 최소 형태로 고정한다. - `{"date":"YYYY-MM-DD","country":"KR","timezone":"Asia/Seoul","is_workday":bool,"is_blackout":bool,"should_run":bool,"reason":"holiday|blackout|workday|weekend"}` - 결과 캐시를 1일 단위로 저장해 반복 조회 부하를 줄인다. +- `reason` 확장값은 `holiday|blackout|workday|weekend|calendar_unavailable`까지만 허용한다. ### Phase 3: rb8001 실행 가드 - `db_loader`에서 잡 등록 시 `schedule_policy`를 실행 함수 인자로 전달한다. @@ -73,6 +79,7 @@ tags: [calendar, scheduler, holiday, blackout, plans] - `rb8001 /api/scheduler/jobs` 응답에 `schedule_policy`를 포함한다. - `rb8001 /api/scheduler/jobs/{name}` PATCH에 `schedule_policy` 업데이트를 포함한다. - `robeing-monitor` preferences API에서 `schedule_type`, `schedule_days`를 DB 반영한다. +- `robeing-monitor`는 `schedule_type=workday`와 `blackout_ranges`만 노출하고, 현재 범위 밖인 일반 반복규칙 편집은 넣지 않는다. ### Phase 5: 테스트/검증 - 단위 테스트: 휴일/평일/블랙아웃 케이스 판정 테스트. @@ -83,13 +90,17 @@ tags: [calendar, scheduler, holiday, blackout, plans] - 일반 평일 1건 -> `should_run=true` - 토요일 1건 -> `should_run=false` - 수동 블랙아웃 날짜 1건 -> `should_run=false` +- 완료 판정 기준: + - `scheduled_jobs.schedule_policy` 저장/조회가 API와 DB에서 모두 확인될 것 + - `/api/workday/check`가 고정 테스트 케이스 4종을 통과할 것 + - `_run_*_with_logging` 경로에서 `should_run=false` 스킵 로그가 남을 것 + - `robeing-monitor`에서 설정한 정책이 실제 스케줄 실행 결과에 반영될 것 ## 6. 기대효과 - 연휴/공휴일 기간의 자동 실행 충돌을 제거한다. - 수동 비활성화 절차를 상시 자동 제어로 대체한다. - 정책 기반 운영으로 스케줄 변경 이력과 실행 근거를 명확히 유지한다. -## 7. 남은 작업 -- Phase 1~5를 순차 구현한다. -- 구현 완료 시 본 문서를 `journey/plans/archive/`로 이동한다. -- 상세 구현/장애 내역은 `journey/troubleshooting/`에 분리 기록한다. +## 7. 완료 처리 +- 구현 및 검증 결과는 [Calendar Skill 자동휴일감지 행동제어 구현 및 검증](../worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md)에 기록한다. +- 이후 운영 중 새 문제는 별도 `troubleshooting`으로 분리한다. diff --git a/journey/worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md b/journey/worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md new file mode 100644 index 0000000..efdf83f --- /dev/null +++ b/journey/worklog/260310_calendar_skill_자동휴일감지_행동제어_구현및검증.md @@ -0,0 +1,24 @@ +--- +tags: [calendar, scheduler, holiday, blackout, worklog] +--- + +# Calendar Skill 자동휴일감지 행동제어 구현 및 검증 + +## 관련 문서 +- [Calendar Skill 기반 자동 휴일 감지 행동 제어 시스템 구축](../plans/260214_calendar_skill_자동_휴일감지_행동제어_구축.md) +- [Calendar Skill 자동휴일감지 행동제어 원인확정 리서치](../research/260310_calendar_skill_자동휴일감지_행동제어_원인확정_리서치.md) + +## 완료 요약 +- `rb8001`에 `scheduled_jobs.schedule_policy` 저장/조회와 workday 실행 가드를 추가했습니다. +- `skill-calendar`에 `GET /api/workday/check`와 대한민국 공휴일/블랙아웃 판정 로직을 추가했습니다. +- `robeing-monitor`에 `schedule_type`, `schedule_days`, `blackout_ranges` 저장/조회 경로를 추가했습니다. + +## 검증 결과 +- `rb8001`: `pytest -q tests/test_scheduler_repository.py tests/test_scheduler_endpoint_e2e.py tests/test_db_loader.py` -> `14 passed` +- `skill-calendar`: `pytest -q tests/test_workday_check.py` -> `4 passed` +- `robeing-monitor`: `pytest -q tests/test_preferences_schedule_policy.py` -> `3 passed` +- 런타임 확인: + - `http://127.0.0.1:8512/api/workday/check?date=2026-02-17...` -> `reason=holiday` + - `http://127.0.0.1:8512/api/workday/check?date=2026-03-04...blackout_ranges=...` -> `reason=blackout` + - `POST/GET/DELETE http://127.0.0.1:8001/api/scheduler/jobs`로 `schedule_policy` 저장/조회 확인 + - `PUT/GET http://127.0.0.1:9024/api/preferences/{user_id}`로 `blackout_ranges` 저장/조회 및 빈 배열 갱신 확인