Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .claude/resources/plans/PLAN-112.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# [PLAN-112] 스킬 다음 단계 안내 체인 정비

> 이슈: #112
> 브랜치: chore/112-skill-next-step-chain

## 목표
스킬 보고 템플릿의 다음 단계 안내를 실제 작업 흐름
(`open-issue` → 작업 스킬 → `write-test` → `commit-push` → `open-pr`)과 일치시킨다.
현재 `implement`는 `commit-push`를, `fix-concurrency`/`optimize-performance`는 `write-test`를 건너뛰고,
`write-test`는 다음 단계 안내 자체가 없어 체인이 끊긴다.

## 영향 범위
### 신규 파일
- `.claude/skills/write-test/template/output.md` - write-test 보고 템플릿 (다음 단계 안내 포함)

### 수정 파일
- `.claude/skills/write-test/SKILL.md` - Phase 5의 보고 지시를 템플릿 참조로 바꾸고 Phase 6(결과 보고) 신설
- `.claude/skills/implement/template/output.md` - 다음 단계에 `commit-push` 추가
- `.claude/skills/fix-concurrency/template/output.md` - 다음 단계에 `write-test` 추가
- `.claude/skills/optimize-performance/template/output.md` - 다음 단계에 `write-test` 추가
- `.claude/skills/optimize-performance/phases/phase-9-report.md` - 종료 안내 문장에 `write-test` 추가 (output.md와 정의 일치)

## 구현 계획
> 이번 작업은 Java 코드가 아닌 스킬 마크다운 자산 정비다. 레이어 구분 대신 파일 단위로 적는다.

1. **`implement/template/output.md`** (19행)
- `**다음**: \`write-test\` → \`open-pr\`` → `**다음**: \`write-test\` → \`commit-push\` → \`open-pr\``

2. **`write-test/template/output.md`** (신설)
- 기존 output.md 패턴을 따른다: 상단 작성 가이드 주석 + 항목만 채우는 본문.
- 본문 구성 (SKILL.md Phase 5의 보고 요구사항을 그대로 옮긴다):
- 제목: `## 테스트 완료 - {대상}`
- **실행**: 실행 대상(전체 / 클래스)과 통과/실패 수
- **작성**: 작성한 테스트 파일 경로와 메서드 수 (작성 없이 실행만 한 경우 "실행만")
- **실패**: 남은 실패 목록 `클래스명#메서드명` - 원인 요약, 없으면 "없음"
- **다음**: `commit-push` → `open-pr`
- 가이드 주석에 명시: 실패가 남았으면 다음 항목을 `실패 해소 후 commit-push`로 적는다 (실패 상태에서 커밋 유도 금지).

3. **`write-test/SKILL.md`**
- Phase 5 항목 2 `모두 통과하면 결과를 한 줄로 보고하고 종료하라` → `모두 통과하면 Phase 6으로 이동하라`
- Phase 5 항목 6 `최종 결과를 사용자에게 보고하라: ...` (하위 불릿 포함) → 삭제하고 Phase 6으로 이관
- Phase 5 말미 `> Skip 조건: 없음 (필수 Phase)` 앞에 `> 다음 Phase 조건: 실행 결과가 확정되었을 때(전부 통과 또는 반복 상한 도달)` 추가
- Phase 6 신설 (다른 스킬의 결과 보고 Phase와 동일 형식):
```
## Phase 6: 결과 보고

1. 보고 템플릿을 Read로 읽어라: `.claude/skills/write-test/template/output.md`
2. 템플릿 상단 작성 가이드에 따라 항목을 채워 보고하라. (가이드 주석은 출력에 포함하지 않는다.)

> Skip 조건: 없음 (필수 Phase)
```

4. **`fix-concurrency/template/output.md`** (24행)
- `**다음**: \`commit-push\` → \`open-pr\`` → `**다음**: \`write-test\` → \`commit-push\` → \`open-pr\``

5. **`optimize-performance/template/output.md`** (19행)
- `**다음**: \`commit-push\` → \`open-pr\`` → `**다음**: \`write-test\` → \`commit-push\` → \`open-pr\``

6. **`optimize-performance/phases/phase-9-report.md`** (48행)
- `없으면 스킬 종료. 커밋은 \`commit-push\`, PR은 \`open-pr\`로 이어간다. 이 스킬은 커밋하지 않는다.`
→ `없으면 스킬 종료. 테스트는 \`write-test\`, 커밋은 \`commit-push\`, PR은 \`open-pr\`로 이어간다. 이 스킬은 커밋하지 않는다.`
- output.md의 다음 안내와 문구가 어긋나지 않게 유지한다. (fix-concurrency phases에는 대응 문장 없음 - grep으로 확인 완료)

## 결정 필요 (Decisions needed)
- [x] write-test 다음 단계 안내 방식 - 옵션 A: output.md 신설 + Phase 6 / 옵션 B: Phase 5에 한 줄 추가
→ **옵션 A 채택.** 다른 모든 스킬이 보고 템플릿 + 결과 보고 Phase 구조를 쓰고 있어 형식 일관성이 유지되고,
보고 형식 정의가 템플릿 한 곳에 모인다.

## 검증
- 대상 테스트: 해당 없음 (Java 코드 변경 없음)
- 수정 후 `grep -rn "다음" .claude/skills/*/template/output.md`로 전 스킬의 다음 안내가
`open-issue → (write-plan → implement | fix-concurrency | optimize-performance) → write-test → commit-push → open-pr → review-feedback` 체인과 일치하는지 대조한다.

