---
task_id: task-2459
type: plan
scope: task
created: 2026-05-05
updated: 2026-05-05
status: completed
---

# 계획서: task-2459 — Phase 2-C: Verify + Mixed Commit Detector

**task**: task-2459
**목표**: `taskctl_verify.py` 11개 검사 모듈 + `mixed_commit_detector.py` 독립 감지 모듈 + spec 2종 + 테스트 2 묶음. 자동 복구 코드 0줄. Phase 2-D Integration이 호출할 인터페이스 고정.
**승인**: 회장 → 아누 → dev5팀 한정승인 (한정승인 X팀 → 팀장이 G1/G2/G3 자체 통과)
**근거**: memory/tasks/task-2459.md, task-2454 Phase 1 머지 완료(e51cf833)

---

## 목표

- `scripts/taskctl_verify.py` (모듈+CLI): 11 검사 (start_lock, branch_match, worktree_path, cancelled_check, dirty_tree, changed_paths, scope_matrix, handoff_chain, mixed_commit, qc_report_guard, guard_sh) → 결과 JSON + exit code (PASS=0, FAIL=1, WARN=2).
- `scripts/mixed_commit_detector.py` (모듈+CLI): branch HEAD ~ origin/main 사이 commit에서 `[task-NNNN]` 토큰 추출 → 본 task-id와 다른 토큰 발견 시 `.tasks/locks/<task-id>.frozen` 마커 생성 + `.tasks/evidence/<task-id>/mixed-commit-<timestamp>.json` evidence + exit 1. ★ rebase/cherry-pick/LLM 자동 분리 코드 0줄.
- spec 2종: `memory/specs/taskctl-verify-spec.md`, `memory/specs/mixed-commit-detector-spec.md` — Phase 2-D Integration 인터페이스 명세.
- 테스트 2 묶음: `tests/verify/test_taskctl_verify.py` + `tests/mixed_commit/test_detector.py` — 11 검사 PASS/FAIL + mixed 5 시나리오 + freeze 마커 + escalation evidence.

## 범위

### 포함
- 모듈 파일만 신규 작성 (스크립트 본체 + CLI)
- spec 2종 + 테스트 2 묶음
- evidence 포맷 + exit code 규약 + freeze 마커 동작 명세
- L1 라이브 시나리오: 의도 mixed commit 만들고 detector 실행 → freeze + evidence 확인

### 제외 (다음 페이즈 이후)
- `scripts/taskctl.py` 연결 코드 → Phase 2-D Integration 담당 (dev4가 owner이지만 본 task에서는 호출 인터페이스만 고정)
- git hooks 수정 → Phase 2-A (dev3 다그다)
- 자동 복구 / rebase / cherry-pick — ★ 절대 금지 (회장 명시)

## 위임 계획

- **엔키 (백엔드)**: `taskctl_verify.py` + `mixed_commit_detector.py` 본체 작성, spec 2종 작성
- **닌기르수 (테스터)**: `tests/verify/` + `tests/mixed_commit/` 테스트 작성 + L1 라이브 시나리오 실행
- **이쉬타르 (프론트)**: 본 task에 프론트 산출물 없음 — 대기
- **나부 (UX/UI)**: 본 task에 UX 산출물 없음 — 대기

## 검증 기준

- pytest 두 디렉토리 PASS
- `python3 scripts/taskctl_verify.py task-2459` → JSON 출력 + exit 0 (clean state)
- `python3 scripts/mixed_commit_detector.py task-2459` (clean) → exit 0
- 의도 mixed commit 생성 → detector exit 1 + freeze 마커 + evidence JSON 존재
- 자동 복구 코드 0줄 (grep 검증: `rebase|cherry-pick|anthropic|openai`)
- Codex 사전 검증 PASS
- G3 독립 검증 PASS

## 산출물 (6개 신규)

| 파일 | 역할 |
|---|---|
| `scripts/taskctl_verify.py` | 11 검사 모듈+CLI |
| `scripts/mixed_commit_detector.py` | mixed 감지 모듈+CLI |
| `memory/specs/taskctl-verify-spec.md` | verify 스펙 |
| `memory/specs/mixed-commit-detector-spec.md` | detector 스펙 |
| `tests/verify/test_taskctl_verify.py` | 11 검사 테스트 |
| `tests/mixed_commit/test_detector.py` | mixed 5 시나리오 테스트 |
