---
task_id: task-1916
type: context
scope: task
created: 2026-04-17
updated: 2026-04-17
status: completed
---

# 맥락 노트: task-1916

**task**: task-1916

---

## 결정 근거

### 데코레이터 내부 read_only 분기 추가 (vs 데코레이터 제거)
- 데코레이터 자체를 건드리는 것이 아닌, 내부 wrapper에서 read_only kwargs를 확인하여 early return
- 대안: cmd_create에서 데코레이터 제거 후 내부에서 git 검증 → 기각. 다른 명령어(cmd_finish 등)도 validate_worktree_safety를 사용하므로 데코레이터 유지가 일관성 있음.
- 결론: wrapper 내부에서 `kwargs.get("read_only", False)` 체크 → True이면 git 검증 skip → 원래 함수 호출

### 3 Step Why

**1st Why: "왜 이 수정이 필요한가?"**
→ read_only=True일 때 git 저장소가 아닌 경로에서도 안전하게 동작해야 함. 현재는 데코레이터가 먼저 git 검증을 수행하여 {"status": "error"} 반환 → worktree_path 키 없음 → 테스트 실패.

**2nd Why: "왜 데코레이터 내부 분기가 최선인가?"**
→ read_only 모드에서는 worktree를 생성하지 않으므로 git 저장소 유효성 검사가 불필요. cmd_create 내부의 read_only 분기보다 먼저 데코레이터가 차단하는 것이 문제. 데코레이터에서 이를 인지하고 skip하는 것이 가장 최소한의 변경.

**3rd Why: "왜 이 접근이 다른 대안보다 나은가?"**
→ 대안1(데코레이터 제거): cmd_finish 등 다른 함수도 사용 → 영향 범위 넓음. 대안2(테스트에서 실제 git repo 사용): 테스트 환경 복잡도 증가, 원래 의도는 "git repo 없이도 read_only=True면 동작"하는 것. 대안3(데코레이터 내부 분기): 변경 범위 최소, 의도 명확, 회귀 위험 최저.

## 참조 자료

- 데코레이터 정의: `scripts/worktree_manager.py:187-218`
- cmd_create 함수: `scripts/worktree_manager.py:226-297`
- 실패 테스트: `tests/integration/test_phase1_integration.py:61-67`
- 전수조사 보고서: `memory/reports/system3docs-full-audit.md`
- 실제 함수: `dispatch.py:1479` (_warn_phase_without_task_id)

## 주의사항

- validate_worktree_safety는 cmd_create 외에 cmd_finish에서도 사용 가능 → 해당 함수에 read_only가 없으므로 영향 없음
- wrapper에서 read_only 판별 시 positional arg가 아닌 kwargs로 접근해야 함 (cmd_create의 4번째 파라미터)
