@simplysm/sd-claude 13.0.85 → 13.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +160 -30
  2. package/claude/rules/sd-claude-rules.md +14 -11
  3. package/claude/rules/sd-library-issue.md +9 -4
  4. package/claude/rules/sd-readme.md +5 -0
  5. package/claude/skills/sd-audit/SKILL.md +133 -0
  6. package/claude/skills/sd-check/SKILL.md +111 -49
  7. package/claude/skills/sd-commit/SKILL.md +121 -32
  8. package/claude/skills/sd-debug/SKILL.md +96 -82
  9. package/claude/skills/sd-document/SKILL.md +64 -58
  10. package/claude/skills/sd-document/_common.py +1 -6
  11. package/claude/skills/sd-document/extract_docx.py +0 -1
  12. package/claude/skills/sd-document/extract_pdf.py +17 -25
  13. package/claude/skills/sd-document/extract_pptx.py +0 -1
  14. package/claude/skills/sd-document/extract_xlsx.py +2 -4
  15. package/claude/skills/sd-email-analyze/SKILL.md +33 -23
  16. package/claude/skills/sd-init/SKILL.md +99 -80
  17. package/claude/skills/sd-plan/SKILL.md +113 -119
  18. package/claude/skills/sd-plan-dev/SKILL.md +122 -0
  19. package/claude/skills/sd-readme/SKILL.md +147 -100
  20. package/claude/skills/sd-spec/SKILL.md +207 -0
  21. package/claude/skills/sd-spec/sections/api.md +85 -0
  22. package/claude/skills/sd-spec/sections/architecture.md +104 -0
  23. package/claude/skills/sd-spec/sections/db.md +99 -0
  24. package/claude/skills/sd-spec/sections/process.md +98 -0
  25. package/claude/skills/sd-spec/sections/ui.md +146 -0
  26. package/claude/skills/sd-test/SKILL.md +116 -0
  27. package/claude/skills/sd-use/SKILL.md +149 -0
  28. package/package.json +1 -1
  29. package/claude/rules/sd-simplysm-usage.md +0 -7
  30. package/claude/skills/sd-api-review/SKILL.md +0 -85
  31. package/claude/skills/sd-document/__pycache__/_common.cpython-313.pyc +0 -0
  32. package/claude/skills/sd-review/SKILL.md +0 -72
  33. package/claude/skills/sd-simplify/SKILL.md +0 -66
