@sduck/sduck-cli 0.1.2 → 0.1.3

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.
@@ -0,0 +1,187 @@
1
+ # [feature] {기능명}
2
+
3
+ > **작업 타입:** `feature` (Standard Feature)
4
+ > **작성자:**
5
+ > **작성일:** YYYY-MM-DD
6
+ > **연관 티켓:**
7
+
8
+ ---
9
+
10
+ ## 1. 배경 및 목적
11
+
12
+ ### 문제 / 요구사항
13
+
14
+ <!-- 이 기능이 왜 필요한지, 어떤 사용자 문제 혹은 비즈니스 요구를 해결하는지 기술 -->
15
+
16
+ ### 기대 효과
17
+
18
+ <!-- 이 기능이 완성되었을 때 사용자 또는 시스템 관점에서 달라지는 점 -->
19
+
20
+ ---
21
+
22
+ ## 2. 기능 명세
23
+
24
+ ### 사용자 스토리
25
+
26
+ ```
27
+ As a [사용자 유형],
28
+ I want to [원하는 행동],
29
+ So that [기대하는 결과].
30
+ ```
31
+
32
+ ### 수용 기준 (Acceptance Criteria)
33
+
34
+ > 모든 항목이 충족되어야 이 작업이 완료(Done)로 간주된다.
35
+
36
+ - [ ] AC1:
37
+ - [ ] AC2:
38
+ - [ ] AC3:
39
+
40
+ ### 기능 상세 설명
41
+
42
+ <!-- 핵심 비즈니스 로직, 상태 전이, 엣지 케이스 등을 상세하게 기술 -->
43
+
44
+ ---
45
+
46
+ ## 3. 기술 설계
47
+
48
+ ### 변경 대상 컴포넌트
49
+
50
+ | 레이어 | 파일 / 모듈 | 변경 내용 요약 |
51
+ | ------ | ----------- | -------------- |
52
+ | | | |
53
+ | | | |
54
+
55
+ ### API 명세 (해당 시)
56
+
57
+ ```
58
+ Method: POST / GET / PUT / PATCH / DELETE
59
+ Endpoint: /api/v1/...
60
+
61
+ Request:
62
+ {
63
+ "field": "type"
64
+ }
65
+
66
+ Response (200 OK):
67
+ {
68
+ "field": "type"
69
+ }
70
+
71
+ Error Responses:
72
+ - 400: 잘못된 요청
73
+ - 401: 인증 실패
74
+ - 404: 리소스 없음
75
+ ```
76
+
77
+ ### 데이터 모델 변경 (해당 시)
78
+
79
+ ```sql
80
+ -- 추가 / 변경되는 컬럼, 테이블, 인덱스 등
81
+ ```
82
+
83
+ ### 시퀀스 다이어그램 (해당 시)
84
+
85
+ ```
86
+ Client → [Service A] → [Service B] → DB
87
+
88
+ Response
89
+ ```
90
+
91
+ ---
92
+
93
+ ## 4. UI/UX 명세 (해당 시)
94
+
95
+ ### 화면 목록
96
+
97
+ | 화면명 | 라우트 | 설명 |
98
+ | ------ | ------ | ---- |
99
+ | | | |
100
+
101
+ ### 디자인 레퍼런스
102
+
103
+ <!-- Figma 링크, 스크린샷, 기타 시각 자료 -->
104
+
105
+ ### 인터랙션 정의
106
+
107
+ <!-- 버튼 클릭, 폼 유효성 검사, 로딩 상태, 에러 메시지 표시 방식 등 -->
108
+
109
+ ---
110
+
111
+ ## 5. 테스트 계획
112
+
113
+ ### 단위 테스트 (Unit Test)
114
+
115
+ | 대상 함수 / 모듈 | 테스트 케이스 | 예상 결과 |
116
+ | ---------------- | ------------- | --------- |
117
+ | | 정상 입력 | |
118
+ | | 경계값 | |
119
+ | | 비정상 입력 | |
120
+
121
+ ### 통합 / E2E 테스트
122
+
123
+ | 시나리오 | 단계 | 예상 결과 |
124
+ | -------- | ---- | --------- |
125
+ | | | |
126
+
127
+ ---
128
+
129
+ ## 6. 영향 범위 분석
130
+
131
+ ### 변경 파일 목록 (예상)
132
+
133
+ ```
134
+ target_paths:
135
+ - src/...
136
+ - tests/...
137
+ ```
138
+
139
+ ### 사이드 이펙트 검토
140
+
141
+ <!-- 이 기능 변경으로 인해 영향받을 수 있는 다른 기능이나 모듈 -->
142
+
143
+ - 영향 가능성 있는 모듈:
144
+ - 회귀 테스트 필요 영역:
145
+
146
+ ### 롤백 계획
147
+
148
+ <!-- 문제 발생 시 어떻게 되돌릴 것인지 -->
149
+
150
+ ---
151
+
152
+ ## 7. 보안 / 성능 고려사항
153
+
154
+ - **인증·인가:** (예: 이 API는 `ADMIN` 권한 필요)
155
+ - **입력값 검증:**
156
+ - **성능:** (예: N+1 쿼리 방지, 캐싱 적용 여부)
157
+ - **민감 데이터 처리:**
158
+
159
+ ---
160
+
161
+ ## 8. 비기능 요구사항
162
+
163
+ | 항목 | 요구사항 |
164
+ | ---------------- | -------- |
165
+ | 응답 시간 | |
166
+ | 동시 사용자 | |
167
+ | 데이터 보존 기간 | |
168
+
169
+ ---
170
+
171
+ ## 9. 의존성 및 선행 조건
172
+
173
+ - 이 작업 시작 전 완료되어야 하는 작업:
174
+ - 외부 서비스 / API 연동 필요 여부:
175
+ - 피처 플래그(Feature Flag) 사용 여부:
176
+
177
+ ---
178
+
179
+ ## 10. 미결 사항 (Open Questions)
180
+
181
+ - [ ]
182
+
183
+ ---
184
+
185
+ ## 11. 참고 자료
186
+
187
+ -
@@ -0,0 +1,174 @@
1
+ # [fix] {버그 요약 한 줄}
2
+
3
+ > **작업 타입:** `fix` (Quick Fix)
4
+ > **심각도:** `critical` / `high` / `medium` / `low`
5
+ > **작성자:**
6
+ > **작성일:** YYYY-MM-DD
7
+ > **연관 티켓:**
8
+
9
+ ---
10
+
11
+ ## 1. 버그 개요
12
+
13
+ ### 문제 요약
14
+
15
+ <!-- 한두 문장으로 버그의 핵심을 요약 -->
16
+
17
+ ### 발견 경위
18
+
19
+ - [ ] 사용자 제보
20
+ - [ ] 모니터링 알림
21
+ - [ ] 코드 리뷰 중 발견
22
+ - [ ] QA 테스트
23
+ - [ ] 기타:
24
+
25
+ ### 발생 빈도
26
+
27
+ - [ ] 항상 재현됨 (100%)
28
+ - [ ] 간헐적 재현 (약 %)
29
+ - [ ] 특정 조건에서만 재현
30
+
31
+ ---
32
+
33
+ ## 2. 재현 방법 (Steps to Reproduce)
34
+
35
+ **환경 정보**
36
+ | 항목 | 내용 |
37
+ |------|------|
38
+ | 환경 (local / dev / staging / production) | |
39
+ | OS / 브라우저 / 앱 버전 | |
40
+ | 계정 유형 / 권한 | |
41
+ | 관련 데이터 ID / 조건 | |
42
+
43
+ **재현 단계**
44
+
45
+ 1.
46
+ 2.
47
+ 3.
48
+
49
+ **실제 결과 (Actual)**
50
+
51
+ <!-- 무슨 일이 일어났는지 -->
52
+
53
+ **기대 결과 (Expected)**
54
+
55
+ <!-- 원래 어떻게 동작해야 하는지 -->
56
+
57
+ ---
58
+
59
+ ## 3. 원인 분석 (Root Cause)
60
+
61
+ ### 원인 파악 현황
62
+
63
+ - [ ] 원인 특정 완료
64
+ - [ ] 원인 조사 중
65
+ - [ ] 원인 불명
66
+
67
+ ### 원인 요약
68
+
69
+ <!-- 코드 레벨에서 왜 이 버그가 발생하는지 기술 -->
70
+
71
+ ### 원인 코드 위치
72
+
73
+ ```
74
+ 파일: src/...
75
+ 함수 / 라인:
76
+ ```
77
+
78
+ ### 발생 조건
79
+
80
+ <!-- 특정 값, 상태, 순서 등 버그를 트리거하는 조건 -->
81
+
82
+ ---
83
+
84
+ ## 4. 수정 방안
85
+
86
+ ### 방안 검토
87
+
88
+ | 방안 | 설명 | 장점 | 단점 |
89
+ | ------ | ---- | ---- | ---- |
90
+ | 방안 A | | | |
91
+ | 방안 B | | | |
92
+
93
+ ### 선택한 방안 및 이유
94
+
95
+ > **선택:** 방안 \_
96
+ >
97
+ > **이유:**
98
+
99
+ ### 변경 파일 목록 (예상)
100
+
101
+ ```
102
+ target_paths:
103
+ - src/...
104
+ - tests/...
105
+ ```
106
+
107
+ ---
108
+
109
+ ## 5. 테스트 계획
110
+
111
+ ### 버그 재현 테스트 (수정 전 실패 확인)
112
+
113
+ - [ ] 기존 버그 재현 테스트 케이스 작성 완료
114
+
115
+ ### 수정 검증 테스트 (수정 후 통과 확인)
116
+
117
+ | 테스트 케이스 | 조건 | 예상 결과 |
118
+ | ------------- | -------------- | -------------- |
119
+ | | 버그 유발 조건 | 정상 동작 |
120
+ | | 정상 입력 | 기존 동작 유지 |
121
+ | | 경계값 | |
122
+
123
+ ### 회귀 테스트
124
+
125
+ <!-- 이 수정으로 인해 영향받을 수 있는 관련 기능의 테스트 목록 -->
126
+
127
+ - [ ]
128
+ - [ ]
129
+
130
+ ---
131
+
132
+ ## 6. 영향 범위
133
+
134
+ ### 사이드 이펙트 검토
135
+
136
+ <!-- 이 수정이 다른 기능에 미칠 수 있는 영향 -->
137
+
138
+ ### 데이터 정합성
139
+
140
+ - [ ] DB 데이터 정정 작업 필요 없음
141
+ - [ ] DB 데이터 정정 작업 필요: _(내용 작성)_
142
+
143
+ ---
144
+
145
+ ## 7. 롤백 계획
146
+
147
+ <!-- 수정 후에도 문제가 지속되거나 새로운 문제 발생 시 대응 방안 -->
148
+
149
+ - 롤백 방법:
150
+ - 롤백 판단 기준 (임계값 또는 조건):
151
+
152
+ ---
153
+
154
+ ## 8. 임시 조치 (Workaround, 해당 시)
155
+
156
+ <!-- 수정 배포 전까지 사용자 또는 운영팀이 취할 수 있는 임시 방편 -->
157
+
158
+ ---
159
+
160
+ ## 9. 재발 방지 대책
161
+
162
+ <!-- 동일한 유형의 버그가 다시 발생하지 않도록 개선할 점 -->
163
+
164
+ - [ ] 테스트 케이스 추가
165
+ - [ ] 코드 리뷰 체크리스트 항목 추가
166
+ - [ ] 모니터링 알림 추가
167
+ - [ ] 기타:
168
+
169
+ ---
170
+
171
+ ## 10. 참고 자료
172
+
173
+ - 에러 로그:
174
+ - 관련 이슈 / PR:
@@ -0,0 +1,174 @@
1
+ # [refactor] {리팩토링 대상 및 목적}
2
+
3
+ > **작업 타입:** `refactor` (Refactor)
4
+ > **작성자:**
5
+ > **작성일:** YYYY-MM-DD
6
+ > **연관 티켓:**
7
+
8
+ ---
9
+
10
+ ## ⚠️ 리팩토링 불변 조건
11
+
12
+ > **이 작업은 외부 동작(기능, API 응답, UI)을 변경하지 않는다.**
13
+ > 코드 구조만 개선하며, 비즈니스 로직의 변경은 별도의 `feature` 또는 `fix` 작업으로 분리한다.
14
+
15
+ ---
16
+
17
+ ## 1. 배경 및 목적
18
+
19
+ ### 리팩토링이 필요한 이유
20
+
21
+ <!-- 현재 코드의 어떤 문제(기술 부채, 가독성, 유지보수성, 성능 등)가 있는지 구체적으로 기술 -->
22
+
23
+ ### 기대 효과
24
+
25
+ - [ ] 가독성 / 이해하기 쉬운 코드
26
+ - [ ] 유지보수성 향상
27
+ - [ ] 중복 코드 제거
28
+ - [ ] 테스트 용이성 향상
29
+ - [ ] 성능 개선 (측정 지표 명시 필요)
30
+ - [ ] 기타:
31
+
32
+ ---
33
+
34
+ ## 2. 현재 상태 (As-Is)
35
+
36
+ ### 문제 코드 / 구조
37
+
38
+ ```
39
+ 파일: src/...
40
+ ```
41
+
42
+ <!-- 문제가 되는 코드 패턴, 구조, 의존 관계 등을 스케치 또는 설명 -->
43
+
44
+ ### 측정 지표 (개선 전)
45
+
46
+ | 지표 | 현재 값 | 목표 값 |
47
+ | ----------------------------------- | ------- | ------- |
48
+ | 순환 복잡도 (Cyclomatic Complexity) | | |
49
+ | 중복 코드 라인 수 | | |
50
+ | 함수/클래스 크기 | | |
51
+ | 응답 시간 (해당 시) | | |
52
+ | 테스트 커버리지 | | |
53
+
54
+ ---
55
+
56
+ ## 3. 목표 상태 (To-Be)
57
+
58
+ ### 개선된 구조
59
+
60
+ ```
61
+ 파일: src/...
62
+ ```
63
+
64
+ <!-- 리팩토링 후 디렉토리 구조, 클래스 구조, 함수 분리 방향 등을 기술 -->
65
+
66
+ ### 적용할 패턴 / 원칙
67
+
68
+ - [ ] SOLID 원칙 적용:
69
+ - [ ] 디자인 패턴 적용:
70
+ - [ ] 기타 컨벤션:
71
+
72
+ ---
73
+
74
+ ## 4. 리팩토링 범위
75
+
76
+ ### 변경 대상 파일
77
+
78
+ ```
79
+ target_paths:
80
+ - src/...
81
+ - tests/...
82
+ ```
83
+
84
+ ### 변경하지 않는 범위 (명시적 경계)
85
+
86
+ ```
87
+ blocked_paths:
88
+ - src/api/routes/ # 외부 API 계약 불변
89
+ - migrations/ # DB 스키마 불변
90
+ ```
91
+
92
+ ### 인터페이스 불변 확인
93
+
94
+ <!-- 다음 항목들이 변경 전후 동일하게 유지되어야 함을 확인 -->
95
+
96
+ - [ ] Public API 엔드포인트 및 응답 스펙
97
+ - [ ] 공개 함수 / 메서드 시그니처
98
+ - [ ] DB 스키마 및 마이그레이션
99
+ - [ ] 이벤트 / 메시지 포맷
100
+
101
+ ---
102
+
103
+ ## 5. 테스트 전략
104
+
105
+ > 리팩토링의 안전성은 테스트가 보장한다. 기존 테스트가 통과하는 것이 완료 기준이다.
106
+
107
+ ### 기존 테스트 현황
108
+
109
+ - 현재 테스트 커버리지:
110
+ - 테스트 통과 여부 (작업 시작 전 확인):
111
+ - [ ] 모든 기존 테스트 통과 확인됨
112
+
113
+ ### 리팩토링 중 테스트 전략
114
+
115
+ - [ ] 기존 테스트를 변경하지 않고 통과시키며 리팩토링 진행
116
+ - [ ] 구조 변경에 따라 테스트도 함께 재구성 (이유 명시):
117
+
118
+ ### 보완 테스트
119
+
120
+ <!-- 기존 테스트 커버리지가 낮아 리팩토링 전 보강이 필요한 경우 -->
121
+
122
+ - [ ] 추가 테스트 케이스 작성 대상:
123
+
124
+ ---
125
+
126
+ ## 6. 단계별 분리 계획
127
+
128
+ > 리팩토링은 한 번에 모든 것을 바꾸지 않고 작은 단위로 나눠서 진행한다.
129
+
130
+ | 단계 | 작업 내용 | 검증 방법 |
131
+ | ---- | --------- | ---------------- |
132
+ | 1 | | 테스트 전부 통과 |
133
+ | 2 | | 테스트 전부 통과 |
134
+ | 3 | | 테스트 전부 통과 |
135
+
136
+ ---
137
+
138
+ ## 7. 영향 범위 분석
139
+
140
+ ### 의존 모듈 목록
141
+
142
+ <!-- 리팩토링 대상을 import / 사용하는 다른 모듈 -->
143
+
144
+ | 모듈 | 영향 내용 | 대응 방안 |
145
+ | ---- | --------- | --------- |
146
+ | | | |
147
+
148
+ ### 회귀 테스트 필요 영역
149
+
150
+ - [ ]
151
+
152
+ ---
153
+
154
+ ## 8. 롤백 계획
155
+
156
+ - 롤백 방법: Git 스펙 단위 커밋 되돌리기
157
+ - 롤백 기준: 테스트 실패 / 예상치 못한 동작 변경 발생 시
158
+
159
+ ---
160
+
161
+ ## 9. 완료 정의 (Definition of Done)
162
+
163
+ - [ ] 기존 테스트 전체 통과
164
+ - [ ] 신규 추가 테스트(있다면) 통과
165
+ - [ ] 테스트 커버리지 감소 없음
166
+ - [ ] 외부 동작 변경 없음 확인
167
+ - [ ] 코드 리뷰 승인
168
+ - [ ] 측정 지표 목표치 달성
169
+
170
+ ---
171
+
172
+ ## 10. 참고 자료
173
+
174
+ -
package/README.md CHANGED
@@ -43,6 +43,24 @@ sduck init --agents claude-code,cursor,codex
43
43
 
