@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.
@@ -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
- └── .sduck/sduck-workspace/
38
- └── {timestamp}-{type}-{slug}/
39
- ├── meta.yml
40
- ├── spec.md
41
- └── plan.md
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-workspace/` 디렉토리가 있는지 확인
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]`, and `sduck plan 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. **Done:** spec 체크리스트와 task eval 기준을 확인한 `sduck done` 실행
33
- 10. **Reopen (optional):** 완료된 작업을 다시 열어 후속 수정 사이클을 진행
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
- # 5) 완료된 작업을 다시 열 때
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
- 생성 직후 상태는 `PENDING_SPEC_APPROVAL`입니다.
150
+ ### 3. 구현 컨텍스트 확인 (Implement)
119
151
 
120
- ### 2. 스펙 승인 (Approve Spec)
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을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다.
161
+ target을 생략하면 현재 작업(current work)이 대상이 됩니다.
124
162
 
125
163
  ```bash
126
164
  sduck spec approve [slug]
127
165
  ```
128
166
 
129
- ### 3. 빠른 시작 (Fast Track)
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
- ### 4. 플랜 승인 (Approve Plan)
181
+ ### 6. 플랜 승인 (Approve Plan)
143
182
 
144
183
  `plan.md`에 작성된 단계(Steps)를 검토하고 승인합니다. 상태가 `IN_PROGRESS`로 변경되며 구현 권한이 부여됩니다.
145
- target을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다.
184
+ target을 생략하면 현재 작업이 대상이 됩니다.
146
185
 
147
186
  ```bash
148
187
  sduck plan approve [slug]
149
188
  ```
150
189
 
151
- ### 5. 작업 완료 (Done)
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
- 구현이 끝난 작업의 step 완료 여부, spec 체크리스트, task eval 자산을 확인한 뒤 `DONE` 상태로 마감합니다.
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
- - target을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다
210
+ - `review.md`가 없거나 비어있으면 경고를 출력하지만 완료는 허용됩니다
158
211
 
159
212
  ```bash
160
213
  sduck done [slug]
161
214
  ```
162
215
 
163
- ### 6. 작업 다시 열기 (Reopen)
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
- - `done`: `DONE`
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/ # 작업 타입별 spec.md 템플릿
227
- │ │ ├── eval/ # 품질 평가 기준 (YAML)
228
- │ │ └── agent-rules/ # 에이전트별 규칙 원본
229
- └── sduck-workspace/ # 📝 작업 이력 (Git 추적 권장)
230
- └── 20260319-1000-feature-login/
231
- ├── meta.yml # 작업 상태 관리 (status, timestamps)
232
- ├── spec.md # 요구사항 명세서 또는 minimal spec
233
- └── plan.md # 상세 구현 계획서 또는 minimal plan
234
- ├── CLAUDE.md # Claude Code용 규칙
235
- └── AGENT.md # Codex/OpenCode용 규칙
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
- status: PENDING_SPEC_APPROVAL | SPEC_APPROVED | IN_PROGRESS | DONE
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: