@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.
@@ -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,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. **Done:** spec 체크리스트와 task eval 기준을 확인한 `sduck done` 실행
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
- 생성 직후 상태는 `PENDING_SPEC_APPROVAL`입니다.
150
+ ### 3. 구현 컨텍스트 확인 (Implement)
115
151
 
116
- ### 2. 스펙 승인 (Approve Spec)
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을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다.
161
+ target을 생략하면 현재 작업(current work)이 대상이 됩니다.
120
162
 
121
163
  ```bash
122
164
  sduck spec approve [slug]
123
165
  ```
124
166
 
125
- ### 3. 빠른 시작 (Fast Track)
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
- ### 4. 플랜 승인 (Approve Plan)
181
+ ### 6. 플랜 승인 (Approve Plan)
139
182
 
140
183
  `plan.md`에 작성된 단계(Steps)를 검토하고 승인합니다. 상태가 `IN_PROGRESS`로 변경되며 구현 권한이 부여됩니다.
141
- target을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다.
184
+ target을 생략하면 현재 작업이 대상이 됩니다.
142
185
 
143
186
  ```bash
144
187
  sduck plan approve [slug]
145
188
  ```
146
189
 
147
- ### 5. 작업 완료 (Done)
190
+ ### 7. 리뷰 준비 (Review Ready)
148
191
 
149
- 구현이 끝난 작업의 step 완료 여부, spec 체크리스트, task eval 자산을 확인한 뒤 `DONE` 상태로 마감합니다.
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
- - target을 지정할 때는 정확한 `slug` 또는 전체 task `id`만 허용됩니다
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
- - `done`: `DONE`
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/ # 작업 타입별 spec.md 템플릿
206
- │ │ ├── eval/ # 품질 평가 기준 (YAML)
207
- │ │ └── agent-rules/ # 에이전트별 규칙 원본
208
- └── sduck-workspace/ # 📝 작업 이력 (Git 추적 권장)
209
- └── 20260319-1000-feature-login/
210
- ├── meta.yml # 작업 상태 관리 (status, timestamps)
211
- ├── spec.md # 요구사항 명세서 또는 minimal spec
212
- └── plan.md # 상세 구현 계획서 또는 minimal plan
213
- ├── CLAUDE.md # Claude Code용 규칙
214
- └── 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용 규칙
215
330
  ```
216
331
 
217
- `meta.yml`에는 최소 아래 상태 정보가 들어갑니다.
332
+ `meta.yml`에는 아래 상태 정보가 들어갑니다.
218
333
 
219
334
  ```yaml
220
- 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
221
344
  spec:
222
345
  approved: <boolean>
223
346
  plan: