---
task_id: task-2489
type: context
scope: task
created: 2026-05-08
updated: 2026-05-08
status: completed
---

# 맥락 노트: task-2489

**task**: task-2489

---

## 결정 근거

### 핵심 결정 1 — 격리 경로 채택 (production 미반영)

- 회장 명시: "task-2486 머지 후 production 반영 여부 회장 재결정"
- → `tools/poc/termination_classifier.py` (격리), `memory/poc/termination_classifier/fixtures/`, `tests/poc/`
- task-timer.py / dispatch.py / scripts/* / utils/* 일체 미수정
- dry-run classifier는 dataclass 반환만 수행 — 마커 파일 생성/dispatch 호출 코드 절대 포함 안 함

**대안 기각**: task-timer.py에 `--reason` 옵션 즉시 추가 → 회장 명시 위반. 본 task는 청사진 + dry-run까지만.

### 핵심 결정 2 — UNCLASSIFIED enum 추가 (8종 + 안전망 1종)

- 명세는 8종 분류만 production 출력으로 정의
- 구현은 룰 미해당 케이스를 회장 알림으로 보내기 위해 UNCLASSIFIED 1종 추가
- production 반영 시 회장 재결정: (A) WAITING_FOR_CHAIR_DECISION 흡수 vs (B) 별도 보존 + manual 분류 큐
- 명세 섹션 9에 명시

### 핵심 결정 3 — 우선순위 결정 트리 (9단계)

phase_b_integration_items_260507.md 섹션 2.1의 9단계 분류 룰을 그대로 반영:
1. PR MERGED + close clean → DONE
2. PR MERGED + close FAIL + 외부 workspace dirty → MERGED_CLOSE_BLOCKED_EXTERNAL
3. PR MERGED + dogfooding 외부 의존 → DOGFOODING_PENDING
4. PR OPEN + 본질 PASS + 후속 task 의존 → MERGE_PENDING_DEPENDENCY
5. 본질 시작 차단 + 외부 시스템 → BLOCKED_BY_EXTERNAL_DEPENDENCY
6. 차단 사유가 본 task 이전 commit → FAILED_PREEXISTING
7. 회장 정책 결정 대기 → WAITING_FOR_CHAIR_DECISION
8. retry 초과 + 본질 결함 → ESCALATED
9. 미해당 → UNCLASSIFIED (회장 알림)

동시 매칭 시 가장 높은 우선순위(낮은 번호) 채택.

### 3 Step Why 자문

- **1st Why**: 왜 이 설계가 필요한가? → 기존 dispatch.py는 retry 초과 시 ESCALATED만 발동. MERGE_PENDING_DEPENDENCY/DOGFOODING_PENDING/MERGED_CLOSE_BLOCKED_EXTERNAL/BLOCKED_BY_EXTERNAL_DEPENDENCY/FAILED_PREEXISTING/WAITING_FOR_CHAIR_DECISION 6종 케이스가 모두 ESCALATED로 잘못 박제되어 retry 룰이 본질 재작업 시도 → 무의미. 8종 분류 + 자동 lifecycle close 트리거가 필요.
- **2nd Why**: 왜 이 접근(격리 + dry-run)이 최선인가? → task-timer.py는 모든 종료에 .done 자동 생성하는 결함이 있어, 즉시 production 수정 시 다른 진행 중 task에 영향. 회장 명시: task-2486 머지 후 재결정. 격리 경로 dry-run으로 회귀 fixtures를 검증 → 회장이 데이터 기반 결정 가능.
- **3rd Why**: 왜 격리 + dry-run이 다른 대안보다 나은가? → 대안 1(즉시 적용)은 production 영향 위험. 대안 2(설계 문서만)는 검증 부재로 회장 결정 시 데이터 부족. 격리 + dry-run + fixture 검증은 위험 0 + 데이터 충분.
- → A-B-C 답변 일관성 확인 PASS.

## 참조 자료

- 작업 정의: `/home/jay/workspace/memory/tasks/task-2489.md`
- Phase B 통합 항목 원안: `/home/jay/workspace/memory/orchestration/phase_b_integration_items_260507.md`
- DOGFOODING_PENDING 박제 룰: `/home/jay/.claude/projects/-home-jay--cokacdir-workspace-autoset/memory/feedback_dogfooding_pending_classification_260507.md`
- MERGE_PENDING_DEPENDENCY 박제 룰: `/home/jay/workspace/memory/feedback/feedback_merge_pending_dependency_classification_260507.md`
- MERGED_CLOSE_BLOCKED_EXTERNAL 박제 룰: `/home/jay/workspace/memory/feedback/feedback_merged_close_blocked_external_classification_260507.md`
- 본 task 산출물 명세: `/home/jay/workspace/memory/orchestration/phase_b_termination_classifier_spec_260508.md` (모코시 작성, 654줄)
- 본 task 산출물 코드: `/home/jay/workspace/tools/poc/termination_classifier.py` (스바로그 작성, 441줄)

## 주의사항

- ❌ task-timer.py / dispatch.py / finish-task.sh / scripts/* / utils/* 절대 수정 금지 (회장 명시)
- ❌ 실제 분류 dispatch / production marker (`events/<task>.done` 등) 직접 생성 금지
- ❌ admin override 사용 금지
- ⚠️ Phase B 진입 시 task-timer.py `--reason` 옵션 default 동작 변경 결정 회장 권한
- ⚠️ task-2485 fixture는 가정 시나리오 — Phase B 진입 시 실증 데이터 확보 필요 (Codex 검증 medium 지적)
- ⚠️ UNCLASSIFIED 운용 방안 회장 재결정 영역 (명세 섹션 9 참조)
