@sduck/sduck-cli 0.1.7 → 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 +20 -9
- package/README.md +152 -29
- package/dist/cli.js +1001 -201
- 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,9 @@
|
|
|
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` 처리가 가능하다
|
|
96
|
+
- `sduck reopen [target]`으로 다시 열린 task는 `IN_PROGRESS` 기준으로 이어서 작업한다
|
|
97
|
+
- reopen은 작은 후속 수정에 사용하고, 요구사항 변경이나 범위 확장은 새 task로 분리한다
|
|
87
98
|
- Do not mark a task `DONE` until all completion criteria are satisfied.
|
|
88
99
|
|
|
89
100
|
## 평가 규칙
|
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,14 +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
|
+
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):** 완료된 작업을 다시 열어 후속 수정 사이클을 진행
|
|
33
38
|
|
|
34
39
|
## 🛠 설치 및 초기화
|
|
35
40
|
|
|
@@ -89,7 +94,7 @@ $env:PATH -split ';' | Select-String 'npm'
|
|
|
89
94
|
# 1) 초기화
|
|
90
95
|
sduck init --agents claude-code,codex
|
|
91
96
|
|
|
92
|
-
# 2) 일반 흐름
|
|
97
|
+
# 2) 일반 흐름 (Git worktree 자동 생성)
|
|
93
98
|
sduck start feature login-system
|
|
94
99
|
sduck spec approve login-system
|
|
95
100
|
sduck plan approve login-system
|
|
@@ -97,32 +102,69 @@ sduck plan approve login-system
|
|
|
97
102
|
# 3) 빠른 흐름
|
|
98
103
|
sduck fast-track fix copy-bug
|
|
99
104
|
|
|
100
|
-
# 4)
|
|
105
|
+
# 4) 다른 작업으로 전환
|
|
106
|
+
sduck use login-system
|
|
107
|
+
|
|
108
|
+
# 5) 현재 작업 컨텍스트 확인
|
|
109
|
+
sduck implement
|
|
110
|
+
|
|
111
|
+
# 6) 리뷰 준비 → 완료
|
|
112
|
+
sduck review ready login-system
|
|
101
113
|
sduck done login-system
|
|
114
|
+
|
|
115
|
+
# 7) 정리
|
|
116
|
+
sduck clean # DONE/ABANDONED 작업 일괄 정리
|
|
117
|
+
sduck archive --keep 3 # 최신 3개 제외하고 아카이브
|
|
118
|
+
|
|
119
|
+
# 8) 작업 중단 / 다시 열기
|
|
120
|
+
sduck abandon login-system
|
|
121
|
+
sduck reopen login-system
|
|
102
122
|
```
|
|
103
123
|
|
|
104
124
|
### 1. 작업 시작 (Start)
|
|
105
125
|
|
|
106
|
-
작업 타입에 맞는 폴더와 템플릿 파일을 생성합니다.
|
|
126
|
+
작업 타입에 맞는 폴더와 템플릿 파일을 생성하고, Git worktree를 `.sduck-worktrees/<work-id>/`에 생성합니다.
|
|
107
127
|
|
|
108
128
|
```bash
|
|
109
129
|
# sduck start <type> <slug>
|
|
110
130
|
sduck start feature login-system
|
|
111
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>
|
|
112
148
|
```
|
|
113
149
|
|
|
114
|
-
|
|
150
|
+
### 3. 구현 컨텍스트 확인 (Implement)
|
|
115
151
|
|
|
116
|
-
|
|
152
|
+
현재 작업의 구현에 필요한 컨텍스트(id, branch, worktree 경로, spec/plan 경로)를 출력합니다.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
sduck implement
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 4. 스펙 승인 (Approve Spec)
|
|
117
159
|
|
|
118
160
|
작성된 `spec.md`를 검토한 후 승인합니다. 상태가 `SPEC_APPROVED`로 변경됩니다.
|
|
119
|
-
target을
|
|
161
|
+
target을 생략하면 현재 작업(current work)이 대상이 됩니다.
|
|
120
162
|
|
|
121
163
|
```bash
|
|
122
164
|
sduck spec approve [slug]
|
|
123
165
|
```
|
|
124
166
|
|
|
125
|
-
###
|
|
167
|
+
### 5. 빠른 시작 (Fast Track)
|
|
126
168
|
|
|
127
169
|
반복적이거나 범위가 명확한 작업은 minimal spec과 minimal plan을 한 번에 생성할 수 있습니다. `spec.md`는 생략되지 않으며, 비대화형 환경에서는 자동 승인 없이 생성만 수행합니다.
|
|
128
170
|
|
|
@@ -133,41 +175,108 @@ sduck spec approve [slug]
|
|
|
133
175
|
|
|
134
176
|
```bash
|
|
135
177
|
sduck fast-track <type> <slug>
|
|
178
|
+
sduck fast-track <type> <slug> --no-git
|
|
136
179
|
```
|
|
137
180
|
|
|
138
|
-
###
|
|
181
|
+
### 6. 플랜 승인 (Approve Plan)
|
|
139
182
|
|
|
140
183
|
`plan.md`에 작성된 단계(Steps)를 검토하고 승인합니다. 상태가 `IN_PROGRESS`로 변경되며 구현 권한이 부여됩니다.
|
|
141
|
-
target을
|
|
184
|
+
target을 생략하면 현재 작업이 대상이 됩니다.
|
|
142
185
|
|
|
143
186
|
```bash
|
|
144
187
|
sduck plan approve [slug]
|
|
145
188
|
```
|
|
146
189
|
|
|
147
|
-
###
|
|
190
|
+
### 7. 리뷰 준비 (Review Ready)
|
|
148
191
|
|
|
149
|
-
구현이
|
|
192
|
+
구현이 완료된 작업을 리뷰 준비 상태로 전환합니다. `review.md` 템플릿이 자동 생성됩니다.
|
|
193
|
+
target을 생략하면 현재 작업이 대상이 됩니다.
|
|
150
194
|
|
|
195
|
+
- `IN_PROGRESS` 상태에서만 전환 가능합니다
|
|
196
|
+
- 이미 `review.md`가 존재하면 덮어쓰지 않습니다
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
sduck review ready [slug]
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 8. 작업 완료 (Done)
|
|
203
|
+
|
|
204
|
+
리뷰 준비가 완료된 작업의 step 완료 여부, spec 체크리스트, task eval 자산을 확인한 뒤 `DONE` 상태로 마감합니다.
|
|
205
|
+
target을 생략하면 현재 작업이 대상이 됩니다.
|
|
206
|
+
|
|
207
|
+
- `REVIEW_READY` 상태에서만 완료 처리 가능합니다
|
|
151
208
|
- `steps.total`과 `steps.completed`가 모두 맞아야 합니다
|
|
152
209
|
- `spec.md`의 체크리스트가 모두 완료돼야 합니다
|
|
153
|
-
-
|
|
210
|
+
- `review.md`가 없거나 비어있으면 경고를 출력하지만 완료는 허용됩니다
|
|
154
211
|
|
|
155
212
|
```bash
|
|
156
213
|
sduck done [slug]
|
|
157
214
|
```
|
|
158
215
|
|
|
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)
|
|
251
|
+
|
|
252
|
+
완료된 작업에 작은 후속 수정이 필요하면 `DONE` 상태 task를 다시 열 수 있습니다.
|
|
253
|
+
|
|
254
|
+
- `reopen`은 완료된 task를 새 작업 사이클로 되돌립니다
|
|
255
|
+
- 큰 요구사항 변경이나 범위 확장은 기존 task를 reopen하기보다 새 task를 만드는 편이 더 적합합니다
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
sduck reopen [slug]
|
|
259
|
+
```
|
|
260
|
+
|
|
159
261
|
## ✅ 상태 전이
|
|
160
262
|
|
|
161
263
|
```text
|
|
162
|
-
PENDING_SPEC_APPROVAL -> SPEC_APPROVED -> IN_PROGRESS -> DONE
|
|
264
|
+
PENDING_SPEC_APPROVAL -> SPEC_APPROVED -> IN_PROGRESS -> REVIEW_READY -> DONE
|
|
265
|
+
DONE -> IN_PROGRESS (reopen)
|
|
266
|
+
(any active status) -> ABANDONED (abandon)
|
|
163
267
|
```
|
|
164
268
|
|
|
165
269
|
- `start`: `PENDING_SPEC_APPROVAL`
|
|
166
270
|
- `spec approve`: `SPEC_APPROVED`
|
|
167
271
|
- `plan approve`: `IN_PROGRESS`
|
|
168
|
-
- `
|
|
272
|
+
- `review ready`: `REVIEW_READY`
|
|
273
|
+
- `done`: `DONE` (`REVIEW_READY`에서만 가능)
|
|
274
|
+
- `reopen`: `DONE`인 task를 다시 열어 `IN_PROGRESS`로 되돌림
|
|
275
|
+
- `abandon`: 활성 상태의 task를 `ABANDONED`로 전환
|
|
169
276
|
- `fast-track`: minimal spec/plan을 생성하고, 환경에 따라 `PENDING_SPEC_APPROVAL` 또는 `IN_PROGRESS`까지 진행
|
|
170
277
|
|
|
278
|
+
`reopen`은 기존 task의 연속 수정에 사용하고, 요구사항이 바뀌거나 범위가 커지면 새 task를 만드는 것을 권장합니다.
|
|
279
|
+
|
|
171
280
|
## 🧭 일반 흐름 vs fast-track
|
|
172
281
|
|
|
173
282
|
| 구분 | 일반 흐름 | fast-track |
|
|
@@ -201,23 +310,37 @@ sduck은 모든 상태를 로컬 파일로 관리하여 Git으로 완벽하게
|
|
|
201
310
|
```
|
|
202
311
|
your-project/
|
|
203
312
|
├── .sduck/
|
|
204
|
-
│ ├── sduck-assets/
|
|
205
|
-
│ │ ├── types/
|
|
206
|
-
│ │ ├── eval/
|
|
207
|
-
│ │ └── agent-rules/
|
|
208
|
-
│
|
|
209
|
-
│
|
|
210
|
-
│
|
|
211
|
-
│
|
|
212
|
-
│
|
|
213
|
-
|
|
214
|
-
|
|
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용 규칙
|
|
215
330
|
```
|
|
216
331
|
|
|
217
|
-
`meta.yml`에는
|
|
332
|
+
`meta.yml`에는 아래 상태 정보가 들어갑니다.
|
|
218
333
|
|
|
219
334
|
```yaml
|
|
220
|
-
|
|
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
|
|
221
344
|
spec:
|
|
222
345
|
approved: <boolean>
|
|
223
346
|
plan:
|