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 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
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen)](https://nodejs.org/)
6
+ [![TypeScript](https://img.shields.io/badge/typescript-5.x-blue)](https://www.typescriptlang.org/)
7
+ [![License](https://img.shields.io/badge/license-MIT-green)](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
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import { run } from '../dist/cli/index.js';
3
+ run();
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+
3
+ /**
4
+ * CLI 진입점
5
+ */
6
+
7
+ declare const program: Command;
8
+ /**
9
+ * CLI 실행
10
+ */
11
+ declare function run(): void;
12
+
13
+ export { program, run };