sdd-tool 0.1.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/LICENSE +21 -0
- package/README.md +302 -0
- package/bin/sdd.js +3 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.js +3979 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +240 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/package.json +75 -0
- package/templates/agents.md +62 -0
- package/templates/constitution.md +43 -0
- package/templates/proposal.md +71 -0
- package/templates/spec.md +27 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 JakeB-5
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
# SDD Tool
|
|
2
|
+
|
|
3
|
+
**Spec-Driven Development CLI** - 명세 기반 개발을 위한 통합 CLI 도구
|
|
4
|
+
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
## 개요
|
|
10
|
+
|
|
11
|
+
SDD Tool은 명세(Specification)를 중심으로 소프트웨어를 개발하는 방법론을 지원하는 CLI 도구입니다. 코드보다 명세를 우선시하여, 명세가 구현의 진실 공급원(Source of Truth)이 되도록 합니다.
|
|
12
|
+
|
|
13
|
+
### 핵심 개념
|
|
14
|
+
|
|
15
|
+
- **명세 우선**: 코드 작성 전 명세 작성
|
|
16
|
+
- **RFC 2119 키워드**: SHALL, MUST, SHOULD, MAY, SHALL NOT
|
|
17
|
+
- **GIVEN-WHEN-THEN**: 시나리오 기반 요구사항 정의
|
|
18
|
+
- **델타 시스템**: ADDED, MODIFIED, REMOVED로 변경 추적
|
|
19
|
+
- **헌법(Constitution)**: 프로젝트 핵심 원칙 정의
|
|
20
|
+
|
|
21
|
+
## 설치
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# npm
|
|
25
|
+
npm install -g sdd-tool
|
|
26
|
+
|
|
27
|
+
# pnpm
|
|
28
|
+
pnpm add -g sdd-tool
|
|
29
|
+
|
|
30
|
+
# 또는 로컬에서 실행
|
|
31
|
+
git clone <repository>
|
|
32
|
+
cd sdd-tool
|
|
33
|
+
pnpm install
|
|
34
|
+
pnpm run build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 빠른 시작
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 1. 프로젝트 초기화
|
|
41
|
+
sdd init
|
|
42
|
+
|
|
43
|
+
# 2. 새 기능 생성
|
|
44
|
+
sdd new user-auth --title "사용자 인증" --all
|
|
45
|
+
|
|
46
|
+
# 3. 스펙 검증
|
|
47
|
+
sdd validate
|
|
48
|
+
|
|
49
|
+
# 4. 프로젝트 상태 확인
|
|
50
|
+
sdd status
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 명령어
|
|
54
|
+
|
|
55
|
+
### `sdd init`
|
|
56
|
+
|
|
57
|
+
SDD 프로젝트를 초기화합니다.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
sdd init # 기본 초기화
|
|
61
|
+
sdd init --force # 기존 파일 덮어쓰기
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
생성되는 구조:
|
|
65
|
+
```
|
|
66
|
+
.sdd/
|
|
67
|
+
├── constitution.md # 프로젝트 헌법 (핵심 원칙)
|
|
68
|
+
├── AGENTS.md # AI 워크플로우 가이드
|
|
69
|
+
├── specs/ # 기능 명세
|
|
70
|
+
├── changes/ # 변경 제안
|
|
71
|
+
├── archive/ # 완료된 변경
|
|
72
|
+
└── templates/ # 템플릿 파일
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### `sdd new`
|
|
76
|
+
|
|
77
|
+
새로운 기능을 생성합니다.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# 기본 사용
|
|
81
|
+
sdd new <feature-name>
|
|
82
|
+
|
|
83
|
+
# 옵션
|
|
84
|
+
sdd new auth --title "인증 기능" --description "사용자 인증"
|
|
85
|
+
sdd new auth --all # spec, plan, tasks, checklist 모두 생성
|
|
86
|
+
sdd new auth --no-branch # Git 브랜치 생성 안 함
|
|
87
|
+
|
|
88
|
+
# 서브커맨드
|
|
89
|
+
sdd new plan <feature> # 구현 계획 생성
|
|
90
|
+
sdd new tasks <feature> # 작업 분해 생성
|
|
91
|
+
sdd new checklist # 워크플로우 체크리스트 생성
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### `sdd validate`
|
|
95
|
+
|
|
96
|
+
스펙 파일의 형식을 검증합니다.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
sdd validate # 전체 검증
|
|
100
|
+
sdd validate path/to/spec.md # 특정 파일 검증
|
|
101
|
+
sdd validate --strict # 엄격 모드 (경고도 에러)
|
|
102
|
+
sdd validate --quiet # 조용한 모드
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
검증 항목:
|
|
106
|
+
- YAML frontmatter 존재 및 형식
|
|
107
|
+
- RFC 2119 키워드 사용
|
|
108
|
+
- GIVEN-WHEN-THEN 시나리오 포함
|
|
109
|
+
|
|
110
|
+
### `sdd change`
|
|
111
|
+
|
|
112
|
+
변경 제안을 생성하고 관리합니다.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
sdd change # 새 변경 제안 생성
|
|
116
|
+
sdd change CHG-001 # 특정 변경 조회
|
|
117
|
+
sdd change --list # 변경 목록
|
|
118
|
+
sdd change apply CHG-001 # 변경 적용
|
|
119
|
+
sdd change archive CHG-001 # 변경 아카이브
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### `sdd impact`
|
|
123
|
+
|
|
124
|
+
스펙 변경의 영향도를 분석합니다.
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
sdd impact <feature> # 특정 기능 영향도 분석
|
|
128
|
+
sdd impact --graph # 의존성 그래프 출력 (Mermaid)
|
|
129
|
+
sdd impact <feature> --json # JSON 형식 출력
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### `sdd status`
|
|
133
|
+
|
|
134
|
+
프로젝트 상태를 조회합니다.
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
sdd status # 기본 상태
|
|
138
|
+
sdd status --verbose # 상세 정보
|
|
139
|
+
sdd status --json # JSON 형식
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### `sdd list`
|
|
143
|
+
|
|
144
|
+
항목 목록을 조회합니다.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
sdd list # 전체 요약
|
|
148
|
+
sdd list features # 기능 목록
|
|
149
|
+
sdd list changes # 변경 목록
|
|
150
|
+
sdd list specs # 스펙 파일 목록
|
|
151
|
+
sdd list templates # 템플릿 목록
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### `sdd prompt`
|
|
155
|
+
|
|
156
|
+
AI 도구용 슬래시 커맨드 프롬프트를 출력합니다.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
sdd prompt # 사용 가능한 명령어 목록
|
|
160
|
+
sdd prompt --list # 명령어 목록
|
|
161
|
+
sdd prompt change # /sdd:change 프롬프트
|
|
162
|
+
sdd prompt new # /sdd:new 프롬프트
|
|
163
|
+
sdd prompt plan # /sdd:plan 프롬프트
|
|
164
|
+
sdd prompt tasks # /sdd:tasks 프롬프트
|
|
165
|
+
sdd prompt apply # /sdd:apply 프롬프트
|
|
166
|
+
sdd prompt archive # /sdd:archive 프롬프트
|
|
167
|
+
sdd prompt impact # /sdd:impact 프롬프트
|
|
168
|
+
sdd prompt validate # /sdd:validate 프롬프트
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 워크플로우
|
|
172
|
+
|
|
173
|
+
### 신규 기능 개발
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
1. sdd new <feature> --all # 기능 생성 (spec, plan, tasks)
|
|
177
|
+
2. spec.md 작성 # 요구사항 정의
|
|
178
|
+
3. sdd validate # 명세 검증
|
|
179
|
+
4. plan.md 작성 # 구현 계획
|
|
180
|
+
5. tasks.md 기반 구현 # 작업별 구현
|
|
181
|
+
6. sdd change archive # 완료 후 아카이브
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 기존 기능 변경
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
1. sdd change # 변경 제안 생성
|
|
188
|
+
2. proposal.md 작성 # 변경 내용 정의
|
|
189
|
+
3. sdd impact <feature> # 영향도 분석
|
|
190
|
+
4. 검토 및 승인
|
|
191
|
+
5. sdd change apply # 변경 적용
|
|
192
|
+
6. sdd change archive # 아카이브
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## 스펙 파일 형식
|
|
196
|
+
|
|
197
|
+
### spec.md
|
|
198
|
+
|
|
199
|
+
```markdown
|
|
200
|
+
---
|
|
201
|
+
id: feature-id
|
|
202
|
+
title: "기능 제목"
|
|
203
|
+
status: draft
|
|
204
|
+
created: 2025-12-21
|
|
205
|
+
depends: null
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
# 기능 제목
|
|
209
|
+
|
|
210
|
+
> 기능 설명
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 요구사항
|
|
215
|
+
|
|
216
|
+
### REQ-01: 요구사항 제목
|
|
217
|
+
|
|
218
|
+
- 시스템은 [기능]을 지원해야 한다(SHALL)
|
|
219
|
+
- 응답 시간은 1초 이내여야 한다(SHOULD)
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 시나리오
|
|
224
|
+
|
|
225
|
+
### Scenario 1: 성공 케이스
|
|
226
|
+
|
|
227
|
+
- **GIVEN** 유효한 사용자가 있을 때
|
|
228
|
+
- **WHEN** 로그인을 시도하면
|
|
229
|
+
- **THEN** 메인 페이지로 이동한다
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### RFC 2119 키워드
|
|
233
|
+
|
|
234
|
+
| 키워드 | 의미 | 사용 예시 |
|
|
235
|
+
|--------|------|-----------|
|
|
236
|
+
| **SHALL** / **MUST** | 절대 필수 | "시스템은 인증을 지원해야 한다(SHALL)" |
|
|
237
|
+
| **SHOULD** | 권장 (예외 가능) | "응답 시간은 1초 이내여야 한다(SHOULD)" |
|
|
238
|
+
| **MAY** | 선택적 | "다크 모드를 지원할 수 있다(MAY)" |
|
|
239
|
+
| **SHALL NOT** | 절대 금지 | "평문 비밀번호를 저장해서는 안 된다(SHALL NOT)" |
|
|
240
|
+
|
|
241
|
+
## 개발
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# 의존성 설치
|
|
245
|
+
pnpm install
|
|
246
|
+
|
|
247
|
+
# 빌드
|
|
248
|
+
pnpm run build
|
|
249
|
+
|
|
250
|
+
# 개발 모드 (watch)
|
|
251
|
+
pnpm run dev
|
|
252
|
+
|
|
253
|
+
# 테스트
|
|
254
|
+
pnpm test # watch 모드
|
|
255
|
+
pnpm run test:run # 단일 실행
|
|
256
|
+
pnpm run test:coverage # 커버리지
|
|
257
|
+
|
|
258
|
+
# 린트
|
|
259
|
+
pnpm run lint
|
|
260
|
+
|
|
261
|
+
# 타입 체크
|
|
262
|
+
pnpm run typecheck
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 프로젝트 구조
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
sdd-tool/
|
|
269
|
+
├── bin/ # CLI 진입점
|
|
270
|
+
│ └── sdd.js
|
|
271
|
+
├── src/
|
|
272
|
+
│ ├── cli/ # CLI 명령어
|
|
273
|
+
│ │ ├── commands/
|
|
274
|
+
│ │ │ ├── init.ts
|
|
275
|
+
│ │ │ ├── new.ts
|
|
276
|
+
│ │ │ ├── validate.ts
|
|
277
|
+
│ │ │ ├── change.ts
|
|
278
|
+
│ │ │ ├── impact.ts
|
|
279
|
+
│ │ │ ├── status.ts
|
|
280
|
+
│ │ │ ├── list.ts
|
|
281
|
+
│ │ │ └── prompt.ts
|
|
282
|
+
│ │ └── index.ts
|
|
283
|
+
│ ├── core/ # 핵심 로직
|
|
284
|
+
│ │ ├── spec/ # 스펙 파서/검증
|
|
285
|
+
│ │ ├── constitution/ # 헌법 시스템
|
|
286
|
+
│ │ ├── change/ # 변경 워크플로우
|
|
287
|
+
│ │ ├── impact/ # 영향도 분석
|
|
288
|
+
│ │ └── new/ # 신규 기능 워크플로우
|
|
289
|
+
│ ├── generators/ # 파일 생성기
|
|
290
|
+
│ ├── prompts/ # 슬래시 커맨드
|
|
291
|
+
│ ├── errors/ # 에러 처리
|
|
292
|
+
│ ├── utils/ # 유틸리티
|
|
293
|
+
│ └── types/ # 타입 정의
|
|
294
|
+
├── templates/ # 기본 템플릿
|
|
295
|
+
└── tests/ # 테스트
|
|
296
|
+
├── unit/
|
|
297
|
+
└── integration/
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## 라이선스
|
|
301
|
+
|
|
302
|
+
MIT License
|
package/bin/sdd.js
ADDED