---
task_id: task-2517
type: checklist
scope: task
created: 2026-05-09
updated: 2026-05-09
status: completed
---

# 체크리스트: task-2517 — canonical_workspace_resolver

**task**: task-2517

---

## Phase 1 — 설계 (오딘)

- [x] A. task spec 정독 + 4 ambiguity / 7 구현 / 14 회귀 / 19 forbidden 파악
- [x] B. 3문서 업데이트 (plan/context-notes 작성)
- [x] C. 3 Step Why A-B-C 일관성 검증 (context-notes.md)
- [x] D. Codex 사전 검증 실행 + risks 5건 분석 (인터페이스 vs wiring scope, fixture-level 해소, stale 5초 → SHA lock)
- [x] E. worktree 생성: `.worktrees/task-2517-dev2` (origin/main 기반)

## Phase 2 — 구현 (토르)

- [x] A. utils/canonical_workspace_resolver.py 신규 작성 (446줄)
  - CanonicalWorkspace frozen dataclass + to_json/from_dict 헬퍼
  - resolve_canonical_workspace + 5 assert/evaluate 함수
  - resolve_for_hooks (6 hook 통합 인터페이스)
  - CLI entrypoint (--task-id / --json / --assert-cwd / --assert-fresh / --scope / --no-fetch)
- [x] B. workspace_root 결정 로직: git worktree list 첫 entry 우선 (main repo root)
- [x] C. 빌드 검증: `from utils.canonical_workspace_resolver import ...` → import ok
- [x] D. CLI 실시 검증 (worktree + main 양쪽): is_main 정확 판정

## Phase 3 — 회귀 테스트 (헤임달)

- [x] A. tests/regression/test_canonical_workspace_resolver_2517.py 신규 (482줄)
  - 정상 흐름 4건 (main / worktree / SHA lock / env priority)
  - 4 ambiguity 회귀 4건 (wrong cwd / stale main / scope dirty false / finish-task mismatch)
  - Edge 3건 (worktree missing / PROJECT_PATH stale / JSON round-trip)
  - 6 hook 통합 3건 (scope-guard / finish-task / shared SHA)
- [x] B. pytest 14/14 PASS

## 검증

- [x] Goal 1: `from utils.canonical_workspace_resolver import CanonicalWorkspace, resolve_canonical_workspace` → import ok
- [x] Goal 2: `pytest tests/regression/test_canonical_workspace_resolver_2517.py -q` → 14 passed
- [x] Goal 3: `python3 utils/canonical_workspace_resolver.py --task-id task-2517 --json` → CanonicalWorkspace JSON
- [x] Pyright 진단 정리: unused imports 제거 (Optional/MagicMock/_kwargs/cwd unused)
- [x] L1 스모크테스트: worktree+main 양쪽 CLI 실행 검증, --assert-cwd PASS
- [x] forbidden path 0 (정확히 2 파일만 신규)
- [x] 5 모듈 본체 미수정, automation_contracts 미수정, dispatch.py 미수정
- [x] 최종 보고