44
44
  ## 📖 주요 명령어
45
45
 
46
+ ### 빠른 시작 예시
47
+
48
+ ```bash
49
+ # 1) 초기화
50
+ sduck init --agents claude-code,codex
51
+
52
+ # 2) 일반 흐름
53
+ sduck start feature login-system
54
+ sduck spec approve login-system
55
+ sduck plan approve login-system
56
+
57
+ # 3) 빠른 흐름
58
+ sduck fast-track fix copy-bug
59
+
60
+ # 4) 구현 완료 후
61
+ sduck done login-system
62
+ ```
63
+
46
64
  ### 1. 작업 시작 (Start)
47
65
 
48
66
  작업 타입에 맞는 폴더와 템플릿 파일을 생성합니다.
@@ -53,6 +71,8 @@ sduck start feature login-system
53
71
  sduck start fix auth-bug
54
72
  ```
55
73
 
74
+ 생성 직후 상태는 `PENDING_SPEC_APPROVAL`입니다.
75
+
56
76
  ### 2. 스펙 승인 (Approve Spec)
57
77
 
58
78
  작성된 `spec.md`를 검토한 후 승인합니다. 상태가 `SPEC_APPROVED`로 변경됩니다.
@@ -66,6 +86,11 @@ sduck spec approve [slug]
66
86
 
67
87
  반복적이거나 범위가 명확한 작업은 minimal spec과 minimal plan을 한 번에 생성할 수 있습니다. `spec.md`는 생략되지 않으며, 비대화형 환경에서는 자동 승인 없이 생성만 수행합니다.
68
88
 
89
+ - `spec.md`는 항상 생성됩니다
90
+ - interactive 환경에서는 확인 1회 후 spec/plan 승인을 묶어 진행할 수 있습니다
91
+ - 비대화형 환경에서는 생성만 수행하고, 이후 `sduck spec approve <slug>` → `sduck plan approve <slug>`로 이어집니다
92
+ - 범위가 크거나 요구사항이 불명확한 작업은 일반 `start` 흐름을 권장합니다
93
+
69
94
  ```bash
