spec-lite 1.0.2 → 1.1.1
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/README.md +21 -22
- package/package.json +1 -1
- package/skills/plan/SKILL.md +4 -2
- package/skills/spec-brownfield-component/SKILL.md +266 -0
- package/skills/spec-brownfield-feature/SKILL.md +239 -0
- package/skills/spec-brownfield-init/SKILL.md +300 -0
- package/skills/spec-new/SKILL.md +64 -32
- package/skills/spec-prd/SKILL.md +33 -14
- package/skills/spec-sad/SKILL.md +3 -3
- package/skills/spec-tech/SKILL.md +51 -18
- package/templates/integrations/plan-template.md +1 -0
- package/templates/integrations/spec-template.md +34 -12
- package/templates/integrations/tech-template.md +10 -1
- package/templates/integrations/todo-template.md +1 -0
- package/templates/main/component/cdd-template.md +63 -0
- package/templates/main/component/crd-template.md +88 -0
- package/templates/main/domain-template.md +22 -21
- package/templates/main/feature/fdd-template.md +27 -30
- package/templates/main/feature/frd-template.md +18 -7
- package/templates/main/prd-template.md +8 -0
- package/skills/spec-domain/SKILL.md +0 -176
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-brownfield-init
|
|
3
|
+
description: Khởi tạo main artifacts (prd.md, domain.md, sad.md) cho brownfield project bằng cách scan codebase và interview với pre-filled options. Dùng khi onboarding một project đã chạy vào SDD workflow.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# spec-brownfield-init
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Tạo `specs/main/prd.md`, `specs/main/domain.md`, và `specs/main/sad.md` cho một project đã tồn tại.
|
|
11
|
+
|
|
12
|
+
Skill này chỉ tập trung vào **product và architecture level** — những gì có thể extract từ README, docs, config, và kiến trúc tổng thể. Component Index và Feature Index trong prd.md sẽ **để trống** — chúng sẽ được điền bởi `/spec-brownfield-component` và `/spec-brownfield-feature` sau khi scan code chuyên sâu.
|
|
13
|
+
|
|
14
|
+
Thông tin không thể detect từ code được đánh dấu nhất quán:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
**[NEEDS_CLARIFY]** <mô tả điều chưa rõ và câu hỏi cần trả lời>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
|
|
22
|
+
- Onboarding một brownfield project vào SDD workflow
|
|
23
|
+
- `specs/main/prd.md` chưa có hoặc còn trống
|
|
24
|
+
|
|
25
|
+
## When NOT to Use
|
|
26
|
+
|
|
27
|
+
- Greenfield project chưa có code → dùng `/spec-prd` + `/spec-sad`
|
|
28
|
+
- `prd.md` đã có nội dung đầy đủ → dùng `/spec-prd` hoặc `/spec-sad` để update từng phần
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Process
|
|
33
|
+
|
|
34
|
+
### Bước 1: Xác định target path và load attachments
|
|
35
|
+
|
|
36
|
+
**Path:**
|
|
37
|
+
- Nếu có ARGUMENT là path → đây là root của project cần scan.
|
|
38
|
+
- Nếu không có → mặc định dùng current working directory.
|
|
39
|
+
|
|
40
|
+
Thông báo: `Sẽ scan: {path}`
|
|
41
|
+
|
|
42
|
+
**Attachments:**
|
|
43
|
+
Hỏi ngay đầu — không hỏi lại sau:
|
|
44
|
+
|
|
45
|
+
> Bạn có tài liệu bổ sung nào không? (README, API spec, wiki, ADR, existing docs)
|
|
46
|
+
> Paste nội dung hoặc cung cấp file path. Nhập `không` để bỏ qua.
|
|
47
|
+
|
|
48
|
+
Load tất cả attachments trước khi scan. Dùng làm context bổ sung trong mọi bước tiếp theo.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### Bước 2: Kiểm tra existing specs
|
|
53
|
+
|
|
54
|
+
Kiểm tra `specs/main/prd.md`, `specs/main/domain.md`, `specs/main/sad.md`:
|
|
55
|
+
|
|
56
|
+
Nếu một trong ba đã có nội dung thực → cảnh báo:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
⚠ File đã có nội dung:
|
|
60
|
+
- specs/main/prd.md
|
|
61
|
+
- specs/main/sad.md
|
|
62
|
+
|
|
63
|
+
Skill này sẽ overwrite các file trên. Tiếp tục? [y/n]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Nếu user chọn `n` → dừng.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### Bước 3: Scan codebase
|
|
71
|
+
|
|
72
|
+
Scan tuần tự. **Không hỏi user trong bước này** — chỉ thu thập thông tin.
|
|
73
|
+
|
|
74
|
+
**3a. Package & tech stack:**
|
|
75
|
+
Đọc (nếu tồn tại): `package.json`, `yarn.lock`, `pnpm-lock.yaml`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `pom.xml`, `build.gradle`, `composer.json`, `Gemfile`, `pubspec.yaml`
|
|
76
|
+
|
|
77
|
+
Extract: ngôn ngữ, framework chính, major dependencies, build/test scripts.
|
|
78
|
+
|
|
79
|
+
**3b. README và existing docs:**
|
|
80
|
+
Đọc (nếu tồn tại): `README.md`, `README.*`, `docs/`, `ARCHITECTURE.md`, `DESIGN.md`
|
|
81
|
+
|
|
82
|
+
Extract: mô tả project, target users được nhắc đến, business context.
|
|
83
|
+
|
|
84
|
+
**3c. Directory structure — top level:**
|
|
85
|
+
List 1-2 levels từ root — không đọc nội dung file source.
|
|
86
|
+
|
|
87
|
+
Detect: architecture pattern (monolith / microservices / monorepo). Không cần lấy tên từng module — đó là việc của `/spec-brownfield-component`.
|
|
88
|
+
|
|
89
|
+
**3d. Auth & middleware:**
|
|
90
|
+
Tìm files liên quan: auth, middleware, interceptor, guard, rate-limit, logging config.
|
|
91
|
+
|
|
92
|
+
Infer: auth strategy, cross-cutting patterns đang dùng.
|
|
93
|
+
|
|
94
|
+
**3e. Infrastructure:**
|
|
95
|
+
Đọc (nếu tồn tại): `docker-compose.yml`, `Dockerfile`, `.github/workflows/`, `k8s/`, `terraform/`, `serverless.yml`, `.env.example`
|
|
96
|
+
|
|
97
|
+
Extract: deployment target, số services (để confirm architecture pattern), số môi trường.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### Bước 4: Tóm tắt scan và xác nhận tiếp tục
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
SCAN RESULTS — {path}
|
|
105
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
106
|
+
Tech stack: {e.g. TypeScript / NestJS / PostgreSQL / Redis}
|
|
107
|
+
Architecture: {e.g. Modular Monolith}
|
|
108
|
+
Auth pattern: {e.g. JWT Bearer / Session / không detect được}
|
|
109
|
+
Docs loaded: {list files đọc được}
|
|
110
|
+
|
|
111
|
+
Tiếp tục với brownfield init? [y/n]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Nếu `n` → dừng.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### Bước 5: Interview — prd.md
|
|
119
|
+
|
|
120
|
+
Hỏi tuần tự từng phần. Mỗi câu hỏi có options pre-filled từ scan. Luôn có `[0] Chưa rõ → NEEDS_CLARIFY`. Khi user chọn `[0]` → đánh dấu và tiếp tục, không dừng lại.
|
|
121
|
+
|
|
122
|
+
**Phần 1 — Problem Statement:**
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
❓ Hệ thống này giải quyết vấn đề gì?
|
|
126
|
+
[1] {Trích từ README: "..."}
|
|
127
|
+
[2] Nhập mô tả khác
|
|
128
|
+
[0] Chưa rõ → NEEDS_CLARIFY
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Phần 2 — Target Users:**
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
❓ Ai là người dùng chính?
|
|
135
|
+
[1] {Detected từ auth guards / README: e.g. "admin, user, guest"}
|
|
136
|
+
[2] Nhập personas khác
|
|
137
|
+
[0] Chưa rõ → NEEDS_CLARIFY
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Nếu user chọn [1] → hỏi thêm một câu: "Bạn muốn mô tả thêm mục tiêu / pain point cho từng role không? [y/n]"
|
|
141
|
+
|
|
142
|
+
**Phần 3 — Scope:**
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
❓ In scope — những gì hệ thống có:
|
|
146
|
+
[1] {Infer từ README/docs: "..."}
|
|
147
|
+
[2] Nhập danh sách khác
|
|
148
|
+
[0] Chưa rõ → NEEDS_CLARIFY
|
|
149
|
+
|
|
150
|
+
❓ Out of scope — những gì hệ thống KHÔNG làm:
|
|
151
|
+
[1] Nhập nội dung
|
|
152
|
+
[0] Chưa rõ → NEEDS_CLARIFY
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Phần 4 — NFRs:**
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
❓ Non-Functional Requirements:
|
|
159
|
+
Detected từ config / code:
|
|
160
|
+
{e.g. Rate limit: 100 req/min (từ rate-limit config)}
|
|
161
|
+
{e.g. DB pool: max 10 connections (từ DB config)}
|
|
162
|
+
|
|
163
|
+
Có thêm NFR nào không? (performance targets, availability SLA, security compliance, scalability)
|
|
164
|
+
[1] Dùng detected + nhập thêm nếu có
|
|
165
|
+
[2] Nhập lại từ đầu
|
|
166
|
+
[0] Chưa rõ → NEEDS_CLARIFY tất cả
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Phần 5 — Business Constraints:**
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
❓ Business constraints và assumptions:
|
|
173
|
+
(deadline, budget, compliance, vendor lock-in, team constraints)
|
|
174
|
+
[1] Nhập nội dung
|
|
175
|
+
[0] Chưa rõ → NEEDS_CLARIFY
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Lưu ý:** prd.md sẽ có Component Index và Feature Index **để trống** với placeholder. Chúng sẽ được điền bởi `/spec-brownfield-component` và `/spec-brownfield-feature`.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### Bước 6: Tạo domain.md — Glossary
|
|
183
|
+
|
|
184
|
+
domain.md ở bước này chỉ có **Glossary** — Shared Entities để trống, sẽ được mọc qua cascade proposals từ `/spec-brownfield-component` khi nó phát hiện cross-component entities.
|
|
185
|
+
|
|
186
|
+
Extract glossary terms từ: README/docs (business terms được nhắc đến), tên các key concepts trong problem statement vừa thu thập.
|
|
187
|
+
|
|
188
|
+
Hỏi:
|
|
189
|
+
```
|
|
190
|
+
❓ Glossary terms cần define:
|
|
191
|
+
Tôi nhận diện được các terms sau từ docs:
|
|
192
|
+
- {term 1}: {định nghĩa inferred hoặc NEEDS_CLARIFY}
|
|
193
|
+
- {term 2}: {định nghĩa inferred hoặc NEEDS_CLARIFY}
|
|
194
|
+
|
|
195
|
+
[1] Dùng list này — có thể thêm/sửa/xóa
|
|
196
|
+
[2] Nhập danh sách mới
|
|
197
|
+
[0] Chưa rõ / bỏ qua → để trống, điền sau
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
### Bước 7: Auto-generate — sad.md
|
|
203
|
+
|
|
204
|
+
Phần lớn auto từ scan. Chỉ hỏi 2 câu.
|
|
205
|
+
|
|
206
|
+
**7a. Auto-fill từ scan:**
|
|
207
|
+
- Tech stack: từ package files
|
|
208
|
+
- Architecture style: infer từ directory structure top-level + docker-compose
|
|
209
|
+
- Cross-cutting concerns: infer từ middleware / interceptors / guards detected
|
|
210
|
+
- Inter-service communication: infer từ message queue / HTTP client usage
|
|
211
|
+
- Infrastructure: infer từ docker-compose, cloud configs
|
|
212
|
+
|
|
213
|
+
**7b. Hỏi Guardrails:**
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
❓ Architectural Guardrails:
|
|
217
|
+
Dựa trên {stack}, tôi đề xuất:
|
|
218
|
+
GUARD-001: {rule cụ thể}
|
|
219
|
+
GUARD-002: {rule cụ thể}
|
|
220
|
+
...
|
|
221
|
+
|
|
222
|
+
[1] Dùng set này — có thể thêm/bớt
|
|
223
|
+
[2] Nhập guardrails khác
|
|
224
|
+
[0] Chưa rõ → NEEDS_CLARIFY tất cả
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**7c. Hỏi additional constraints:**
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
❓ Có architectural decision nào quan trọng chưa detect được không?
|
|
231
|
+
(patterns bắt buộc dùng, patterns bị cấm, third-party services phải dùng)
|
|
232
|
+
[1] Nhập thêm
|
|
233
|
+
[0] Không có thêm
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
### Bước 8: Review drafts
|
|
239
|
+
|
|
240
|
+
Hiển thị draft từng file lần lượt. Với mỗi file:
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
244
|
+
DRAFT: specs/main/{file}
|
|
245
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
246
|
+
{nội dung draft}
|
|
247
|
+
|
|
248
|
+
[NEEDS_CLARIFY trong file này: {count} items]
|
|
249
|
+
|
|
250
|
+
Confirm? [y] Bỏ qua [n] Chỉnh sửa [e]:
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
- `y` → ghi file, chuyển sang file tiếp theo
|
|
254
|
+
- `n` → bỏ qua file này
|
|
255
|
+
- `e` → hỏi chỉnh sửa cụ thể, show lại draft, hỏi confirm lần nữa
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
### Bước 9: Save
|
|
260
|
+
|
|
261
|
+
Tạo `specs/main/` nếu chưa có. Ghi các files đã được confirm.
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
✓ specs/main/prd.md (Component Index và Feature Index: placeholder — chưa có)
|
|
265
|
+
✓ specs/main/domain.md (Glossary: {n} terms | Shared Entities: trống — sẽ mọc qua cascade)
|
|
266
|
+
✓ specs/main/sad.md
|
|
267
|
+
|
|
268
|
+
NEEDS_CLARIFY summary — {total} items cần làm rõ:
|
|
269
|
+
prd.md: {n} — [Problem Statement, Business Constraints, ...]
|
|
270
|
+
domain.md: {n} — [glossary terms, ...]
|
|
271
|
+
sad.md: {n} — [guardrails, ...]
|
|
272
|
+
|
|
273
|
+
Bước tiếp theo:
|
|
274
|
+
/spec-brownfield-component → scan code, generate crd.md + cdd.md, điền Component Index
|
|
275
|
+
/spec-brownfield-feature → scan code, generate frd.md + fdd.md, điền Feature Index
|
|
276
|
+
(chạy component trước — feature phụ thuộc vào component)
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## NEEDS_CLARIFY Convention
|
|
282
|
+
|
|
283
|
+
Format chuẩn — dùng nhất quán trong tất cả artifacts:
|
|
284
|
+
|
|
285
|
+
```markdown
|
|
286
|
+
**[NEEDS_CLARIFY]** Mô tả ngắn điều chưa rõ. Câu hỏi cần trả lời để fill in.
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Verification
|
|
292
|
+
|
|
293
|
+
- [ ] Scan results đã được hiển thị và user confirm trước khi interview
|
|
294
|
+
- [ ] Mọi section có ít nhất một trong ba: nội dung thực / pre-filled option / NEEDS_CLARIFY
|
|
295
|
+
- [ ] prd.md có Component Index placeholder (chưa có entries — sẽ điền sau)
|
|
296
|
+
- [ ] prd.md có Feature Index placeholder (chưa có entries — sẽ điền sau)
|
|
297
|
+
- [ ] domain.md có Glossary (ít nhất skeleton) và Shared Entities trống
|
|
298
|
+
- [ ] sad.md có Architectural Guardrails section
|
|
299
|
+
- [ ] NEEDS_CLARIFY items được list đầy đủ trong summary cuối
|
|
300
|
+
- [ ] User đã confirm từng file trước khi ghi
|
package/skills/spec-new/SKILL.md
CHANGED
|
@@ -19,7 +19,7 @@ Tạo `spec.md` cho một integration mới trong `specs/integrations/{NNN}-{slu
|
|
|
19
19
|
|
|
20
20
|
## When NOT to Use
|
|
21
21
|
|
|
22
|
-
- `prd.md`
|
|
22
|
+
- `prd.md` chưa có → chạy `/spec-prd` trước (skill đó scaffold cả `domain.md` skeleton)
|
|
23
23
|
- Muốn thiết kế technical design → dùng `/spec-tech` (cần `spec.md` đã approve trước)
|
|
24
24
|
- Chỉ muốn cập nhật spec đã có → edit file trực tiếp
|
|
25
25
|
|
|
@@ -50,7 +50,7 @@ Features trong PRD:
|
|
|
50
50
|
Chọn số feature để bắt đầu spec:
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
Ghi chú `→ frd.md tồn tại` nếu file `specs/main/
|
|
53
|
+
Ghi chú `→ frd.md tồn tại` nếu file `specs/main/feature/{F-XXX}-*/frd.md` đã có.
|
|
54
54
|
|
|
55
55
|
Nếu tất cả features đều Done → thông báo:
|
|
56
56
|
> Tất cả features trong prd.md đã được implement. Nếu có yêu cầu mới, hãy truyền nó trực tiếp: `/spec-new <yêu cầu>`.
|
|
@@ -84,11 +84,12 @@ Lưu lại lựa chọn section.
|
|
|
84
84
|
|
|
85
85
|
### Bước 2: Load context
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Từ raw requirement, agent xác định features và components liên quan, rồi load các file sau:
|
|
88
88
|
|
|
89
|
-
- `specs/main/prd.md` — đọc Problem Statement, Target Users, Scope,
|
|
90
|
-
- `specs/main/domain.md` — đọc
|
|
91
|
-
-
|
|
89
|
+
- `specs/main/prd.md` — đọc Problem Statement, Target Users, Scope, Feature Index, Component Index
|
|
90
|
+
- `specs/main/domain.md` — đọc Glossary và Shared Entities
|
|
91
|
+
- `specs/main/feature/{F-XXX}-{slug}/frd.md` — cho mỗi feature liên quan (nếu file đã tồn tại)
|
|
92
|
+
- `specs/main/component/{C-XXX}-{slug}/crd.md` — cho mỗi component bị touched (nếu file đã tồn tại)
|
|
92
93
|
|
|
93
94
|
Tóm tắt context và surface assumptions:
|
|
94
95
|
|
|
@@ -96,15 +97,19 @@ Tóm tắt context và surface assumptions:
|
|
|
96
97
|
TỪ PRD & DOMAIN TÔI HIỂU:
|
|
97
98
|
- Vấn đề đang giải quyết: {problem statement ngắn từ prd}
|
|
98
99
|
- Personas liên quan: {từ prd Target Users}
|
|
99
|
-
-
|
|
100
|
-
|
|
100
|
+
- Glossary terms liên quan: {từ domain.md}
|
|
101
|
+
- Shared entities liên quan: {từ domain.md}
|
|
102
|
+
{nếu có feature liên quan} - Features: {F-XXX — tên — mô tả ngắn}
|
|
103
|
+
{nếu có component liên quan} - Components: {C-XXX — tên — mô tả ngắn}
|
|
101
104
|
|
|
102
105
|
ASSUMPTIONS TÔI ĐANG ĐẶT RA:
|
|
103
106
|
1. {assumption về scope}
|
|
104
|
-
2. {assumption về
|
|
107
|
+
2. {assumption về features/components bị touched}
|
|
105
108
|
→ Sửa lại nếu sai trước khi tiếp tục.
|
|
106
109
|
```
|
|
107
110
|
|
|
111
|
+
Nếu integration giới thiệu feature mới hoặc component mới chưa có trong PRD Index → ghi nhận để cascade ở Bước 5.
|
|
112
|
+
|
|
108
113
|
---
|
|
109
114
|
|
|
110
115
|
### Bước 3: Interview
|
|
@@ -120,11 +125,11 @@ Hỏi tuần tự, từng phần — không hỏi tất cả cùng lúc:
|
|
|
120
125
|
> Hoặc liệt kê functional requirements nếu không theo user story format.
|
|
121
126
|
|
|
122
127
|
**Phần 3 — Acceptance Criteria:**
|
|
123
|
-
> Điều kiện nào để biết integration này là done?
|
|
124
|
-
>
|
|
125
|
-
> -
|
|
126
|
-
>
|
|
127
|
-
>
|
|
128
|
+
> Điều kiện nào để biết integration này là done? Format Given/When/Then.
|
|
129
|
+
> Agent tự nhóm AC theo cách phù hợp với bản chất integration:
|
|
130
|
+
> - Có user-facing flow → group theo Feature → User Story → AC, dùng ID `AC-{F_ID}-{seq}`
|
|
131
|
+
> - Thuần technical (refactor / capability nội tại) → group theo Component, dùng ID `AC-{C_ID}-{seq}`, không cần user story
|
|
132
|
+
> - Mixed (vừa thêm feature, vừa thay đổi component) → có thể có cả 2 nhóm
|
|
128
133
|
|
|
129
134
|
**Phần 4 — Out of Scope:**
|
|
130
135
|
> Có gì liên quan nhưng sẽ KHÔNG làm trong integration này không? Ghi rõ lý do.
|
|
@@ -157,34 +162,59 @@ Tổng hợp và viết draft `spec.md`:
|
|
|
157
162
|
|
|
158
163
|
**Cấu trúc file**: dùng `.claude/templates/integrations/spec-template.md` làm skeleton, điền nội dung từ interview vào.
|
|
159
164
|
|
|
160
|
-
**Cascade Proposals** —
|
|
165
|
+
**Cascade Proposals** — agent đề xuất delta cho main artifacts theo các targets sau (chỉ điền nếu thực sự có thay đổi, không thì ghi "Không có thay đổi đề xuất."):
|
|
161
166
|
|
|
162
167
|
### prd.md
|
|
163
168
|
|
|
164
|
-
|
|
169
|
+
Đề xuất cập nhật nếu integration này:
|
|
170
|
+
- Giới thiệu feature mới chưa có trong Feature Index → đề xuất thêm row vào Features (auto-pick `F-XXX` next ID, slug từ context)
|
|
171
|
+
- Giới thiệu component mới chưa có trong Component Index → đề xuất thêm row vào Components (auto-pick `C-XXX` next ID)
|
|
172
|
+
- Đổi status feature từ `TODO` sang `In Progress`
|
|
173
|
+
- Có scope hoặc NFR thay đổi
|
|
165
174
|
|
|
166
175
|
### domain.md
|
|
167
176
|
|
|
168
|
-
|
|
177
|
+
Đề xuất cập nhật nếu integration này:
|
|
178
|
+
- Giới thiệu glossary term mới → đề xuất thêm vào Glossary
|
|
179
|
+
- Giới thiệu shared entity mới (entity sẽ được dùng bởi 2+ component) → đề xuất thêm vào Shared Entities với field `Owner: C-XXX`
|
|
180
|
+
|
|
181
|
+
### component/{C-XXX}-{component-name}/crd.md
|
|
182
|
+
|
|
183
|
+
Liệt kê **tất cả** components bị touched trong integration và đánh giá từng cái:
|
|
184
|
+
|
|
185
|
+
| Component | crd.md | Đề xuất |
|
|
186
|
+
| --- | --- | --- |
|
|
187
|
+
| C-001 — auth | tồn tại | **Cập nhật** — thêm responsibility "rate limiting", thêm endpoint `POST /auth/rate-check` |
|
|
188
|
+
| C-003 — payment | chưa có | **Tạo mới** crd + cdd |
|
|
189
|
+
|
|
190
|
+
Với từng component có đề xuất:
|
|
191
|
+
|
|
192
|
+
**Tạo mới** `specs/main/component/{C-XXX}-{component-slug}/crd.md` *(và `cdd.md` cascade ở spec-tech)*
|
|
193
|
+
- Dùng khi integration này là lần đầu tiên giới thiệu component này
|
|
194
|
+
- Auto-pick C-XXX (next available) và slug kebab-case từ context
|
|
195
|
+
- Đề xuất nội dung crd: Role, Responsibilities, Owned Entities, Public Interface, Business Rules, Dependencies — dựa trên spec.md
|
|
169
196
|
|
|
170
|
-
|
|
197
|
+
**Cập nhật** `specs/main/component/{C-XXX}-{component-slug}/crd.md`
|
|
198
|
+
- Dùng khi crd.md đã tồn tại và integration bổ sung thêm responsibility, interface, hoặc business rule
|
|
199
|
+
- Ghi rõ section nào bị touched và delta cụ thể
|
|
171
200
|
|
|
172
|
-
|
|
201
|
+
### feature/{F-XXX}-{feature-name}/frd.md
|
|
202
|
+
|
|
203
|
+
Liệt kê **tất cả** features liên quan đến integration và đánh giá từng cái:
|
|
173
204
|
|
|
174
205
|
| Feature | Status | frd.md | Đề xuất |
|
|
175
206
|
| --- | --- | --- | --- |
|
|
176
207
|
| F-001 — Authentication | In Progress | tồn tại | **Cập nhật** — bổ sung US-003, AC mới về rate limiting |
|
|
177
208
|
| F-002 — User Profile | TODO | chưa có | **Tạo mới** |
|
|
178
|
-
| F-003 — Credit System | Done | tồn tại | Không liên quan |
|
|
179
209
|
|
|
180
|
-
Với từng feature có đề xuất thay đổi
|
|
210
|
+
Với từng feature có đề xuất thay đổi:
|
|
181
211
|
|
|
182
|
-
**Tạo mới** `specs/main/
|
|
212
|
+
**Tạo mới** `specs/main/feature/{F-XXX}-{feature-slug}/frd.md`
|
|
183
213
|
- Dùng khi integration này là lần đầu tiên implement feature này
|
|
184
|
-
- Thư mục đặt tên
|
|
185
|
-
- Nội dung đề xuất:
|
|
214
|
+
- Thư mục đặt tên: `{F-XXX}-{feature-slug}` (ví dụ: `F-001-authentication`)
|
|
215
|
+
- Nội dung đề xuất: User Stories, AC, Components consumed (reference C-XXX) — từ spec.md
|
|
186
216
|
|
|
187
|
-
**Cập nhật** `specs/main/
|
|
217
|
+
**Cập nhật** `specs/main/feature/{F-XXX}-{feature-slug}/frd.md`
|
|
188
218
|
- Dùng khi frd.md đã tồn tại và integration này bổ sung thêm stories hoặc criteria
|
|
189
219
|
- Đọc file frd.md hiện tại, liệt kê các sections và hỏi user muốn update section nào:
|
|
190
220
|
|
|
@@ -193,10 +223,11 @@ frd.md — F-001 Authentication đã tồn tại.
|
|
|
193
223
|
Sections hiện có:
|
|
194
224
|
|
|
195
225
|
[1] Overview
|
|
196
|
-
[2]
|
|
197
|
-
[3]
|
|
198
|
-
[4]
|
|
199
|
-
[5]
|
|
226
|
+
[2] Components Consumed
|
|
227
|
+
[3] Feature-level Acceptance Criteria
|
|
228
|
+
[4] User Stories
|
|
229
|
+
[5] Scope (In Scope / Out of Scope)
|
|
230
|
+
[6] Dependencies
|
|
200
231
|
[A] All — viết lại toàn bộ từ đầu
|
|
201
232
|
|
|
202
233
|
Chọn section cần cập nhật (có thể chọn nhiều, ví dụ: 2 3):
|
|
@@ -225,9 +256,9 @@ Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → c
|
|
|
225
256
|
|
|
226
257
|
Tạo thư mục `specs/integrations/{NNN}-{slug}/` nếu chưa có.
|
|
227
258
|
|
|
228
|
-
Ghi nội dung đã confirm vào `specs/integrations/{NNN}-{slug}/spec.md`.
|
|
259
|
+
Ghi nội dung đã confirm vào `specs/integrations/{NNN}-{slug}/spec.md`. Frontmatter `features` và `components` phải được điền theo những gì đã nhận diện ở Bước 2.
|
|
229
260
|
|
|
230
|
-
Nếu integration này
|
|
261
|
+
Nếu integration này gắn với feature từ prd.md, cập nhật `specs/main/prd.md`: đổi Status của feature từ `TODO` → `In Progress`.
|
|
231
262
|
|
|
232
263
|
Thông báo kết quả:
|
|
233
264
|
```
|
|
@@ -235,7 +266,8 @@ Thông báo kết quả:
|
|
|
235
266
|
{nếu có} ✓ prd.md — F-XXX status cập nhật: TODO → In Progress
|
|
236
267
|
|
|
237
268
|
Bước tiếp theo:
|
|
238
|
-
- Review và
|
|
269
|
+
- Review spec.md và apply Cascade Proposals (nếu có) vào main artifacts thủ công
|
|
270
|
+
- Approve spec.md (đổi status: draft → approved)
|
|
239
271
|
- /spec-tech → thiết kế technical design dựa trên spec.md này
|
|
240
272
|
```
|
|
241
273
|
|
package/skills/spec-prd/SKILL.md
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-prd
|
|
3
|
-
description: Điền hoặc cập nhật prd.md — Product Requirements Document ở product level. Dùng khi prd.md còn là template rỗng hoặc cần review/cập nhật.
|
|
3
|
+
description: Điền hoặc cập nhật prd.md — Product Requirements Document ở product level. Cũng scaffold domain.md skeleton (glossary placeholder + Shared Entities rỗng). Dùng khi prd.md còn là template rỗng hoặc cần review/cập nhật.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# spec-prd
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo nội dung cho `specs/main/prd.md` thông qua interview có cấu trúc. PRD là nguồn sự thật ở product level — nó định nghĩa vấn đề, users, scope, và NFRs trước khi bất kỳ technical decision nào được đưa ra.
|
|
10
|
+
Tạo nội dung cho `specs/main/prd.md` thông qua interview có cấu trúc. PRD là nguồn sự thật ở product level — nó định nghĩa vấn đề, users, scope, features, components, và NFRs trước khi bất kỳ technical decision nào được đưa ra.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Skill này cũng scaffold `specs/main/domain.md` skeleton nếu chưa tồn tại — domain.md sẽ được mọc dần qua cascade từ integrations (glossary terms, shared entities).
|
|
13
|
+
|
|
14
|
+
PRD không chứa: tech stack, implementation details, entity schema, glossary, business rules — những thứ đó thuộc về `sad.md` hoặc `domain.md`.
|
|
13
15
|
|
|
14
16
|
## When to Use
|
|
15
17
|
|
|
@@ -19,8 +21,8 @@ PRD không chứa: tech stack, implementation details, entity schema, hay bất
|
|
|
19
21
|
|
|
20
22
|
## When NOT to Use
|
|
21
23
|
|
|
22
|
-
- Đang muốn thiết kế kiến trúc kỹ thuật → dùng `/spec
|
|
23
|
-
-
|
|
24
|
+
- Đang muốn thiết kế kiến trúc kỹ thuật → dùng `/spec-sad`
|
|
25
|
+
- Cập nhật domain entities cụ thể → đi qua integration (`/spec-new`) và để cascade mechanism handle
|
|
24
26
|
|
|
25
27
|
---
|
|
26
28
|
|
|
@@ -44,8 +46,9 @@ PRD không chứa: tech stack, implementation details, entity schema, hay bất
|
|
|
44
46
|
| 2 | Target Users | ✓ đã có / ✗ trống/thiếu |
|
|
45
47
|
| 3 | Scope | ✓ đã có / ✗ trống/thiếu |
|
|
46
48
|
| 4 | Features | ✓ đã có / ✗ trống/thiếu |
|
|
47
|
-
| 5 |
|
|
48
|
-
| 6 |
|
|
49
|
+
| 5 | Components | ✓ đã có / ✗ trống/thiếu |
|
|
50
|
+
| 6 | Non-Functional Requirements | ✓ đã có / ✗ trống/thiếu |
|
|
51
|
+
| 7 | Business Constraints | ✓ đã có / ✗ trống/thiếu |
|
|
49
52
|
|
|
50
53
|
Một section được coi là **trống/thiếu** nếu: không tồn tại trong file, hoặc chỉ chứa placeholder template (dấu `{}`), hoặc không có dòng nội dung thực.
|
|
51
54
|
|
|
@@ -60,8 +63,9 @@ PRD không chứa: tech stack, implementation details, entity schema, hay bất
|
|
|
60
63
|
[3] Scope ✓ đã có
|
|
61
64
|
[4] Risks ⚠ không có trong template
|
|
62
65
|
[5] Features ✗ chưa có — cần bổ sung
|
|
63
|
-
[6]
|
|
64
|
-
[7]
|
|
66
|
+
[6] Components ✗ chưa có — cần bổ sung
|
|
67
|
+
[7] Non-Functional Req. ✓ đã có
|
|
68
|
+
[8] Business Constraints ✓ đã có
|
|
65
69
|
[A] Interview tất cả sections
|
|
66
70
|
|
|
67
71
|
Chọn số hoặc A:
|
|
@@ -101,11 +105,15 @@ Sau đó hỏi tuần tự, từng phần một — không hỏi tất cả cùn
|
|
|
101
105
|
> Hệ thống cần implement những features gì? Mỗi feature gồm: tên ngắn, mô tả 1 câu (làm gì, cho ai), priority (Must/Should/Could).
|
|
102
106
|
> (Đây sẽ là Feature Index mà các FRD sau này sẽ tham chiếu.)
|
|
103
107
|
|
|
104
|
-
**Phần 5 —
|
|
108
|
+
**Phần 5 — Components:**
|
|
109
|
+
> Hệ thống có những thành phần kỹ thuật (component) nào? Mỗi component gồm: tên ngắn (kebab-case, ví dụ `auth`, `payment`), mô tả 1 câu — component chịu trách nhiệm gì.
|
|
110
|
+
> (Đây là Component Index — agent có thể bỏ trống nếu user chưa rõ; component sẽ được thêm dần qua cascade từ integrations sau này.)
|
|
111
|
+
|
|
112
|
+
**Phần 6 — Non-Functional Requirements:**
|
|
105
113
|
> Có yêu cầu về performance, security, availability, scalability không?
|
|
106
114
|
> Mỗi NFR cần: category, mô tả cụ thể, target đo được, priority (Must/Should/Could).
|
|
107
115
|
|
|
108
|
-
**Phần
|
|
116
|
+
**Phần 7 — Business Constraints:**
|
|
109
117
|
> Có ràng buộc kinh doanh nào không? (deadline, budget, compliance, vendor lock-in, v.v.)
|
|
110
118
|
> Có giả định nào quan trọng cần ghi lại không?
|
|
111
119
|
|
|
@@ -134,15 +142,24 @@ Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → c
|
|
|
134
142
|
|
|
135
143
|
### Bước 5: Save
|
|
136
144
|
|
|
137
|
-
Ghi nội dung đã được confirm
|
|
145
|
+
**5a. Ghi `specs/main/prd.md`** — nội dung đã được confirm, thay thế toàn bộ nội dung cũ.
|
|
146
|
+
|
|
147
|
+
**5b. Scaffold `specs/main/domain.md`** *(chỉ khi file này chưa tồn tại)*:
|
|
148
|
+
|
|
149
|
+
- Copy `.claude/templates/main/domain-template.md` thành `specs/main/domain.md`.
|
|
150
|
+
- Section **Glossary** giữ format bảng rỗng — terms sẽ được thêm dần qua cascade từ integrations.
|
|
151
|
+
- Section **Shared Entities** giữ block placeholder — entities sẽ mọc dần qua cascade khi integration giới thiệu shared entity.
|
|
152
|
+
|
|
153
|
+
Nếu `domain.md` đã tồn tại với nội dung thực → không đụng tới.
|
|
138
154
|
|
|
139
155
|
Thông báo kết quả:
|
|
140
156
|
```
|
|
141
157
|
✓ specs/main/prd.md đã được cập nhật (status: draft)
|
|
158
|
+
{nếu vừa scaffold} ✓ specs/main/domain.md đã được scaffold (skeleton — sẽ mọc dần qua cascade)
|
|
142
159
|
|
|
143
160
|
Bước tiếp theo:
|
|
144
|
-
- /spec-
|
|
145
|
-
- (sau
|
|
161
|
+
- /spec-sad → thiết kế kiến trúc kỹ thuật
|
|
162
|
+
- (sau sad) /spec-new → bắt đầu integration đầu tiên
|
|
146
163
|
```
|
|
147
164
|
|
|
148
165
|
---
|
|
@@ -172,5 +189,7 @@ Trước khi kết thúc, kiểm tra:
|
|
|
172
189
|
- [ ] Mỗi persona có: tên vai trò, mục tiêu, pain point
|
|
173
190
|
- [ ] Out of Scope có ít nhất 1 item với lý do
|
|
174
191
|
- [ ] Features có ít nhất 1 item, mỗi item có ID (F-XXX), tên, mô tả, priority
|
|
192
|
+
- [ ] Components: nếu có item, mỗi item có ID (C-XXX), tên, mô tả ngắn (có thể trống nếu chưa rõ)
|
|
175
193
|
- [ ] Mỗi NFR có target đo được (không phải "nhanh", "bảo mật chung chung")
|
|
194
|
+
- [ ] domain.md tồn tại (đã scaffold skeleton hoặc có nội dung sẵn)
|
|
176
195
|
- [ ] User đã confirm trước khi file được ghi
|
package/skills/spec-sad/SKILL.md
CHANGED
|
@@ -39,10 +39,10 @@ SAD không chứa: feature-level design, business rules, entity details — nh
|
|
|
39
39
|
|
|
40
40
|
**Đọc `specs/main/domain.md`:**
|
|
41
41
|
|
|
42
|
-
- **Chưa tồn tại
|
|
43
|
-
> `domain.md` chưa
|
|
42
|
+
- **Chưa tồn tại** → dừng ngay:
|
|
43
|
+
> `domain.md` chưa được scaffold. Hãy chạy `/spec-prd` trước (skill này scaffold cả `prd.md` và `domain.md` skeleton).
|
|
44
44
|
|
|
45
|
-
- **Đã
|
|
45
|
+
- **Đã tồn tại** → đọc để hiểu: glossary và shared entities (nếu có). Lưu ý `domain.md` có thể chỉ mới là skeleton vì nội dung chi tiết mọc dần qua cascade từ integrations — không cần dừng nếu file mỏng.
|
|
46
46
|
|
|
47
47
|
**Đọc `specs/main/sad.md`:**
|
|
48
48
|
|