## Deviation Log
> implement 스킬이 구현 중 계획을 벗어난 지점을 여기에 기록한다. (작성 시점엔 비워둔다)
2 changes: 1 addition & 1 deletion .claude/skills/fix-concurrency/template/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@
- **응답 품질**: 정원 초과 거절 {n}건이 {상태 코드}/{에러 코드}로 응답, 5xx {n}건
- **운영 반영**: {추가한 마이그레이션과 영향 / "스키마 변경 없음"}, {인프라 추가 여부}, {다중 인스턴스 성립 여부}
- **기록**: `.claude/resources/concurrency/{이슈번호}/{슬러그}/record.md`
- **다음**: `commit-push` → `open-pr`
- **다음**: `write-test` → `commit-push` → `open-pr`
2 changes: 1 addition & 1 deletion .claude/skills/implement/template/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@

**정책 문서**: {갱신한 service-policy 파일과 바뀐 규칙, 없으면 "변경 없음"}
**이슈**: {Deviation Log 한 줄 요약, 없으면 "없음"}
**다음**: `write-test` → `open-pr`
**다음**: `write-test` → `commit-push` → `open-pr`
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@
- 개선 없이 종료된 경우에도 보고한다. 무엇을 시도했고 왜 효과가 없었는지 적는다.

> 다음 Phase 조건: 같은 이슈에 대상이 남아 있으면 → Phase 1 (새 슬러그 디렉토리).
> 없으면 스킬 종료. 커밋은 `commit-push`, PR은 `open-pr`로 이어간다. 이 스킬은 커밋하지 않는다.
> 없으면 스킬 종료. 테스트는 `write-test`, 커밋은 `commit-push`, PR은 `open-pr`로 이어간다. 이 스킬은 커밋하지 않는다.
>
> Skip 조건: 없음
2 changes: 1 addition & 1 deletion .claude/skills/optimize-performance/template/output.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@
- **종료 사유**: {Phase 8 판정 표의 조건}
- **운영 반영**: {추가한 마이그레이션과 그 영향 · 없으면 "스키마 변경 없음"}
- **기록**: `.claude/resources/perf/{이슈번호}/{슬러그}/record.md`
- **다음**: `commit-push` → `open-pr`
- **다음**: `write-test` → `commit-push` → `open-pr`
14 changes: 10 additions & 4 deletions .claude/skills/write-test/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,22 @@ effort: xhigh
1. 테스트를 Bash로 실행하라 (H2):
- 인자가 비어 있으면 전체 실행: `./gradlew test`
- 인자가 있으면 해당 클래스/메서드만 실행: `./gradlew test --tests "{패키지}.{테스트클래스명}"`
2. 모두 통과하면 결과를 한 줄로 보고하고 종료하라
2. 모두 통과하면 Phase 6으로 이동하라
3. 실패한 테스트가 있으면 원인을 분석하라:
- 실패 로그에서 실패한 테스트 클래스와 메서드명(`클래스명#메서드명`)을 추출하라
- 각 실패의 에러 메시지와 스택 트레이스에서 핵심 원인을 파악하라
- 필요하면 실패한 테스트 소스 파일을 Read로 읽어 맥락을 확인하라
4. 실패 원인이 **이번에 작성한 테스트 코드** 쪽이면 수정하고 재실행하라. **수정, 재실행 반복은 최대 3회**다.
상한에 도달하면 중단하고 남은 실패 목록(`클래스명#메서드명`), 각 원인 분석, 시도한 수정 내용을 보고하라
5. 실패 원인이 **테스트 대상(프로덕션) 코드의 버그**면 원인과 수정 방안을 보고만 하고, 사용자 확인 없이 대상 코드를 수정하지 마라
6. 최종 결과를 사용자에게 보고하라:
- 실행 대상과 통과/실패 수
- 실패가 남았으면 테스트 목록(`클래스명#메서드명`)과 각 원인 요약 (1~2문장)

> 다음 Phase 조건: 실행 결과가 확정되었을 때 (전부 통과 또는 반복 상한 도달)

> Skip 조건: 없음 (필수 Phase)

## Phase 6: 결과 보고

1. 보고 템플릿을 Read로 읽어라: `.claude/skills/write-test/template/output.md`
2. 템플릿 상단 작성 가이드에 따라 항목을 채워 보고하라. (가이드 주석은 출력에 포함하지 않는다.)

> Skip 조건: 없음 (필수 Phase)
13 changes: 13 additions & 0 deletions .claude/skills/write-test/template/output.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!--
작성 가이드 (이 주석은 출력에 포함하지 마라):
- 아래 항목만 채우고 그 외 서술을 덧붙이지 마라.
- 실행 항목에는 실행 대상이 전체(`./gradlew test`)인지 특정 클래스인지 드러나게 적는다.
- 작성 없이 실행만 요청된 경우 작성 항목은 "실행만"으로 적는다.
- 실패가 남았으면 다음 항목을 `실패 해소 후 commit-push`로 적어라. 실패 상태에서 커밋을 유도하지 마라.
-->
## 테스트 완료 - {대상}

- **실행**: {전체 / `{테스트클래스명}`} - 통과 {n}, 실패 {n}
- **작성**: {`{테스트 파일 경로}` (메서드 {n}개) / "실행만"}
- **실패**: {`클래스명#메서드명` - 원인 요약 (1~2문장), 없으면 "없음"}
- **다음**: `commit-push` → `open-pr`
Loading