70
95
  sduck fast-track <type> <slug>
71
96
  ```
@@ -83,10 +108,35 @@ sduck plan approve [slug]
83
108
 
84
109
  구현이 끝난 작업의 step 완료 여부, spec 체크리스트, task eval 자산을 확인한 뒤 `DONE` 상태로 마감합니다.
85
110
 
111
+ - `steps.total`과 `steps.completed`가 모두 맞아야 합니다
112
+ - `spec.md`의 체크리스트가 모두 완료돼야 합니다
113
+ - target을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다
114
+
86
115
  ```bash
87
116
  sduck done [slug]
88
117
  ```
89
118
 
119
+ ## ✅ 상태 전이
120
+
121
+ ```text
122
+ PENDING_SPEC_APPROVAL -> SPEC_APPROVED -> IN_PROGRESS -> DONE
123
+ ```
124
+
125
+ - `start`: `PENDING_SPEC_APPROVAL`
126
+ - `spec approve`: `SPEC_APPROVED`
127
+ - `plan approve`: `IN_PROGRESS`
128
+ - `done`: `DONE`
129
+ - `fast-track`: minimal spec/plan을 생성하고, 환경에 따라 `PENDING_SPEC_APPROVAL` 또는 `IN_PROGRESS`까지 진행
130
+
131
+ ## 🧭 일반 흐름 vs fast-track
132
+
133
+ | 구분 | 일반 흐름 | fast-track |
134
+ | ------------- | ------------------------------ | ----------------------------------------- |
135
+ | 문서 생성 | 타입 템플릿 기반 spec, 빈 plan | minimal spec + minimal plan |
136
+ | 승인 방식 | spec 승인, plan 승인 각각 진행 | interactive에서는 확인 1회로 묶을 수 있음 |
137
+ | 비대화형 동작 | 각 명령 수동 실행 | 생성만 수행, 승인 자동 진행 없음 |
138
+ | 추천 상황 | 범위가 크거나 애매한 작업 | 반복적이고 범위가 명확한 작업 |
139
+
90
140
  ## 🎨 자산 커스터마이징 (Asset Customization)
91
141
 
92
142
  sduck은 팀의 컨벤션을 자산(`.sduck/sduck-assets/`)으로 관리합니다. 이 폴더를 Git에 포함하여 팀원 모두가 동일한 기준을 공유하세요.
@@ -118,12 +168,26 @@ your-project/
118
168
  │ └── sduck-workspace/ # 📝 작업 이력 (Git 추적 권장)
119
169
  │ └── 20260319-1000-feature-login/
120
170
  │ ├── meta.yml # 작업 상태 관리 (status, timestamps)
121
- │ ├── spec.md # 요구사항 명세서
122
- │ └── plan.md # 상세 구현 계획서
171
+ │ ├── spec.md # 요구사항 명세서 또는 minimal spec
172
+ │ └── plan.md # 상세 구현 계획서 또는 minimal plan
123
173
  ├── CLAUDE.md # Claude Code용 규칙
124
174
  └── AGENT.md # Codex/OpenCode용 규칙
125
175
  ```
