# ralph 코드 PRD — {PHASE_NAME}

> ralph-code.sh가 한 항목씩 자율 처리.
> 모든 정보를 PRD 안에. 자식 ralph는 외부 맥락 못 봄.

## 작업 저장소

- **프로젝트**: {예: qora}
- **모드**: `Master Plan` 또는 `단일 Phase` (해당하는 쪽 명시)
- **브랜치(worktree)**:
  - Master Plan 모드: 모든 Phase가 같은 worktree 사용 (예: `ralph/master-plan`). orchestrator가 PRD를 Phase 순서대로 호출.
  - 단일 Phase 모드: `ralph/{phase}` (Phase마다 분리된 worktree)
- **base**: master

## 글로벌 제약

- **수정 허용 디렉토리**: {예: `src/lens/`, `tests/lens/`}
- **수정 금지**:
  - `package.json`, lockfile
  - public API export 시그니처
  - DB 마이그레이션 파일
- **새 의존성 추가**: 금지
- **한 iter 한 항목**

## 검증 명령

`ralph-code.sh`의 `RALPH_VERIFY`와 동일.

```bash
npm run lint && npm run typecheck && npm test -- src/lens/
```

## 결정 권한 매트릭스

### ralph 자율 (push 금지, 알아서 결정)

- 코딩 스타일 (네이밍, 들여쓰기, 임포트 순서)
- 변수·함수명 (도메인 용어 일치 시)
- 테스트 케이스 추가 (PRD 완료 기준 안에서 보강)
- 명백한 버그 수정 (구현 중 발견)
- 동일 의미의 표현 선택 (early return vs nested if 등)

### 리드 결정 필요 (DECISIONS.md push, [?] 마크)

- PRD에 명시 안 된 옵션 선택 (타입, API 형상, 라이브러리)
- 보안 / DB / public API 영향
- 새 의존성 추가 검토
- PRD 가정과 실제 코드 불일치 → 가정 변경 필요
- 트레이드오프 평가 (성능 vs 가독성, 안전 vs 단순성)
- 비용·시간·외부 효과 발생할 수 있는 선택

### 무조건 종료 (BLOCKERS)

- master/main push 시도 (스크립트가 차단)
- 작업 영역 외 파일 수정 시도
- 의존성 누락 등 환경 문제로 verify 통과 불가
- 동일 항목 fix 1회 후에도 verify 실패

**분간이 모호하면** → 결정 필요로 분류 (안전 우선).

## 항목

### R01 — {짧은 제목}

- [ ] **파일**: `src/lens/foo.ts` (새 / 수정)
- **시그니처**: `export function foo(input: Bar): Baz`
- **동작**: {1~2문장. 추측 여지 없게 명확히}
- **완료 기준**:
  - `tests/lens/foo.test.ts`에 케이스 통과:
    - 정상 입력 → 기대값
    - 빈 입력 → 0 또는 throw
    - 경계 입력 → 명시된 동작
- **항목별 검증**: `npm test -- foo`

### R02 — {짧은 제목}

(동일 형식)

---

## 마커 의미

| 마커 | 의미 |
|------|------|
| `- [ ]` | 미처리 — ralph가 다음 iter에 처리 후보 |
| `- [x]` | 완료 — verify 통과 + commit 완료 |
| `- [?]` | 결정 대기 — DECISIONS.md의 D-NNN 참조. `/btw` 처리 후 [ ]로 복원 |

## PRD 작성 체크리스트 (Alice용)

- [ ] 각 항목 30분 이내 완료 가능 크기인가
- [ ] 완료 기준이 객관적(테스트/exit 0)인가
- [ ] 항목 간 의존성을 순서로 표현했나
- [ ] PRD 안에 모든 정보가 있는가 (외부 문서 참조 ❌)
- [ ] 글로벌 제약이 명시되었나
- [ ] **결정 권한 매트릭스**가 프로젝트 맥락에 맞게 보강되었나
- [ ] 검증 명령이 실제로 실행 가능한가
