@sduck/sduck-cli 0.1.8 → 0.2.0
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.
- package/.sduck/sduck-assets/agent-rules/core.md +18 -9
- package/README.md +136 -34
- package/dist/cli.js +986 -198
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
| PENDING_SPEC_APPROVAL | 허용 | 허용 | 차단 |
|
|
14
14
|
| SPEC_APPROVED | 차단 | 허용 | 차단 |
|
|
15
15
|
| IN_PROGRESS | 차단 | 차단 | 허용 |
|
|
16
|
+
| REVIEW_READY | 차단 | 차단 | 차단 |
|
|
16
17
|
| DONE | 차단 | 차단 | 차단 |
|
|
18
|
+
| ABANDONED | 차단 | 차단 | 차단 |
|
|
17
19
|
|
|
18
20
|
## 디렉토리 구조
|
|
19
21
|
|
|
@@ -34,19 +36,24 @@
|
|
|
34
36
|
│ │ └── refactor.md
|
|
35
37
|
│ └── agent-rules/
|
|
36
38
|
│
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
├── .sduck/sduck-workspace/
|
|
40
|
+
│ └── {timestamp}-{type}-{slug}/
|
|
41
|
+
│ ├── meta.yml
|
|
42
|
+
│ ├── spec.md
|
|
43
|
+
│ ├── plan.md
|
|
44
|
+
│ └── review.md # review ready 시 생성
|
|
45
|
+
│
|
|
46
|
+
├── .sduck/sduck-archive/ # 아카이브 (월별)
|
|
47
|
+
├── .sduck/sduck-state.yml # 현재 작업 상태 (current_work_id)
|
|
48
|
+
└── .sduck-worktrees/ # Git worktree (자동 생성)
|
|
42
49
|
```
|
|
43
50
|
|
|
44
51
|
## 세션 시작 시 필수 확인
|
|
45
52
|
|
|
46
53
|
작업을 시작하기 전에 반드시 아래를 확인한다.
|
|
47
54
|
|
|
48
|
-
1. `.sduck/sduck-
|
|
49
|
-
2. 진행 중인 작업(`IN_PROGRESS`, `PENDING_*`)이 있는지 확인
|
|
55
|
+
1. `.sduck/sduck-state.yml`에서 `current_work_id`를 확인한다
|
|
56
|
+
2. `.sduck/sduck-workspace/` 디렉토리에서 진행 중인 작업(`IN_PROGRESS`, `REVIEW_READY`, `PENDING_*`)이 있는지 확인
|
|
50
57
|
3. 있다면 해당 작업의 `meta.yml`을 읽고 현재 상태를 파악한 뒤 이어서 진행
|
|
51
58
|
|
|
52
59
|
## 사용자 메모 규칙
|
|
@@ -61,10 +68,11 @@
|
|
|
61
68
|
|
|
62
69
|
## 워크플로우 규칙
|
|
63
70
|
|
|
64
|
-
- Use the shipped CLI commands for workflow operations: `sduck init`, `sduck start <type> <slug>`, `sduck fast-track <type> <slug>`, `sduck spec approve [target]`,
|
|
71
|
+
- Use the shipped CLI commands for workflow operations: `sduck init`, `sduck start <type> <slug>`, `sduck fast-track <type> <slug>`, `sduck spec approve [target]`, `sduck plan approve [target]`, `sduck review ready [target]`, `sduck done [target]`, `sduck use <target>`, `sduck implement`, `sduck abandon <target>`, `sduck clean [target]`, `sduck archive`.
|
|
65
72
|
- Do not write implementation code before spec approval.
|
|
66
73
|
- Do not start implementation before plan approval.
|
|
67
|
-
- Follow the workflow order: `spec -> approval -> plan -> approval -> implementation`.
|
|
74
|
+
- Follow the workflow order: `spec -> approval -> plan -> approval -> implementation -> review ready -> done`.
|
|
75
|
+
- `done`은 `REVIEW_READY` 상태에서만 가능하다. `IN_PROGRESS`에서 바로 `done`할 수 없다.
|
|
68
76
|
- Respect `meta.yml` state transitions and update step completion immediately.
|
|
69
77
|
- Write `plan.md` in detailed implementation units: include target files, the functions/sections or rough line ranges to inspect, the exact change intent for each file, and the tests or commands to verify the step.
|
|
70
78
|
|
|
@@ -84,6 +92,7 @@
|
|
|
84
92
|
- `PENDING_SPEC_APPROVAL` 상태에서는 spec.md 작성/수정만 가능하고 코드 작성은 금지한다
|
|
85
93
|
- `PENDING_PLAN_APPROVAL` 상태에서는 plan.md 작성/수정만 가능하고 코드 작성은 금지한다
|
|
86
94
|
- `IN_PROGRESS` 상태에서만 구현과 step 완료 기록을 진행한다
|
|
95
|
+
- 구현 완료 후 `sduck review ready`로 `REVIEW_READY` 상태로 전환해야 `done` 처리가 가능하다
|
|
87
96
|
- `sduck reopen [target]`으로 다시 열린 task는 `IN_PROGRESS` 기준으로 이어서 작업한다
|
|
88
97
|
- reopen은 작은 후속 수정에 사용하고, 요구사항 변경이나 범위 확장은 새 task로 분리한다
|
|
89
98
|
- Do not mark a task `DONE` until all completion criteria are satisfied.
|
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ sduck은 개발자와 AI 사이의 '설계-승인-구현' 프로세스를 도구
|
|
|
15
15
|
|
|
16
16
|
- **물리적 승인 단계:** 사용자가 스펙과 플랜을 승인하기 전까지 AI가 코드를 수정하지 못하게 차단합니다.
|
|
17
17
|
- **구조화된 작업 관리:** 모든 작업은 `spec.md`, `plan.md`, `meta.yml`을 통해 기록되고 관리됩니다.
|
|
18
|
+
- **병렬 작업 지원:** 여러 작업을 동시에 진행하고, Git worktree를 통해 작업별 독립 환경을 제공합니다.
|
|
18
19
|
- **우리 팀만의 워크플로우 자산:** 팀의 컨벤션에 맞는 템플릿과 평가 기준을 프로젝트 자산으로 관리합니다.
|
|
19
20
|
|
|
20
21
|
## 🔄 워크플로우 (The SDD Process)
|
|
@@ -22,15 +23,18 @@ sduck은 개발자와 AI 사이의 '설계-승인-구현' 프로세스를 도구
|
|
|
22
23
|
sduck은 아래의 엄격한 절차를 지향하며, 각 단계는 CLI를 통해 전이됩니다.
|
|
23
24
|
|
|
24
25
|
1. **Init:** 프로젝트 환경 설정 및 에이전트 규칙(`CLAUDE.md` 등) 생성
|
|
25
|
-
2. **Start:** 새로운 작업(feature, fix 등) 생성 및
|
|
26
|
+
2. **Start:** 새로운 작업(feature, fix 등) 생성, Git worktree 자동 생성 및 현재 작업 설정
|
|
26
27
|
3. **Fast Track (optional):** minimal spec + minimal plan을 빠르게 생성하고, 대화형 환경에서는 확인 1회로 승인까지 이어질 수 있음
|
|
27
28
|
4. **Spec:** AI가 요구사항을 분석하여 `spec.md` 작성 및 자체 품질 평가
|
|
28
29
|
5. **Approve Spec:** 사용자가 설계를 검토하고 `sduck spec approve` 실행
|
|
29
30
|
6. **Plan:** AI가 상세 구현 계획을 `plan.md`에 단계별로 작성
|
|
30
31
|
7. **Approve Plan:** 사용자가 계획을 검토하고 `sduck plan approve` 실행
|
|
31
32
|
8. **Implementation:** 승인된 계획의 Step에 따라 AI가 실제 코드 구현
|
|
32
|
-
9. **
|
|
33
|
-
10. **
|
|
33
|
+
9. **Review Ready:** 구현 완료 후 `sduck review ready`로 리뷰 준비 상태 전환
|
|
34
|
+
10. **Done:** spec 체크리스트와 task eval 기준을 확인한 뒤 `sduck done` 실행
|
|
35
|
+
11. **Clean (optional):** 완료/중단된 작업의 worktree와 브랜치 정리
|
|
36
|
+
12. **Archive (optional):** 완료된 작업을 월별 아카이브로 이동
|
|
37
|
+
13. **Reopen (optional):** 완료된 작업을 다시 열어 후속 수정 사이클을 진행
|
|
34
38
|
|
|
35
39
|
## 🛠 설치 및 초기화
|
|
36
40
|
|
|
@@ -90,7 +94,7 @@ $env:PATH -split ';' | Select-String 'npm'
|
|
|
90
94
|
# 1) 초기화
|
|
91
95
|
sduck init --agents claude-code,codex
|
|
92
96
|
|
|
93
|
-
# 2) 일반 흐름
|
|
97
|
+
# 2) 일반 흐름 (Git worktree 자동 생성)
|
|
94
98
|
sduck start feature login-system
|
|
95
99
|
sduck spec approve login-system
|
|
96
100
|
sduck plan approve login-system
|
|
@@ -98,35 +102,69 @@ sduck plan approve login-system
|
|
|
98
102
|
# 3) 빠른 흐름
|
|
99
103
|
sduck fast-track fix copy-bug
|
|
100
104
|
|
|
101
|
-
# 4)
|
|
105
|
+
# 4) 다른 작업으로 전환
|
|
106
|
+
sduck use login-system
|
|
107
|
+
|
|
108
|
+
# 5) 현재 작업 컨텍스트 확인
|
|
109
|
+
sduck implement
|
|
110
|
+
|
|
111
|
+
# 6) 리뷰 준비 → 완료
|
|
112
|
+
sduck review ready login-system
|
|
102
113
|
sduck done login-system
|
|
103
114
|
|
|
104
|
-
#
|
|
115
|
+
# 7) 정리
|
|
116
|
+
sduck clean # DONE/ABANDONED 작업 일괄 정리
|
|
117
|
+
sduck archive --keep 3 # 최신 3개 제외하고 아카이브
|
|
118
|
+
|
|
119
|
+
# 8) 작업 중단 / 다시 열기
|
|
120
|
+
sduck abandon login-system
|
|
105
121
|
sduck reopen login-system
|
|
106
122
|
```
|
|
107
123
|
|
|
108
124
|
### 1. 작업 시작 (Start)
|
|
109
125
|
|
|
110
|
-
작업 타입에 맞는 폴더와 템플릿 파일을 생성합니다.
|
|
126
|
+
작업 타입에 맞는 폴더와 템플릿 파일을 생성하고, Git worktree를 `.sduck-worktrees/<work-id>/`에 생성합니다.
|
|
111
127
|
|
|
112
128
|
```bash
|
|
113
129
|
# sduck start <type> <slug>
|
|
114
130
|
sduck start feature login-system
|
|
115
131
|
sduck start fix auth-bug
|
|
132
|
+
|
|
133
|
+
# Git worktree 없이 생성
|
|
134
|
+
sduck start feature login-system --no-git
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
- 생성 직후 상태는 `PENDING_SPEC_APPROVAL`입니다
|
|
138
|
+
- 여러 작업을 동시에 생성할 수 있습니다 (병렬 작업 지원)
|
|
139
|
+
- `--no-git` 플래그 사용 시 worktree 생성을 건너뛰고 `branch`, `base_branch`, `worktree_path`는 `null`로 기록됩니다
|
|
140
|
+
- work id가 충돌할 경우 자동으로 suffix(`-2`, `-3`)가 부여됩니다
|
|
141
|
+
|
|
142
|
+
### 2. 작업 전환 (Use)
|
|
143
|
+
|
|
144
|
+
여러 작업을 병렬로 진행할 때 현재 활성 작업을 전환합니다.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
sduck use <id|slug>
|
|
116
148
|
```
|
|
117
149
|
|
|
118
|
-
|
|
150
|
+
### 3. 구현 컨텍스트 확인 (Implement)
|
|
119
151
|
|
|
120
|
-
|
|
152
|
+
현재 작업의 구현에 필요한 컨텍스트(id, branch, worktree 경로, spec/plan 경로)를 출력합니다.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
sduck implement
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 4. 스펙 승인 (Approve Spec)
|
|
121
159
|
|
|
122
160
|
작성된 `spec.md`를 검토한 후 승인합니다. 상태가 `SPEC_APPROVED`로 변경됩니다.
|
|
123
|
-
target을
|
|
161
|
+
target을 생략하면 현재 작업(current work)이 대상이 됩니다.
|
|
124
162
|
|
|
125
163
|
```bash
|
|
126
164
|
sduck spec approve [slug]
|
|
127
165
|
```
|
|
128
166
|
|
|
129
|
-
###
|
|
167
|
+
### 5. 빠른 시작 (Fast Track)
|
|
130
168
|
|
|
131
169
|
반복적이거나 범위가 명확한 작업은 minimal spec과 minimal plan을 한 번에 생성할 수 있습니다. `spec.md`는 생략되지 않으며, 비대화형 환경에서는 자동 승인 없이 생성만 수행합니다.
|
|
132
170
|
|
|
@@ -137,37 +175,84 @@ sduck spec approve [slug]
|
|
|
137
175
|
|
|
138
176
|
```bash
|
|
139
177
|
sduck fast-track <type> <slug>
|
|
178
|
+
sduck fast-track <type> <slug> --no-git
|
|
140
179
|
```
|
|
141
180
|
|
|
142
|
-
###
|
|
181
|
+
### 6. 플랜 승인 (Approve Plan)
|
|
143
182
|
|
|
144
183
|
`plan.md`에 작성된 단계(Steps)를 검토하고 승인합니다. 상태가 `IN_PROGRESS`로 변경되며 구현 권한이 부여됩니다.
|
|
145
|
-
target을
|
|
184
|
+
target을 생략하면 현재 작업이 대상이 됩니다.
|
|
146
185
|
|
|
147
186
|
```bash
|
|
148
187
|
sduck plan approve [slug]
|
|
149
188
|
```
|
|
150
189
|
|
|
151
|
-
###
|
|
190
|
+
### 7. 리뷰 준비 (Review Ready)
|
|
191
|
+
|
|
192
|
+
구현이 완료된 작업을 리뷰 준비 상태로 전환합니다. `review.md` 템플릿이 자동 생성됩니다.
|
|
193
|
+
target을 생략하면 현재 작업이 대상이 됩니다.
|
|
194
|
+
|
|
195
|
+
- `IN_PROGRESS` 상태에서만 전환 가능합니다
|
|
196
|
+
- 이미 `review.md`가 존재하면 덮어쓰지 않습니다
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
sduck review ready [slug]
|
|
200
|
+
```
|
|
152
201
|
|
|
153
|
-
|
|
202
|
+
### 8. 작업 완료 (Done)
|
|
154
203
|
|
|
204
|
+
리뷰 준비가 완료된 작업의 step 완료 여부, spec 체크리스트, task eval 자산을 확인한 뒤 `DONE` 상태로 마감합니다.
|
|
205
|
+
target을 생략하면 현재 작업이 대상이 됩니다.
|
|
206
|
+
|
|
207
|
+
- `REVIEW_READY` 상태에서만 완료 처리 가능합니다
|
|
155
208
|
- `steps.total`과 `steps.completed`가 모두 맞아야 합니다
|
|
156
209
|
- `spec.md`의 체크리스트가 모두 완료돼야 합니다
|
|
157
|
-
-
|
|
210
|
+
- `review.md`가 없거나 비어있으면 경고를 출력하지만 완료는 허용됩니다
|
|
158
211
|
|
|
159
212
|
```bash
|
|
160
213
|
sduck done [slug]
|
|
161
214
|
```
|
|
162
215
|
|
|
163
|
-
###
|
|
216
|
+
### 9. 작업 중단 (Abandon)
|
|
217
|
+
|
|
218
|
+
진행 중인 작업을 중단 상태로 전환합니다.
|
|
219
|
+
|
|
220
|
+
- `PENDING_SPEC_APPROVAL`, `PENDING_PLAN_APPROVAL`, `IN_PROGRESS`, `REVIEW_READY` 상태에서 중단 가능합니다
|
|
221
|
+
- `DONE`, `ABANDONED` 상태는 중단할 수 없습니다
|
|
222
|
+
- 현재 작업이면 `current_work_id`가 해제됩니다
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
sduck abandon <id|slug>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 10. 정리 (Clean)
|
|
229
|
+
|
|
230
|
+
완료(`DONE`) 또는 중단(`ABANDONED`) 상태의 작업에서 Git worktree를 제거하고 브랜치를 정리합니다.
|
|
231
|
+
|
|
232
|
+
- target을 지정하면 해당 작업만, 생략하면 workspace 내 모든 DONE/ABANDONED 작업을 정리합니다
|
|
233
|
+
- merge된 브랜치는 자동 삭제, merge되지 않은 브랜치는 `--force` 없이 삭제하지 않습니다
|
|
234
|
+
- `--no-git`으로 생성된 작업은 git 자원 정리를 건너뜁니다
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
sduck clean [target]
|
|
238
|
+
sduck clean --force # unmerged 브랜치도 강제 삭제
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 11. 아카이브 (Archive)
|
|
242
|
+
|
|
243
|
+
완료된 작업을 월별(`sduck-archive/YYYY-MM/`) 디렉토리로 이동합니다.
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
sduck archive
|
|
247
|
+
sduck archive --keep 3 # 최신 3개는 workspace에 유지
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 12. 작업 다시 열기 (Reopen)
|
|
164
251
|
|
|
165
252
|
완료된 작업에 작은 후속 수정이 필요하면 `DONE` 상태 task를 다시 열 수 있습니다.
|
|
166
253
|
|
|
167
254
|
- `reopen`은 완료된 task를 새 작업 사이클로 되돌립니다
|
|
168
|
-
- target을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다
|
|
169
255
|
- 큰 요구사항 변경이나 범위 확장은 기존 task를 reopen하기보다 새 task를 만드는 편이 더 적합합니다
|
|
170
|
-
- 방금 끝낸 작업의 누락 수정, 작은 보완, 후속 검증 보강 같은 경우에 적합합니다
|
|
171
256
|
|
|
172
257
|
```bash
|
|
173
258
|
sduck reopen [slug]
|
|
@@ -176,15 +261,18 @@ sduck reopen [slug]
|
|
|
176
261
|
## ✅ 상태 전이
|
|
177
262
|
|
|
178
263
|
```text
|
|
179
|
-
PENDING_SPEC_APPROVAL -> SPEC_APPROVED -> IN_PROGRESS -> DONE
|
|
264
|
+
PENDING_SPEC_APPROVAL -> SPEC_APPROVED -> IN_PROGRESS -> REVIEW_READY -> DONE
|
|
180
265
|
DONE -> IN_PROGRESS (reopen)
|
|
266
|
+
(any active status) -> ABANDONED (abandon)
|
|
181
267
|
```
|
|
182
268
|
|
|
183
269
|
- `start`: `PENDING_SPEC_APPROVAL`
|
|
184
270
|
- `spec approve`: `SPEC_APPROVED`
|
|
185
271
|
- `plan approve`: `IN_PROGRESS`
|
|
186
|
-
- `
|
|
272
|
+
- `review ready`: `REVIEW_READY`
|
|
273
|
+
- `done`: `DONE` (`REVIEW_READY`에서만 가능)
|
|
187
274
|
- `reopen`: `DONE`인 task를 다시 열어 `IN_PROGRESS`로 되돌림
|
|
275
|
+
- `abandon`: 활성 상태의 task를 `ABANDONED`로 전환
|
|
188
276
|
- `fast-track`: minimal spec/plan을 생성하고, 환경에 따라 `PENDING_SPEC_APPROVAL` 또는 `IN_PROGRESS`까지 진행
|
|
189
277
|
|
|
190
278
|
`reopen`은 기존 task의 연속 수정에 사용하고, 요구사항이 바뀌거나 범위가 커지면 새 task를 만드는 것을 권장합니다.
|
|
@@ -222,23 +310,37 @@ sduck은 모든 상태를 로컬 파일로 관리하여 Git으로 완벽하게
|
|
|
222
310
|
```
|
|
223
311
|
your-project/
|
|
224
312
|
├── .sduck/
|
|
225
|
-
│ ├── sduck-assets/
|
|
226
|
-
│ │ ├── types/
|
|
227
|
-
│ │ ├── eval/
|
|
228
|
-
│ │ └── agent-rules/
|
|
229
|
-
│
|
|
230
|
-
│
|
|
231
|
-
│
|
|
232
|
-
│
|
|
233
|
-
│
|
|
234
|
-
|
|
235
|
-
|
|
313
|
+
│ ├── sduck-assets/ # ✨ 팀 표준 (템플릿, 평가 기준, 규칙 원본)
|
|
314
|
+
│ │ ├── types/ # 작업 타입별 spec.md 템플릿
|
|
315
|
+
│ │ ├── eval/ # 품질 평가 기준 (YAML)
|
|
316
|
+
│ │ └── agent-rules/ # 에이전트별 규칙 원본
|
|
317
|
+
│ ├── sduck-workspace/ # 📝 작업 이력 (Git 추적 권장)
|
|
318
|
+
│ │ └── 20260319-1000-feature-login/
|
|
319
|
+
│ │ ├── meta.yml # 작업 상태 관리
|
|
320
|
+
│ │ ├── spec.md # 요구사항 명세서
|
|
321
|
+
│ │ ├── plan.md # 상세 구현 계획서
|
|
322
|
+
│ │ └── review.md # 리뷰 문서 (review ready 시 생성)
|
|
323
|
+
│ ├── sduck-archive/ # 📦 아카이브 (월별 정리)
|
|
324
|
+
│ │ └── 2026-03/
|
|
325
|
+
│ └── sduck-state.yml # 🔄 현재 작업 상태 (current_work_id)
|
|
326
|
+
├── .sduck-worktrees/ # 🌳 Git worktree (자동 생성, .gitignore 대상)
|
|
327
|
+
│ └── 20260319-1000-feature-login/
|
|
328
|
+
├── CLAUDE.md # Claude Code용 규칙
|
|
329
|
+
└── AGENT.md # Codex/OpenCode용 규칙
|
|
236
330
|
```
|
|
237
331
|
|
|
238
|
-
`meta.yml`에는
|
|
332
|
+
`meta.yml`에는 아래 상태 정보가 들어갑니다.
|
|
239
333
|
|
|
240
334
|
```yaml
|
|
241
|
-
|
|
335
|
+
id: 20260319-1000-feature-login
|
|
336
|
+
type: feature
|
|
337
|
+
slug: login
|
|
338
|
+
status: PENDING_SPEC_APPROVAL | SPEC_APPROVED | IN_PROGRESS | REVIEW_READY | DONE | ABANDONED
|
|
339
|
+
branch: work/feature/login # null if --no-git
|
|
340
|
+
base_branch: main # null if --no-git
|
|
341
|
+
worktree_path: .sduck-worktrees/... # null if --no-git
|
|
342
|
+
created_at: 2026-03-19T10:00:00Z
|
|
343
|
+
updated_at: 2026-03-19T10:00:00Z
|
|
242
344
|
spec:
|
|
243
345
|
approved: <boolean>
|
|
244
346
|
plan:
|