126
176
 
177
+ `meta.yml`에는 최소 아래 상태 정보가 들어갑니다.
178
+
179
+ ```yaml
180
+ status: PENDING_SPEC_APPROVAL | SPEC_APPROVED | IN_PROGRESS | DONE
181
+ spec:
182
+ approved: <boolean>
183
+ plan:
184
+ approved: <boolean>
185
+ steps:
186
+ total: <number | null>
187
+ completed: [<step numbers>]
188
+ completed_at: <timestamp | null>
189
+ ```
190
+
127
191
  ## 🤖 지원 에이전트 (Rule Generation)
128
192
 
129
193
  `sduck init` 시 각 에이전트의 특성에 맞는 규칙 파일을 생성합니다.
package/dist/cli.js CHANGED
@@ -1567,7 +1567,7 @@ async function runStartCommand(type, slug, projectRoot) {
1567
1567
  // package.json
1568
1568
  var package_default = {
1569
1569
  name: "@sduck/sduck-cli",
1570
- version: "0.1.2",
1570
+ version: "0.1.3",
1571
1571
  description: "Spec-Driven Development CLI bootstrap",
1572
1572
  type: "module",
1573
1573
  bin: {
@@ -1575,7 +1575,7 @@ var package_default = {
1575
1575
  },
1576
1576
  files: [
1577
1577
  "dist",
1578
- "sduck-assets"
1578
+ ".sduck/sduck-assets"
1579
1579
  ],
1580
1580
  engines: {
1581
1581
  node: ">=20"