@@ -0,0 +1,104 @@
1
+ # 아키텍처 관련 추가 섹션
2
+
3
+ 요구사항에 아키텍처/패키지 구조 변경이 포함된 경우, 기본 섹션에 아래 양식을 추가한다.
4
+
5
+ ## 패키지 의존성 다이어그램
6
+
7
+ 패키지 간 의존성을 Mermaid로 표현한다.
8
+
9
+ **양식:**
10
+ ````markdown
11
+ ## 패키지 의존성
12
+
13
+ ```mermaid
14
+ graph TD
15
+ A[{패키지A}] --> B[{패키지B}]
16
+ A --> C[{패키지C}]
17
+ B --> D[{공통 패키지}]
18
+ C --> D
19
+ ```
20
+
21
+ **의존성 설명:**
22
+ | 패키지 | 의존 대상 | 관계 설명 |
23
+ |-------|----------|----------|
24
+ | {패키지} | {의존 패키지} | {이유/용도} |
25
+ ````
26
+
27
+ **예시:**
28
+ ````markdown
29
+ ## 패키지 의존성
30
+
31
+ ```mermaid
32
+ graph TD
33
+ solid-demo[solid-demo<br/>client] --> solid[solid<br/>UI]
34
+ solid-demo --> service-client[service-client]
35
+ solid-demo-server[solid-demo-server<br/>server] --> service-server[service-server]
36
+ service-client --> service-common[service-common]
37
+ service-server --> service-common
38
+ service-server --> orm-node[orm-node]
39
+ orm-node --> orm-common[orm-common]
40
+ solid --> core-browser[core-browser]
41
+ core-browser --> core-common[core-common]
42
+ orm-common --> core-common
43
+ service-common --> core-common
44
+ ```
45
+
46
+ **의존성 설명:**
47
+ | 패키지 | 의존 대상 | 관계 설명 |
48
+ |-------|----------|----------|
49
+ | solid-demo | solid | SolidJS UI 컴포넌트 사용 |
50
+ | solid-demo | service-client | API 클라이언트 사용 |
51
+ | service-server | orm-node | DB 접근 |
52
+ | orm-node | orm-common | ORM 공통 타입/인터페이스 |
53
+ ````
54
+
55
+ ## 모듈 구조
56
+
57
+ 신규 또는 변경되는 모듈의 내부 구조를 기술한다.
58
+
59
+ **양식:**
60
+ ````markdown
61
+ ## 모듈 구조
62
+
63
+ ### {패키지명}
64
+
65
+ ```
66
+ {패키지명}/src/
67
+ index.ts — 공개 API (export)
68
+ {모듈}/
69
+ {파일}.ts — {역할}
70
+ ```
71
+
72
+ **공개 API:**
73
+ | export | 타입 | 설명 |
74
+ |--------|------|------|
75
+ | {이름} | {class/function/type/...} | {설명} |
76
+ ````
77
+
78
+ **예시:**
79
+ ````markdown
80
+ ## 모듈 구조
81
+
82
+ ### orm-common
83
+
84
+ ```
85
+ orm-common/src/
86
+ index.ts — 공개 API
87
+ decorators/
88
+ Column.ts — @Column 데코레이터
89
+ Table.ts — @Table 데코레이터
90
+ types/
91
+ ColumnType.ts — 컬럼 타입 정의
92
+ QueryDef.ts — 쿼리 정의 타입
93
+ utils/
94
+ QueryBuilder.ts — 쿼리 빌더 유틸리티
95
+ ```
96
+
97
+ **공개 API:**
98
+ | export | 타입 | 설명 |
99
+ |--------|------|------|
100
+ | Column | decorator | 컬럼 매핑 데코레이터 |
101
+ | Table | decorator | 테이블 매핑 데코레이터 |
102
+ | IQueryBuilder | interface | 쿼리 빌더 인터페이스 |
103
+ | ColumnType | type | 지원 컬럼 타입 열거 |
104
+ ````
@@ -0,0 +1,99 @@
1
+ # DB 관련 추가 섹션
2
+
3
+ 요구사항에 DB/테이블/스키마가 포함된 경우, 기본 섹션에 아래 양식을 추가한다.
4
+
5
+ ## 테이블 스키마
6
+
7
+ 테이블의 컬럼과 제약조건을 정의한다.
8
+
9
+ **양식:**
10
+ ```markdown
11
+ ## 테이블 스키마
12
+
13
+ ### {테이블명}
14
+
15
+ | 컬럼 | 타입 | NULL | 기본값 | 설명 |
16
+ |------|------|------|-------|------|
17
+ | {컬럼명} | {타입} | {Y/N} | {기본값} | {설명} |
18
+
19
+ **인덱스:**
20
+ - {인덱스명}: {컬럼 목록} ({UNIQUE/일반})
21
+
22
+ **외래키:**
23
+ - {컬럼} → {참조테이블}.{참조컬럼}
24
+ ```
25
+
26
+ **예시:**
27
+ ```markdown
28
+ ## 테이블 스키마
29
+
30
+ ### users
31
+
32
+ | 컬럼 | 타입 | NULL | 기본값 | 설명 |
33
+ |------|------|------|-------|------|
34
+ | id | INT | N | AUTO_INCREMENT | PK |
35
+ | name | VARCHAR(100) | N | | 사용자 이름 |
36
+ | email | VARCHAR(255) | N | | 이메일 주소 |
37
+ | role | ENUM('admin','user','viewer') | N | 'user' | 역할 |
38
+ | created_at | DATETIME | N | CURRENT_TIMESTAMP | 생성일시 |
39
+ | deleted_at | DATETIME | Y | NULL | 삭제일시 (soft delete) |
40
+
41
+ **인덱스:**
42
+ - idx_users_email: email (UNIQUE)
43
+ - idx_users_role: role (일반)
44
+
45
+ **외래키:**
46
+ - 없음
47
+ ```
48
+
49
+ ## ERD (Mermaid)
50
+
51
+ 테이블 간 관계를 Mermaid ERD로 표현한다.
52
+
53
+ **양식:**
54
+ ````markdown
55
+ ## ERD
56
+
57
+ ```mermaid
58
+ erDiagram
59
+ {테이블A} ||--o{ {테이블B} : "{관계 설명}"
60
+ {테이블A} {
61
+ type column_name "설명"
62
+ }
63
+ ```
64
+ ````
65
+
66
+ **예시:**
67
+ ````markdown
68
+ ## ERD
69
+
70
+ ```mermaid
71
+ erDiagram
72
+ users ||--o{ orders : "주문"
73
+ orders ||--|{ order_items : "주문 항목"
74
+ products ||--o{ order_items : "상품"
75
+
76
+ users {
77
+ int id PK
78
+ varchar name "사용자 이름"
79
+ varchar email "이메일"
80
+ }
81
+ orders {
82
+ int id PK
83
+ int user_id FK
84
+ datetime ordered_at "주문일시"
85
+ varchar status "주문 상태"
86
+ }
87
+ order_items {
88
+ int id PK
89
+ int order_id FK
90
+ int product_id FK
91
+ int quantity "수량"
92
+ }
93
+ products {
94
+ int id PK
95
+ varchar name "상품명"
96
+ decimal price "가격"
97
+ }
98
+ ```
99
+ ````
@@ -0,0 +1,98 @@
1
+ # 프로세스 관련 추가 섹션
2
+
3
+ 요구사항에 프로세스/흐름이 포함된 경우, 기본 섹션에 아래 양식을 추가한다.
4
+
5
+ ## 프로세스 플로우차트
6
+
7
+ 업무 프로세스나 기능 흐름을 Mermaid 플로우차트로 표현한다.
8
+
9
+ **양식:**
10
+ ````markdown
11
+ ## 프로세스 흐름
12
+
13
+ ### {프로세스명}
14
+
15
+ ```mermaid
16
+ flowchart TD
17
+ A[{시작}] --> B{조건}
18
+ B -->|{Yes}| C[{처리}]
19
+ B -->|{No}| D[{처리}]
20
+ C --> E[{종료}]
21
+ D --> E
22
+ ```
23
+
24
+ **단계 설명:**
25
+ | 단계 | 설명 | 담당 |
26
+ |------|------|------|
27
+ | {단계명} | {상세 설명} | {시스템/사용자} |
28
+ ````
29
+
30
+ **예시:**
31
+ ````markdown
32
+ ## 프로세스 흐름
33
+
34
+ ### 주문 처리
35
+
36
+ ```mermaid
37
+ flowchart TD
38
+ A[주문 접수] --> B{재고 확인}
39
+ B -->|재고 있음| C[결제 처리]
40
+ B -->|재고 없음| D[품절 안내]
41
+ C --> E{결제 성공?}
42
+ E -->|성공| F[배송 준비]
43
+ E -->|실패| G[결제 실패 안내]
44
+ F --> H[배송 시작]
45
+ H --> I[배송 완료]
46
+ ```
47
+
48
+ **단계 설명:**
49
+ | 단계 | 설명 | 담당 |
50
+ |------|------|------|
51
+ | 주문 접수 | 사용자가 장바구니에서 주문 확정 | 사용자 |
52
+ | 재고 확인 | 주문 상품의 재고 수량 확인 | 시스템 |
53
+ | 결제 처리 | PG사 연동 결제 수행 | 시스템 |
54
+ | 배송 준비 | 포장 및 송장 생성 | 시스템 |
55
+ ````
56
+
57
+ ## 시퀀스 다이어그램
58
+
59
+ 시스템 간 또는 컴포넌트 간 상호작용을 Mermaid 시퀀스 다이어그램으로 표현한다.
60
+
61
+ **양식:**
62
+ ````markdown
63
+ ## 시퀀스 다이어그램
64
+
65
+ ### {상호작용명}
66
+
67
+ ```mermaid
68
+ sequenceDiagram
69
+ participant {Actor1}
70
+ participant {Actor2}
71
+ {Actor1}->>+{Actor2}: {요청}
72
+ {Actor2}-->>-{Actor1}: {응답}
73
+ ```
74
+ ````
75
+
76
+ **예시:**
77
+ ````markdown
78
+ ## 시퀀스 다이어그램
79
+
80
+ ### 사용자 로그인
81
+
82
+ ```mermaid
83
+ sequenceDiagram
84
+ participant Browser
85
+ participant Server
86
+ participant DB
87
+
88
+ Browser->>+Server: POST /api/auth/login (email, password)
89
+ Server->>+DB: SELECT user WHERE email = ?
90
+ DB-->>-Server: user record
91
+ Server->>Server: bcrypt.compare(password, hash)
92
+ alt 인증 성공
93
+ Server-->>Browser: 200 { token }
94
+ else 인증 실패
95
+ Server-->>-Browser: 401 { error }
96
+ end
97
+ ```
98
+ ````
@@ -0,0 +1,146 @@
1
+ # UI 관련 추가 섹션
2
+
3
+ 요구사항에 UI/화면이 포함된 경우, 기본 섹션에 아래 양식을 추가한다.
4
+
5
+ ## 화면 레이아웃
6
+
7
+ 화면의 전체 구조를 기술한다. 필요시 ASCII 레이아웃을 포함한다.
8
+
9
+ **양식:**
10
+ ```markdown
11
+ ## 화면 레이아웃
12
+
13
+ ### {화면명}
14
+
15
+ **구성:**
16
+ - 상단: {설명}
17
+ - 좌측: {설명}
18
+ - 메인: {설명}
19
+ - 하단: {설명}
20
+
21
+ **와이어프레임:**
22
+ (ASCII 또는 텍스트 기반 레이아웃)
23
+ ```
24
+
25
+ **예시:**
26
+ ```markdown
27
+ ## 화면 레이아웃
28
+
29
+ ### 관리자 대시보드
30
+
31
+ **구성:**
32
+ - 상단: 네비게이션 바 (로고, 메뉴, 사용자 정보)
33
+ - 좌측: 사이드 메뉴 (대시보드, 사용자 관리, 설정)
34
+ - 메인: 통계 카드 영역 + 최근 활동 테이블
35
+ - 하단: 없음
36
+
37
+ **와이어프레임:**
38
+ ┌─────────────────────────────────┐
39
+ │ Logo [대시보드] [사용자] [설정] │
40
+ ├────────┬────────────────────────┤
41
+ │ 메뉴 │ [통계1] [통계2] [통계3] │
42
+ │ │ │
43
+ │ 대시보드│ 최근 활동 │
44
+ │ 사용자 │ ┌──┬──────┬─────┬──┐ │
45
+ │ 설정 │ │# │ 제목 │ 상태 │..│ │
46
+ │ │ └──┴──────┴─────┴──┘ │
47
+ └────────┴────────────────────────┘
48
+ ```
49
+
50
+ ## 시트/테이블 컬럼 정의
51
+
52
+ 데이터를 표시하는 시트나 테이블의 컬럼을 정의한다.
53
+
54
+ **양식:**
55
+ ```markdown
56
+ ## 시트 컬럼 정의
57
+
58
+ ### {시트/테이블명}
59
+
60
+ | 컬럼명 | 타입 | 필수 | 정렬 | 설명 |
61
+ |-------|------|------|------|------|
62
+ | {컬럼} | {text/number/date/select/...} | {Y/N} | {Y/N} | {설명} |
63
+ ```
64
+
65
+ **예시:**
66
+ ```markdown
67
+ ## 시트 컬럼 정의
68
+
69
+ ### 사용자 목록
70
+
71
+ | 컬럼명 | 타입 | 필수 | 정렬 | 설명 |
72
+ |-------|------|------|------|------|
73
+ | 이름 | text | Y | Y | 사용자 표시 이름 |
74
+ | 이메일 | text | Y | Y | 로그인 이메일 |
75
+ | 역할 | select | Y | Y | admin / user / viewer |
76
+ | 가입일 | date | Y | Y | 계정 생성일 |
77
+ | 상태 | select | Y | N | active / inactive / suspended |
78
+ | 최근 접속 | date | N | Y | 마지막 로그인 시간 |
79
+ ```
80
+
81
+ ## 필터 폼 정의
82
+
83
+ 시트/테이블의 필터 폼을 별도로 정의한다.
84
+
85
+ **양식:**
86
+ ```markdown
87
+ ## 필터 폼
88
+
89
+ ### {시트/테이블명} 필터
90
+
91
+ | 필터명 | 입력 타입 | 설명 |
92
+ |-------|----------|------|
93
+ | {필터} | {text/select/date-range/...} | {설명} |
94
+ ```
95
+
96
+ **예시:**
97
+ ```markdown
98
+ ## 필터 폼
99
+
100
+ ### 사용자 목록 필터
101
+
102
+ | 필터명 | 입력 타입 | 설명 |
103
+ |-------|----------|------|
104
+ | 이름/이메일 | text | 이름 또는 이메일로 검색 |
105
+ | 역할 | select (다중) | admin / user / viewer |
106
+ | 상태 | select (다중) | active / inactive / suspended |
107
+ | 가입일 | date-range | 시작일 ~ 종료일 |
108
+ ```
109
+
110
+ ## 데이터 편집 폼 정의
111
+
112
+ 데이터 생성/수정을 위한 편집 폼을 정의한다.
113
+
114
+ **양식:**
115
+ ```markdown
116
+ ## 편집 폼
117
+
118
+ ### {폼명}
119
+
120
+ | 필드명 | 입력 타입 | 필수 | 기본값 | 설명 |
121
+ |-------|----------|------|-------|------|
122
+ | {필드} | {text/number/select/date/textarea/...} | {Y/N} | {기본값} | {설명} |
123
+
124
+ **검증 규칙:**
125
+ - {필드}: {규칙}
126
+ ```
127
+
128
+ **예시:**
129
+ ```markdown
130
+ ## 편집 폼
131
+
132
+ ### 사용자 등록/수정
133
+
134
+ | 필드명 | 입력 타입 | 필수 | 기본값 | 설명 |
135
+ |-------|----------|------|-------|------|
136
+ | 이름 | text | Y | | 사용자 표시 이름 |
137
+ | 이메일 | text | Y | | 로그인용 이메일 주소 |
138
+ | 비밀번호 | password | Y (등록 시) | | 8자 이상, 영문+숫자 |
139
+ | 역할 | select | Y | user | admin / user / viewer |
140
+ | 메모 | textarea | N | | 관리자 메모 |
141
+
142
+ **검증 규칙:**
143
+ - 이메일: 이메일 형식, 중복 불가
144
+ - 비밀번호: 최소 8자, 영문+숫자 포함
145
+ - 이름: 최대 100자
146
+ ```
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: sd-test
3
+ description: 테스트 대상에 대해 작업 유형별 TDD 테스트를 독립 수행. 사용자가 특정 모듈/기능의 테스트 작성이나 실행을 요청할 때 사용
4
+ argument-hint: "<테스트 대상 파일 경로> [추가 컨텍스트]"
5
+ ---
6
+
7
+ # sd-test: 독립 TDD 테스트
8
+
9
+ sd-plan의 테스트 전략 결정과 sd-plan-dev의 TDD 사이클 실행을 통합하여, plan 없이도 테스트를 독립 수행한다.
10
+
11
+ ## 1. 인자 파싱
12
+
13
+ `$ARGUMENTS`를 분석하여 테스트 대상을 결정한다.
14
+
15
+ ### 1-1. 파일 경로 + 선택적 추가 컨텍스트
16
+
17
+ `$ARGUMENTS`에서 파일 경로와 추가 컨텍스트를 분리한다:
18
+ - 첫 번째 토큰이 존재하는 파일 경로이면 테스트 대상으로 사용
19
+ - 나머지 텍스트가 있으면 추가 컨텍스트(특정 동작 검증 포인트)로 사용
20
+ - 파일이 존재하지 않으면 AskUserQuestion으로 올바른 경로를 요청한다
21
+ - 예: `src/utils.ts 특정함수 동작확인` → 대상: `src/utils.ts`, 컨텍스트: `특정함수 동작확인`
22
+ - 예: `.claude/skills/sd-spec/SKILL.md` → 대상: 해당 파일, 컨텍스트: 없음
23
+
24
+ ### 1-2. 인자 없음
25
+
26
+ `$ARGUMENTS`가 비어있으면:
27
+ - 현재 대화 맥락에서 테스트 대상을 파악한다
28
+ - 대화에도 대상이 없으면 AskUserQuestion으로 테스트 대상 파일 경로를 요청한다
29
+
30
+ ## 2. 코드베이스 분석
31
+
32
+ 테스트 대상 파일과 관련된 코드베이스를 분석한다. 다음을 병렬로 수행한다:
33
+ - 대상 파일을 Read한다
34
+ - 프로젝트 테스트 환경(vitest) 존재 여부를 확인한다 (`vitest.config.*`, `package.json`의 devDependencies 등)
35
+
36
+ 테스트 작성에 필요한 경우에만 대상 파일의 직접 의존성(import/require)을 추가로 확인한다.
37
+
38
+ ## 3. 작업 유형 분류
39
+
40
+ 대상 파일의 성격에 따라 테스트 전략을 결정한다.
41
+
42
+ | 작업 유형 | 테스트 전략 |
43
+ |----------|-----------|
44
+ | 코드 작업 (로직) | 프로젝트 테스트 환경(vitest) 확인 → 있으면 vitest 테스트 작성 및 실행 |
45
+ | 코드 작업 (로직, 테스트 환경 없음) | subagent 기반 `test.md` 작성 및 실행 |
46
+ | 코드 작업 (비로직, 텍스트/상수/설정 변경 등) | 테스트 생략 → 완료 안내 |
47
+ | 비코드 작업 (LLM용 문서, SKILL.md 등) | subagent 기반 `test.md` 작성 및 실행 |
48
+ | 비코드 작업 (일반 문서, README 등) | 테스트 생략 → 완료 안내 |
49
+
50
+ 테스트 생략인 경우 "테스트가 필요하지 않은 작업 유형입니다."를 출력하고 종료한다.
51
+
52
+ ## 4. 테스트 시나리오 작성 원칙
53
+
54
+ 테스트는 **상태(정적)가 아닌 동작**을 검증한다:
55
+ - 상태 (X): "파일에 특정 텍스트가 적혀있는지 확인" → 정적 검사에 불과
56
+ - 동작 (O): "실행했을 때 기대한 동작이 나타나는지 확인" → 실제 동작 검증
57
+
58
+ 예:
59
+ - LLM용 문서: "SKILL.md에 '테스트 재실행' 문구가 있는지"(X) → "LLM이 SKILL.md를 따라 실행했을 때 실제로 테스트를 재실행하는지"(O)
60
+ - 코드: "함수가 존재하는지"(X) → "함수에 특정 입력을 넣으면 기대 출력이 나오는지"(O)
61
+
62
+ ## 5. RED Phase: 테스트 시나리오 작성 및 실행
63
+
64
+ 4단계의 원칙에 따라 테스트 시나리오를 작성하고 실행한다.
65
+
66
+ ### vitest 테스트인 경우
67
+
68
+ 1. 대상 파일과 추가 컨텍스트를 분석하여 테스트 시나리오를 작성한다
69
+ 2. vitest 테스트 파일을 작성한다
70
+ - 프로젝트의 기존 테스트 파일 패턴을 탐색하여 (`*.test.ts`, `*.spec.ts`, `__tests__/` 등) 동일한 패턴으로 생성한다
71
+ - 기존 패턴이 없으면 `{대상파일명}.test.{확장자}`로 대상 파일과 동일 디렉토리에 생성한다
72
+ 3. Bash로 `vitest run {테스트 파일}` 실행하여 현재 상태를 확인한다
73
+
74
+ ### subagent 테스트인 경우 (LLM용 문서, 테스트 환경 없는 코드 등)
75
+
76
+ 1. 대상 파일과 추가 컨텍스트를 분석하여 테스트 시나리오를 작성한다
77
+ 2. `test.md` 파일을 작성한다
78
+ - 저장 위치: `.tasks/{yyMMddHHmmss}_{topic}/test.md` (Bash `date +%y%m%d%H%M%S`, topic은 대상 파일명 기반 kebab-case)
79
+ - 형식:
80
+ ```markdown
81
+ ## 테스트 1: {테스트 제목}
82
+ **입력:** {subagent에게 실행시킬 지시}
83
+ **기대 결과:** {검증 기준}
84
+ ```
85
+ 3. Agent tool로 subagent를 생성하여 테스트를 실행한다
86
+ - subagent에게 전달할 내용: 대상 파일 경로, test.md 경로, "test.md의 각 테스트를 실행하고 PASS/FAIL을 판정하라"는 지시
87
+
88
+ **이미 모든 테스트가 통과하면 (vitest/subagent 공통):**
89
+ - "모든 테스트가 이미 통과합니다. 수정이 필요하지 않습니다."를 출력하고 종료한다
90
+
91
+ ## 6. GREEN Phase: 대상 수정 및 재테스트
92
+
93
+ 테스트 실패 항목에 대해 대상 파일을 수정한다.
94
+ - 수정 후 테스트를 재실행한다
95
+ - vitest: Bash로 `vitest run {테스트 파일}` 재실행
96
+ - subagent: Agent tool로 subagent 재실행
97
+ - 여전히 실패하면 다시 수정 → 재테스트를 반복한다
98
+ - 최대 3회 반복한다. 3회 시도 후에도 실패하면 실패 원인을 분석하여 사용자에게 보고하고 중단한다
99
+
100
+ ## 7. Refactor Phase
101
+
102
+ GREEN Phase에서 대상 파일을 수정한 경우에만 수행한다.
103
+
104
+ `/simplify 다음 파일만 리뷰: {수정한 파일 목록}` 하여 품질을 개선한다.
105
+ - 완료 후 테스트를 재실행하여 통과를 확인한다
106
+ - 리팩터링으로 테스트가 깨지면 수정 후 재확인한다
107
+
108
+ ## 8. 완료 안내
109
+
110
+ TDD 사이클이 완료되면 다음을 출력한다:
111
+ - 테스트 결과 요약 (통과/수정됨)
112
+ - 수정된 파일 목록
113
+
114
+ ## 9. 커밋
115
+
116
+ 수정된 파일이 있으면 `/sd-commit`을 실행하여 자동 커밋한다.