spec-lite 1.4.2 → 1.4.3
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 +19 -19
- package/package.json +1 -1
- package/skills/ado-config/SKILL.md +1 -1
- package/skills/ado-create/SKILL.md +7 -7
- package/skills/ado-update/SKILL.md +1 -1
- package/skills/archive/SKILL.md +19 -19
- package/skills/build/SKILL.md +5 -5
- package/skills/plan/SKILL.md +6 -6
- package/skills/review-everything/SKILL.md +9 -9
- package/skills/review-integration/SKILL.md +7 -7
- package/skills/scaffold/SKILL.md +9 -9
- package/skills/spec-brownfield-component/SKILL.md +11 -11
- package/skills/spec-brownfield-feature/SKILL.md +13 -13
- package/skills/spec-brownfield-init/SKILL.md +13 -13
- package/skills/spec-frd/SKILL.md +9 -9
- package/skills/spec-frd-update/SKILL.md +9 -9
- package/skills/spec-new/SKILL.md +11 -11
- package/skills/spec-prd/SKILL.md +10 -10
- package/skills/spec-remove/SKILL.md +27 -27
- package/skills/spec-sad/SKILL.md +6 -6
- package/skills/spec-tech/SKILL.md +16 -16
- package/skills/spec-test/SKILL.md +15 -15
- package/skills/spec-tsd/SKILL.md +10 -10
- package/skills-overview.md +25 -25
- package/templates/main/domain-template.md +1 -1
- package/templates/main/feature/frd-template.md +1 -1
- package/templates/main/prd-template.md +1 -1
|
@@ -7,7 +7,7 @@ description: Discover features từ code, generate frd.md + fdd.md cho từng fe
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo
|
|
10
|
+
Tạo `.specs/main/feature/{F-XXX}-{feature-name}/frd.md` và `fdd.md` cho các features trong brownfield project.
|
|
11
11
|
|
|
12
12
|
Skill này **tự discover** features từ routes, use cases, và test files, sau đó scan sâu để extract user stories, AC, và inter-component flows. Khi hoàn thành, **điền Feature Index vào prd.md**.
|
|
13
13
|
|
|
@@ -33,9 +33,9 @@ Skill này **tự discover** features từ routes, use cases, và test files, sa
|
|
|
33
33
|
**Path:** Nếu có ARGUMENT là path → dùng làm root. Nếu không → CWD.
|
|
34
34
|
|
|
35
35
|
**Load:**
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
36
|
+
- `.specs/main/prd.md` — kiểm tra Component Index đã được điền
|
|
37
|
+
- `.specs/main/domain.md` — đọc Glossary và Shared Entities
|
|
38
|
+
- `.specs/main/component/*/crd.md` — đọc Public Interface của từng component (để cross-reference trong fdd.md)
|
|
39
39
|
|
|
40
40
|
**Kiểm tra preconditions:**
|
|
41
41
|
|
|
@@ -46,7 +46,7 @@ Nếu `prd.md` Component Index còn trống (không có C-XXX entries) → dừn
|
|
|
46
46
|
> Component Index chưa có entries. Hãy chạy `/spec-brownfield-component` trước.
|
|
47
47
|
> fdd.md cần tham chiếu C-XXX để mô tả inter-component flows.
|
|
48
48
|
|
|
49
|
-
Nếu
|
|
49
|
+
Nếu `.specs/main/component/` không có crd.md nào → cảnh báo tương tự và dừng.
|
|
50
50
|
|
|
51
51
|
**Attachments:**
|
|
52
52
|
> Bạn có tài liệu bổ sung nào không? (user stories, test plans, wireframes, existing specs)
|
|
@@ -216,10 +216,10 @@ Với mỗi feature, generate 2 files dùng templates tương ứng:
|
|
|
216
216
|
|
|
217
217
|
```
|
|
218
218
|
Sẽ tạo {N} features ({2N} files):
|
|
219
|
-
✓ specs/main/feature/F-001-user-registration/frd.md (4 NEEDS_CLARIFY)
|
|
220
|
-
✓ specs/main/feature/F-001-user-registration/fdd.md (2 NEEDS_CLARIFY)
|
|
221
|
-
✓ specs/main/feature/F-002-authentication/frd.md (1 NEEDS_CLARIFY)
|
|
222
|
-
✓ specs/main/feature/F-002-authentication/fdd.md (0 NEEDS_CLARIFY)
|
|
219
|
+
✓ .specs/main/feature/F-001-user-registration/frd.md (4 NEEDS_CLARIFY)
|
|
220
|
+
✓ .specs/main/feature/F-001-user-registration/fdd.md (2 NEEDS_CLARIFY)
|
|
221
|
+
✓ .specs/main/feature/F-002-authentication/frd.md (1 NEEDS_CLARIFY)
|
|
222
|
+
✓ .specs/main/feature/F-002-authentication/fdd.md (0 NEEDS_CLARIFY)
|
|
223
223
|
...
|
|
224
224
|
|
|
225
225
|
Ghi tất cả? [y] hoặc review từng file trước [r]:
|
|
@@ -237,7 +237,7 @@ Ghi tất cả? [y] hoặc review từng file trước [r]:
|
|
|
237
237
|
|
|
238
238
|
### Bước 8: Điền Feature Index vào prd.md
|
|
239
239
|
|
|
240
|
-
Sau khi artifacts đã được ghi, update
|
|
240
|
+
Sau khi artifacts đã được ghi, update `.specs/main/prd.md` Feature Index:
|
|
241
241
|
|
|
242
242
|
```
|
|
243
243
|
Sẽ điền Feature Index vào prd.md:
|
|
@@ -267,8 +267,8 @@ Khi apply → đồng thời append entry vào `## Change History` của prd.md
|
|
|
267
267
|
|
|
268
268
|
```
|
|
269
269
|
✓ Generated {N} features:
|
|
270
|
-
specs/main/feature/F-001-user-registration/ (frd.md + fdd.md)
|
|
271
|
-
specs/main/feature/F-002-authentication/ (frd.md + fdd.md)
|
|
270
|
+
.specs/main/feature/F-001-user-registration/ (frd.md + fdd.md)
|
|
271
|
+
.specs/main/feature/F-002-authentication/ (frd.md + fdd.md)
|
|
272
272
|
...
|
|
273
273
|
|
|
274
274
|
✓ prd.md Feature Index: {N} entries đã được điền
|
|
@@ -279,7 +279,7 @@ NEEDS_CLARIFY summary — {total} items:
|
|
|
279
279
|
...
|
|
280
280
|
|
|
281
281
|
Brownfield init hoàn tất! Main artifacts:
|
|
282
|
-
specs/main/
|
|
282
|
+
.specs/main/
|
|
283
283
|
├── prd.md (Component Index: {N} | Feature Index: {N})
|
|
284
284
|
├── domain.md (Glossary: {N} terms | Shared Entities: {N})
|
|
285
285
|
├── sad.md
|
|
@@ -7,7 +7,7 @@ description: Khởi tạo main artifacts (prd.md, domain.md, sad.md) cho brownfi
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo
|
|
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
11
|
|
|
12
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
13
|
|
|
@@ -17,9 +17,9 @@ Mỗi file output được sinh ra từ template tương ứng — đọc templa
|
|
|
17
17
|
|
|
18
18
|
| Output file | Template |
|
|
19
19
|
| --- | --- |
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
20
|
+
| `.specs/main/prd.md` | `templates/main/prd-template.md` |
|
|
21
|
+
| `.specs/main/domain.md` | `templates/main/domain-template.md` |
|
|
22
|
+
| `.specs/main/sad.md` | `templates/main/sad-template.md` |
|
|
23
23
|
|
|
24
24
|
Giữ nguyên cấu trúc section và frontmatter từ template. Điền nội dung thu thập được từ scan và interview vào đúng vị trí.
|
|
25
25
|
|
|
@@ -32,7 +32,7 @@ Thông tin không thể detect từ code được đánh dấu nhất quán:
|
|
|
32
32
|
## When to Use
|
|
33
33
|
|
|
34
34
|
- Onboarding một brownfield project vào SDD workflow
|
|
35
|
-
-
|
|
35
|
+
- `.specs/main/prd.md` chưa có hoặc còn trống
|
|
36
36
|
|
|
37
37
|
## When NOT to Use
|
|
38
38
|
|
|
@@ -63,14 +63,14 @@ Load tất cả attachments trước khi scan. Dùng làm context bổ sung tron
|
|
|
63
63
|
|
|
64
64
|
### Bước 2: Kiểm tra existing specs
|
|
65
65
|
|
|
66
|
-
Kiểm tra
|
|
66
|
+
Kiểm tra `.specs/main/prd.md`, `.specs/main/domain.md`, `.specs/main/sad.md`:
|
|
67
67
|
|
|
68
68
|
Nếu một trong ba đã có nội dung thực → cảnh báo:
|
|
69
69
|
|
|
70
70
|
```
|
|
71
71
|
⚠ File đã có nội dung:
|
|
72
|
-
- specs/main/prd.md
|
|
73
|
-
- specs/main/sad.md
|
|
72
|
+
- .specs/main/prd.md
|
|
73
|
+
- .specs/main/sad.md
|
|
74
74
|
|
|
75
75
|
Skill này sẽ overwrite các file trên. Tiếp tục? [y/n]
|
|
76
76
|
```
|
|
@@ -253,7 +253,7 @@ Hiển thị draft từng file lần lượt. Với mỗi file:
|
|
|
253
253
|
|
|
254
254
|
```
|
|
255
255
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
256
|
-
DRAFT: specs/main/{file}
|
|
256
|
+
DRAFT: .specs/main/{file}
|
|
257
257
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
258
258
|
{nội dung draft}
|
|
259
259
|
|
|
@@ -270,7 +270,7 @@ Confirm? [y] Bỏ qua [n] Chỉnh sửa [e]:
|
|
|
270
270
|
|
|
271
271
|
### Bước 9: Save
|
|
272
272
|
|
|
273
|
-
Tạo
|
|
273
|
+
Tạo `.specs/main/` nếu chưa có. Ghi các files đã được confirm.
|
|
274
274
|
|
|
275
275
|
**Change History:** Append entry vào section `## Change History` cuối mỗi file vừa ghi (`prd.md`, `domain.md`, `sad.md`) theo `conventions.md` §5.5:
|
|
276
276
|
|
|
@@ -281,9 +281,9 @@ Tạo `specs/main/` nếu chưa có. Ghi các files đã được confirm.
|
|
|
281
281
|
```
|
|
282
282
|
|
|
283
283
|
```
|
|
284
|
-
✓ specs/main/prd.md (Component Index và Feature Index: placeholder — chưa có)
|
|
285
|
-
✓ specs/main/domain.md (Glossary: {n} terms | Shared Entities: trống — sẽ mọc qua cascade)
|
|
286
|
-
✓ specs/main/sad.md
|
|
284
|
+
✓ .specs/main/prd.md (Component Index và Feature Index: placeholder — chưa có)
|
|
285
|
+
✓ .specs/main/domain.md (Glossary: {n} terms | Shared Entities: trống — sẽ mọc qua cascade)
|
|
286
|
+
✓ .specs/main/sad.md
|
|
287
287
|
|
|
288
288
|
NEEDS_CLARIFY summary — {total} items cần làm rõ:
|
|
289
289
|
prd.md: {n} — [Problem Statement, Business Constraints, ...]
|
package/skills/spec-frd/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: Author MỚI frd.md (Feature Requirements Document) trực tiếp
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Author
|
|
10
|
+
Author `.specs/main/feature/{F-XXX}-{feature-slug}/frd.md` trực tiếp qua interview — **spec-first ở feature level**, do **BA** chạy trước khi bất kỳ integration nào bắt đầu.
|
|
11
11
|
|
|
12
12
|
`frd.md` là **what to build** của một feature: Overview, User Flows, Feature AC, User Stories, Verification Rules, Scope, Dependencies. Đây là baseline ổn định, **author một lần** — mọi thay đổi sau đó đi qua `/spec-new` (delta cascade).
|
|
13
13
|
|
|
@@ -59,7 +59,7 @@ Có nguồn → trích baseline cho từng section frd (overview, flows, stories
|
|
|
59
59
|
|
|
60
60
|
### Bước 1: Xác định feature
|
|
61
61
|
|
|
62
|
-
**Precondition:** đọc
|
|
62
|
+
**Precondition:** đọc `.specs/main/prd.md`. Nếu không tồn tại / template rỗng → dừng:
|
|
63
63
|
> `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước.
|
|
64
64
|
|
|
65
65
|
`/spec-frd` là skill **CREATE-only, đúng một feature mỗi lần chạy**. Xác định feature mục tiêu qua ba gate — phải pass cả ba mới vào interview.
|
|
@@ -103,7 +103,7 @@ Chọn feature để author frd:
|
|
|
103
103
|
|
|
104
104
|
#### 1c. Create-only gate — frd.md CHƯA tồn tại
|
|
105
105
|
|
|
106
|
-
Kiểm tra
|
|
106
|
+
Kiểm tra `.specs/main/feature/{F-XXX}-*/frd.md`.
|
|
107
107
|
|
|
108
108
|
- **Chưa tồn tại** → tiếp Bước 2 (author mới).
|
|
109
109
|
- **Đã tồn tại** → **DỪNG**, redirect `/spec-new`:
|
|
@@ -117,10 +117,10 @@ Kiểm tra `specs/main/feature/{F-XXX}-*/frd.md`.
|
|
|
117
117
|
### Bước 2: Load context
|
|
118
118
|
|
|
119
119
|
Load:
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
120
|
+
- `.specs/main/prd.md` — Problem Statement, Target Users (personas), Scope, **row của feature này** trong Feature Index (tên, mô tả, priority), Component Index, **cột ADO** (nếu feature có ticket → lưu lại để spec.md sau này không tạo duplicate).
|
|
121
|
+
- `.specs/main/domain.md` — Glossary + Shared Entities liên quan.
|
|
122
|
+
- `.specs/main/sad.md` — bảng Components (góc nhìn kiến trúc, để biết C-XXX nào đã có boundary).
|
|
123
|
+
- `.specs/main/component/{C-XXX}-*/crd.md` — Public Interface của các component khả năng feature sẽ dùng (nếu đã tồn tại).
|
|
124
124
|
|
|
125
125
|
Tóm tắt context + surface assumptions:
|
|
126
126
|
|
|
@@ -222,7 +222,7 @@ Chỉ ghi file sau khi user confirm. Yêu cầu chỉnh → cập nhật draft
|
|
|
222
222
|
|
|
223
223
|
### Bước 7: Save
|
|
224
224
|
|
|
225
|
-
**7a. Ghi
|
|
225
|
+
**7a. Ghi `.specs/main/feature/{F-XXX}-{slug}/frd.md`** — tạo thư mục nếu chưa có. Status `draft` (lifecycle riêng của artifact).
|
|
226
226
|
|
|
227
227
|
Slug feature lấy từ tên trong prd Feature Index, kebab-case (ví dụ F-001 "Authentication" → `F-001-authentication`).
|
|
228
228
|
|
|
@@ -258,7 +258,7 @@ Và append Change History entry vào prd.md (theo `conventions.md` §5.5):
|
|
|
258
258
|
**7d. Thông báo kết quả:**
|
|
259
259
|
|
|
260
260
|
```
|
|
261
|
-
✓ specs/main/feature/{F-XXX}-{slug}/frd.md đã được tạo (status: draft)
|
|
261
|
+
✓ .specs/main/feature/{F-XXX}-{slug}/frd.md đã được tạo (status: draft)
|
|
262
262
|
|
|
263
263
|
{nếu có} Component candidate cần carve (chuyển cho architect / integration):
|
|
264
264
|
- {tên đề xuất} — {vai trò}
|
|
@@ -7,7 +7,7 @@ description: Migrate frd.md hiện có lên cấu trúc template mới nhất
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Migrate các file
|
|
10
|
+
Migrate các file `.specs/main/feature/{F-XXX}-{slug}/frd.md` hiện có sang **format mới nhất** của [templates/main/feature/frd-template.md](../../templates/main/feature/frd-template.md).
|
|
11
11
|
|
|
12
12
|
Skill này **chỉ làm migration mechanical + propose** — không phải BA interview. Mọi quyết định nội dung mới (Verification Rules content) đều cần user approve trước khi ghi.
|
|
13
13
|
|
|
@@ -67,7 +67,7 @@ Chạy `git status --porcelain`. Nếu output không rỗng (có file modified /
|
|
|
67
67
|
Hãy commit hoặc stash thay đổi hiện tại trước khi chạy `/spec-frd-update`, rồi chạy lại.
|
|
68
68
|
|
|
69
69
|
Files dirty:
|
|
70
|
-
M specs/main/feature/F-001-auth/frd.md
|
|
70
|
+
M .specs/main/feature/F-001-auth/frd.md
|
|
71
71
|
?? notes.md
|
|
72
72
|
```
|
|
73
73
|
|
|
@@ -80,7 +80,7 @@ Nếu repo không phải git repo → cảnh báo và yêu cầu confirm:
|
|
|
80
80
|
|
|
81
81
|
### Bước 1: Discover & classify
|
|
82
82
|
|
|
83
|
-
Quét
|
|
83
|
+
Quét `.specs/main/feature/*/frd.md`. Với mỗi file:
|
|
84
84
|
|
|
85
85
|
1. Parse headings và frontmatter.
|
|
86
86
|
2. Run detection cho V1–V8.
|
|
@@ -123,11 +123,11 @@ Với mỗi FRD đã chọn, load các file sau (chỉ những gì cần thiết
|
|
|
123
123
|
|
|
124
124
|
| File | Bắt buộc | Mục đích |
|
|
125
125
|
|---|---|---|
|
|
126
|
-
|
|
|
126
|
+
| `.specs/main/feature/{F-XXX}-{slug}/frd.md` | ✓ | File cần migrate |
|
|
127
127
|
| [templates/main/feature/frd-template.md](../../templates/main/feature/frd-template.md) | ✓ | Target structure — copy text cho V2/V3/V5 |
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
|
|
|
128
|
+
| `.specs/main/feature/{F-XXX}-{slug}/fdd.md` | nếu tồn tại | Cascade target cho V4 (AC→FAC rename) |
|
|
129
|
+
| `.specs/main/feature/{F-XXX}-{slug}/tsd.md` | nếu tồn tại | Cascade target cho V4 |
|
|
130
|
+
| `.specs/main/domain.md` (Shared Entities block) | optional | Cho V6 — match field name với entity glossary để pick semantic type consistent |
|
|
131
131
|
|
|
132
132
|
**KHÔNG load:**
|
|
133
133
|
- `conventions.md` — template đã self-contained, load là thừa
|
|
@@ -183,7 +183,7 @@ Với mỗi FRD đã chọn, load các file sau (chỉ những gì cần thiết
|
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
#### 4.3 Scan cascade references
|
|
186
|
-
- Grep toàn
|
|
186
|
+
- Grep toàn `.specs/` cho từng ID cũ.
|
|
187
187
|
- **CRITICAL**: chỉ remap những match THUỘC Feature AC (Bước 4.1 list). KHÔNG đụng Story AC trùng namespace `AC-F{NNN}-{seq}` — đây là string overlap nhưng khác counter.
|
|
188
188
|
- Tạo bảng impact:
|
|
189
189
|
```
|
|
@@ -358,7 +358,7 @@ Cho mỗi FRD đã migrate:
|
|
|
358
358
|
|
|
359
359
|
Nếu artifact chưa có section `## Change History` (vì template cũ) → tạo section mới ở cuối file rồi append entry. Đây cũng là một migration vector ngầm — đảm bảo mọi main artifact sau migration đều có Change History section.
|
|
360
360
|
|
|
361
|
-
Rollback (nếu user phát hiện sai sau khi skill xong): `git checkout -- specs/main/feature/{F-XXX}-{slug}/` để revert toàn bộ feature dir, hoặc `git restore -p` để revert per-hunk.
|
|
361
|
+
Rollback (nếu user phát hiện sai sau khi skill xong): `git checkout -- .specs/main/feature/{F-XXX}-{slug}/` để revert toàn bộ feature dir, hoặc `git restore -p` để revert per-hunk.
|
|
362
362
|
|
|
363
363
|
Append vào [changelogs.md](../../changelogs.md) `## [Unreleased]`:
|
|
364
364
|
|
package/skills/spec-new/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: Tạo spec.md cho một integration mới thông qua interview có
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo `spec.md` cho một integration mới trong
|
|
10
|
+
Tạo `spec.md` cho một integration mới trong `.specs/integrations/{NNN}-{slug}/`.
|
|
11
11
|
|
|
12
12
|
`spec.md` là functional spec — định nghĩa **what to build**: vấn đề, requirements, acceptance criteria, out of scope. Không chứa technical design.
|
|
13
13
|
|
|
@@ -33,7 +33,7 @@ Tạo `spec.md` cho một integration mới trong `specs/integrations/{NNN}-{slu
|
|
|
33
33
|
|
|
34
34
|
**Nếu không có ARGUMENT:**
|
|
35
35
|
|
|
36
|
-
Đọc
|
|
36
|
+
Đọc `.specs/main/prd.md`. Nếu file không tồn tại hoặc là template rỗng → dừng:
|
|
37
37
|
> `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước.
|
|
38
38
|
|
|
39
39
|
Đọc toàn bộ bảng Features. Hiển thị **tất cả** features kèm trạng thái — không lọc — để thấy rõ feature nào có FRD cần update:
|
|
@@ -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
|
|
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>`.
|
|
@@ -88,10 +88,10 @@ Lưu lại lựa chọn section.
|
|
|
88
88
|
|
|
89
89
|
Từ raw requirement, agent xác định features và components liên quan, rồi load các file sau:
|
|
90
90
|
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
91
|
+
- `.specs/main/prd.md` — đọc Problem Statement, Target Users, Scope, Feature Index, Component Index; **đặc biệt ghi nhận cột `ADO` trong bảng Features** — nếu feature đã có ticket ID thì lưu lại `{feature_id → ado_ticket_id, ado_ticket_title, ado_ticket_url}`
|
|
92
|
+
- `.specs/main/domain.md` — đọc Glossary và Shared Entities
|
|
93
|
+
- `.specs/main/feature/{F-XXX}-{slug}/frd.md` — cho mỗi feature liên quan (nếu file đã tồn tại)
|
|
94
|
+
- `.specs/main/component/{C-XXX}-{slug}/crd.md` — cho mỗi component bị touched (nếu file đã tồn tại)
|
|
95
95
|
|
|
96
96
|
Tóm tắt context và surface assumptions:
|
|
97
97
|
|
|
@@ -150,11 +150,11 @@ Từ title của integration, sinh slug:
|
|
|
150
150
|
- Nếu từ prd.md: dùng `{feature-id}-{feature-slug}`, ví dụ: `f001-authentication`
|
|
151
151
|
|
|
152
152
|
Xác định số thứ tự (`NNN`):
|
|
153
|
-
- Liệt kê các thư mục hiện có trong
|
|
153
|
+
- Liệt kê các thư mục hiện có trong `.specs/integrations/` theo pattern `{NNN}-*`
|
|
154
154
|
- Lấy số lớn nhất hiện có và cộng thêm 1, format 3 chữ số (ví dụ: `001`, `002`, `012`)
|
|
155
155
|
- Nếu chưa có thư mục nào → bắt đầu từ `001`
|
|
156
156
|
|
|
157
|
-
Output path:
|
|
157
|
+
Output path: `.specs/integrations/{NNN}-{slug}/spec.md`
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
@@ -339,7 +339,7 @@ Chỉ tiến hành Bước 7 sau khi user confirm. Nếu user yêu cầu chỉnh
|
|
|
339
339
|
|
|
340
340
|
### Bước 7: Save + Auto-cascade
|
|
341
341
|
|
|
342
|
-
Tạo thư mục
|
|
342
|
+
Tạo thư mục `.specs/integrations/{NNN}-{slug}/` nếu chưa có.
|
|
343
343
|
|
|
344
344
|
**[7.1] Ghi spec.md** với status `approved` (không phải `draft` — human đã confirm ở Bước 6 chính là approval). Frontmatter `features` và `components` phải được điền theo những gì đã nhận diện ở Bước 2.
|
|
345
345
|
|
|
@@ -391,7 +391,7 @@ Cho mỗi artifact:
|
|
|
391
391
|
**[7.4] Thông báo kết quả:**
|
|
392
392
|
|
|
393
393
|
```
|
|
394
|
-
✓ specs/integrations/{NNN}-{slug}/spec.md đã được tạo (status: approved)
|
|
394
|
+
✓ .specs/integrations/{NNN}-{slug}/spec.md đã được tạo (status: approved)
|
|
395
395
|
|
|
396
396
|
Auto-cascade applied:
|
|
397
397
|
✓ prd.md — {summary}
|
package/skills/spec-prd/SKILL.md
CHANGED
|
@@ -7,15 +7,15 @@ description: Điền hoặc cập nhật prd.md — Product Requirements Documen
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo nội dung cho
|
|
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
|
-
Skill này cũng scaffold
|
|
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
13
|
|
|
14
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`.
|
|
15
15
|
|
|
16
16
|
## When to Use
|
|
17
17
|
|
|
18
|
-
-
|
|
18
|
+
- `.specs/main/prd.md` chưa có nội dung hoặc vẫn còn là template
|
|
19
19
|
- Cần bổ sung hoặc cập nhật một phần của PRD hiện tại
|
|
20
20
|
- Requirements thay đổi và PRD cần được đồng bộ lại
|
|
21
21
|
|
|
@@ -118,9 +118,9 @@ Nếu không có nguồn → bỏ qua, interview từ đầu như bình thườn
|
|
|
118
118
|
|
|
119
119
|
### Bước 1: Kiểm tra preconditions
|
|
120
120
|
|
|
121
|
-
Đọc
|
|
121
|
+
Đọc `.specs/main/prd.md`:
|
|
122
122
|
|
|
123
|
-
- **File không tồn tại** → tạo thư mục
|
|
123
|
+
- **File không tồn tại** → tạo thư mục `.specs/main/` (nếu chưa có) rồi tiến hành Bước 2 (full interview).
|
|
124
124
|
|
|
125
125
|
- **File là template rỗng** → tiến hành Bước 2 (full interview).
|
|
126
126
|
|
|
@@ -240,11 +240,11 @@ Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → c
|
|
|
240
240
|
|
|
241
241
|
### Bước 5: Save
|
|
242
242
|
|
|
243
|
-
**5a. Ghi
|
|
243
|
+
**5a. Ghi `.specs/main/prd.md`** — nội dung đã được confirm, thay thế toàn bộ nội dung cũ.
|
|
244
244
|
|
|
245
|
-
**5b. Scaffold
|
|
245
|
+
**5b. Scaffold `.specs/main/domain.md`** *(chỉ khi file này chưa tồn tại)*:
|
|
246
246
|
|
|
247
|
-
- Copy `.claude/templates/main/domain-template.md` thành
|
|
247
|
+
- Copy `.claude/templates/main/domain-template.md` thành `.specs/main/domain.md`.
|
|
248
248
|
- Section **Glossary** giữ format bảng rỗng — terms sẽ được thêm dần qua cascade từ integrations.
|
|
249
249
|
- Section **Shared Entities** giữ block placeholder — entities sẽ mọc dần qua cascade khi integration giới thiệu shared entity.
|
|
250
250
|
|
|
@@ -264,8 +264,8 @@ Nếu `domain.md` đã tồn tại với nội dung thực → không đụng t
|
|
|
264
264
|
|
|
265
265
|
Thông báo kết quả:
|
|
266
266
|
```
|
|
267
|
-
✓ specs/main/prd.md đã được cập nhật (status: draft)
|
|
268
|
-
{nếu vừa scaffold} ✓ specs/main/domain.md đã được scaffold (skeleton — sẽ mọc dần qua cascade)
|
|
267
|
+
✓ .specs/main/prd.md đã được cập nhật (status: draft)
|
|
268
|
+
{nếu vừa scaffold} ✓ .specs/main/domain.md đã được scaffold (skeleton — sẽ mọc dần qua cascade)
|
|
269
269
|
|
|
270
270
|
Bước tiếp theo:
|
|
271
271
|
- /spec-sad → thiết kế kiến trúc kỹ thuật
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spec-remove
|
|
3
|
-
description: Remove một feature toàn diện — tạo removal integration với Code Inventory, Reverse Dependency Audit, reverse-TDD test strategy, và Finalize Plan (move feature artifacts sang specs/removed/ + đóng ADO tickets) như task cuối trong todo.md. Nhận F-XXX làm argument.
|
|
3
|
+
description: Remove một feature toàn diện — tạo removal integration với Code Inventory, Reverse Dependency Audit, reverse-TDD test strategy, và Finalize Plan (move feature artifacts sang .specs/removed/ + đóng ADO tickets) như task cuối trong todo.md. Nhận F-XXX làm argument.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# spec-remove
|
|
@@ -12,7 +12,7 @@ Tạo removal integration cho 1 feature đã tồn tại. Output là `spec.md` v
|
|
|
12
12
|
- **Code Inventory** — code, route, DB, feature flag, config liên quan
|
|
13
13
|
- **Reverse Dependency Audit** — ai còn reference, an toàn xoá hay không
|
|
14
14
|
- **Test Strategy** — reverse-TDD (regression test "thing is gone")
|
|
15
|
-
- **Finalize Plan** — move feature artifacts sang
|
|
15
|
+
- **Finalize Plan** — move feature artifacts sang `.specs/removed/` + đóng ADO tickets, được DEV chạy như task cuối trong `todo.md`
|
|
16
16
|
- **Changes blocks** — `[REMOVE]` markers cho mọi artifact bị touched
|
|
17
17
|
|
|
18
18
|
Skill **không** sinh `tech.md` / `plan.md` / `todo.md`. Sau khi `spec.md` được approve, chạy `/spec-tech` → `/plan` → `/build` như flow thường. `spec.md` đủ giàu để 3 skill đó hoạt động không cần modification.
|
|
@@ -33,8 +33,8 @@ Skill **không** sinh `tech.md` / `plan.md` / `todo.md`. Sau khi `spec.md` đư
|
|
|
33
33
|
|
|
34
34
|
## Prerequisites
|
|
35
35
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
36
|
+
- `.specs/main/feature/{F-XXX}-*/frd.md` tồn tại
|
|
37
|
+
- `.specs/main/prd.md` có row của feature trong Feature Index
|
|
38
38
|
- (Optional) `.claude/ado.yaml` cấu hình nếu muốn đóng ADO tickets ở finalize step
|
|
39
39
|
|
|
40
40
|
---
|
|
@@ -49,7 +49,7 @@ Argument BẮT BUỘC là Feature ID dạng `F-XXX` (3 chữ số). Nếu argume
|
|
|
49
49
|
spec-remove cần Feature ID. Ví dụ: /spec-remove F-001
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
Tìm thư mục
|
|
52
|
+
Tìm thư mục `.specs/main/feature/F-XXX-*/`:
|
|
53
53
|
- 0 matches → báo lỗi feature không tồn tại, dừng.
|
|
54
54
|
- ≥ 2 matches → báo lỗi data inconsistency (nhiều thư mục cùng prefix), dừng.
|
|
55
55
|
- 1 match → tiếp.
|
|
@@ -71,20 +71,20 @@ F-XXX đã có status `removed`. Bạn muốn:
|
|
|
71
71
|
Đọc các file sau:
|
|
72
72
|
|
|
73
73
|
**Bắt buộc:**
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
74
|
+
- `.specs/main/feature/{F-XXX}-*/frd.md` — full content
|
|
75
|
+
- `.specs/main/feature/{F-XXX}-*/fdd.md` — nếu tồn tại
|
|
76
|
+
- `.specs/main/prd.md` — Feature Index (capture ADO ticket ID cho F-XXX), Component Index, NFR
|
|
77
|
+
- `.specs/main/domain.md` — Glossary + Shared Entities (xác định entity nào owned bởi component thuộc F-XXX)
|
|
78
78
|
|
|
79
79
|
**Components used by F-XXX:**
|
|
80
80
|
|
|
81
81
|
Trích từ `frd.md` section `Components Used` + `fdd.md` section `Components Touched`. Với mỗi C-YYY:
|
|
82
|
-
-
|
|
83
|
-
-
|
|
82
|
+
- `.specs/main/component/{C-YYY}-*/crd.md`
|
|
83
|
+
- `.specs/main/component/{C-YYY}-*/cdd.md` — nếu tồn tại
|
|
84
84
|
|
|
85
85
|
**Reverse dependency scan:**
|
|
86
86
|
|
|
87
|
-
Với mỗi C-YYY mà F-XXX sử dụng, grep
|
|
87
|
+
Với mỗi C-YYY mà F-XXX sử dụng, grep `.specs/main/feature/F-*/frd.md` (trừ F-XXX) tìm references tới C-YYY. Mọi feature khác có reference → load `frd.md` của feature đó để hiểu nó dùng C-YYY làm gì.
|
|
88
88
|
|
|
89
89
|
Output context summary cho user:
|
|
90
90
|
|
|
@@ -243,9 +243,9 @@ Sau khi migration deploy xong, chạy lại /spec-remove F-XXX.
|
|
|
243
243
|
|
|
244
244
|
Xác định slug và NNN giống `/spec-new`:
|
|
245
245
|
- Slug: `remove-{f-xxx-slug}` (ví dụ `remove-f001-authentication`)
|
|
246
|
-
- NNN: max của thư mục hiện có trong
|
|
246
|
+
- NNN: max của thư mục hiện có trong `.specs/integrations/` + 1, format 3 chữ số.
|
|
247
247
|
|
|
248
|
-
Output path:
|
|
248
|
+
Output path: `.specs/integrations/{NNN}-remove-{f-xxx-slug}/spec.md`
|
|
249
249
|
|
|
250
250
|
Cấu trúc spec.md:
|
|
251
251
|
|
|
@@ -319,20 +319,20 @@ Regression tests **được giữ lại** trong codebase như guardrail — futu
|
|
|
319
319
|
|
|
320
320
|
1. **Move feature artifacts:**
|
|
321
321
|
```bash
|
|
322
|
-
mkdir -p specs/removed
|
|
323
|
-
mv specs/main/feature/{F-XXX}-{slug}/ specs/removed/{F-XXX}-{slug}/
|
|
322
|
+
mkdir -p .specs/removed
|
|
323
|
+
mv .specs/main/feature/{F-XXX}-{slug}/ .specs/removed/{F-XXX}-{slug}/
|
|
324
324
|
```
|
|
325
325
|
|
|
326
|
-
2. **Append Change History** vào
|
|
326
|
+
2. **Append Change History** vào `.specs/removed/{F-XXX}-{slug}/frd.md` (nếu file còn tồn tại sau move):
|
|
327
327
|
```markdown
|
|
328
328
|
### {YYYY-MM-DD} — [{NNN}-remove-{slug}](../../integrations/{NNN}-remove-{slug}/spec.md) — removed
|
|
329
|
-
- **Feature decommissioned**: moved from specs/main/feature/ to specs/removed/
|
|
329
|
+
- **Feature decommissioned**: moved from .specs/main/feature/ to .specs/removed/
|
|
330
330
|
- Reason: {lý do từ Problem Statement}
|
|
331
331
|
```
|
|
332
332
|
|
|
333
333
|
3. **Update prd.md Feature Index:**
|
|
334
334
|
- Row F-XXX: status → `Removed`
|
|
335
|
-
- Add note column hoặc inline: `(see specs/removed/{F-XXX}-{slug}/)`
|
|
335
|
+
- Add note column hoặc inline: `(see .specs/removed/{F-XXX}-{slug}/)`
|
|
336
336
|
|
|
337
337
|
4. **Close ADO tickets** (nếu prd.md có ADO ticket ID cho F-XXX):
|
|
338
338
|
- Feature ticket → state `Removed`
|
|
@@ -342,8 +342,8 @@ Regression tests **được giữ lại** trong codebase như guardrail — futu
|
|
|
342
342
|
- Nếu ADO state name khác (vd "Closed") → xem `.claude/ado.yaml` hoặc fetch từ `wit_get_work_item_type`
|
|
343
343
|
|
|
344
344
|
5. **Verify finalize:**
|
|
345
|
-
- `ls specs/main/feature/ | grep {F-XXX}` → không còn match
|
|
346
|
-
- `ls specs/removed/{F-XXX}-{slug}/` → tồn tại
|
|
345
|
+
- `ls .specs/main/feature/ | grep {F-XXX}` → không còn match
|
|
346
|
+
- `ls .specs/removed/{F-XXX}-{slug}/` → tồn tại
|
|
347
347
|
- prd.md grep `F-XXX` → status `Removed`
|
|
348
348
|
- ADO ticket fetch → state khớp
|
|
349
349
|
|
|
@@ -356,7 +356,7 @@ Regression tests **được giữ lại** trong codebase như guardrail — futu
|
|
|
356
356
|
|
|
357
357
|
#### Features (Feature Index)
|
|
358
358
|
- Row [MODIFY status]: `F-XXX` {current status} → `Removed`
|
|
359
|
-
- {nếu có note column} Row [MODIFY note]: `F-XXX` add note "see specs/removed/"
|
|
359
|
+
- {nếu có note column} Row [MODIFY note]: `F-XXX` add note "see .specs/removed/"
|
|
360
360
|
|
|
361
361
|
#### Components (Component Index) — chỉ component exclusive với F-XXX
|
|
362
362
|
- Row [MODIFY status]: `C-YYY` {current status} → `Removed`
|
|
@@ -367,7 +367,7 @@ Regression tests **được giữ lại** trong codebase như guardrail — futu
|
|
|
367
367
|
**Format reference:** [frd-template.md](../../templates/main/feature/frd-template.md)
|
|
368
368
|
|
|
369
369
|
<!--
|
|
370
|
-
Đánh dấu mọi item bằng [REMOVE]. File sẽ bị move sang specs/removed/ ở Finalize step
|
|
370
|
+
Đánh dấu mọi item bằng [REMOVE]. File sẽ bị move sang .specs/removed/ ở Finalize step
|
|
371
371
|
nhưng cascade content vẫn ghi vào file gốc trước (để Change History entry được apply).
|
|
372
372
|
-->
|
|
373
373
|
|
|
@@ -462,7 +462,7 @@ Draft trên đã đúng chưa?
|
|
|
462
462
|
|
|
463
463
|
Sau khi confirm, agent sẽ auto-apply Changes blocks lên main artifacts.
|
|
464
464
|
File feature artifacts (frd/fdd) KHÔNG bị move ngay — chỉ apply [REMOVE] markers
|
|
465
|
-
+ Change History entry. Move sang specs/removed/ là task cuối trong todo.md,
|
|
465
|
+
+ Change History entry. Move sang .specs/removed/ là task cuối trong todo.md,
|
|
466
466
|
do /build chạy sau khi mọi deletion task khác xong.
|
|
467
467
|
```
|
|
468
468
|
|
|
@@ -500,7 +500,7 @@ Giống `/spec-new` Bước 7, nhưng với removal-specific extensions.
|
|
|
500
500
|
**[8.5] Thông báo kết quả:**
|
|
501
501
|
|
|
502
502
|
```
|
|
503
|
-
✓ specs/integrations/{NNN}-remove-{f-xxx-slug}/spec.md đã được tạo (status: approved, removal: true)
|
|
503
|
+
✓ .specs/integrations/{NNN}-remove-{f-xxx-slug}/spec.md đã được tạo (status: approved, removal: true)
|
|
504
504
|
|
|
505
505
|
Auto-cascade applied:
|
|
506
506
|
✓ prd.md — F-XXX status → Removed; {N} components status → Removed
|
|
@@ -509,7 +509,7 @@ Auto-cascade applied:
|
|
|
509
509
|
✓ feature/F-XXX-*/frd.md — all items [REMOVE], status → removed
|
|
510
510
|
✓ feature/F-XXX-*/fdd.md — all items [REMOVE], status → removed
|
|
511
511
|
|
|
512
|
-
⚠ File feature/F-XXX-*/ vẫn ở specs/main/feature/. Sẽ được move sang specs/removed/ ở task cuối todo.md.
|
|
512
|
+
⚠ File feature/F-XXX-*/ vẫn ở .specs/main/feature/. Sẽ được move sang .specs/removed/ ở task cuối todo.md.
|
|
513
513
|
⚠ ADO tickets giữ nguyên state. Sẽ được close ở task cuối todo.md (cần .claude/ado.yaml).
|
|
514
514
|
|
|
515
515
|
Bước tiếp theo:
|
|
@@ -583,6 +583,6 @@ Sau khi user confirm (Bước 8):
|
|
|
583
583
|
- [ ] Auto-cascade chạy đúng thứ tự prd → domain → sad → crd → cdd → frd → fdd
|
|
584
584
|
- [ ] Mọi artifact bị touched có Change History entry
|
|
585
585
|
- [ ] prd.md row F-XXX status = Removed (đổi ngay sau approve)
|
|
586
|
-
- [ ] File feature/F-XXX-*/ VẪN ở specs/main/feature/ (chưa move — chỉ move ở Finalize task)
|
|
586
|
+
- [ ] File feature/F-XXX-*/ VẪN ở .specs/main/feature/ (chưa move — chỉ move ở Finalize task)
|
|
587
587
|
- [ ] ADO tickets KHÔNG bị transition (chưa close — chỉ close ở Finalize task)
|
|
588
588
|
- [ ] Notification cuối ghi rõ 2 ⚠ về việc folder + ADO chưa được động vào
|
package/skills/spec-sad/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: Điền hoặc cập nhật sad.md — System Architecture Document
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo nội dung cho
|
|
10
|
+
Tạo nội dung cho `.specs/main/sad.md` thông qua interview có cấu trúc. SAD là bản đồ kỹ thuật của hệ thống — nó định nghĩa các quyết định kiến trúc, tech stack, và đặc biệt là **Architectural Guardrails**: các nguyên tắc bất biến mà mọi agent phải tuân theo khi sinh `tech.md`.
|
|
11
11
|
|
|
12
12
|
SAD không chứa: feature-level design, business rules, entity details — những thứ đó thuộc về `domain.md` và `fdd.md`.
|
|
13
13
|
|
|
@@ -30,21 +30,21 @@ SAD không chứa: feature-level design, business rules, entity details — nh
|
|
|
30
30
|
|
|
31
31
|
### Bước 1: Kiểm tra preconditions
|
|
32
32
|
|
|
33
|
-
**Đọc
|
|
33
|
+
**Đọc `.specs/main/prd.md`:**
|
|
34
34
|
|
|
35
35
|
- **Chưa tồn tại hoặc là template** → dừng ngay:
|
|
36
36
|
> `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước.
|
|
37
37
|
|
|
38
38
|
- **Đã có nội dung** → đọc để lấy: NFRs (performance, security, availability targets), business constraints, scope.
|
|
39
39
|
|
|
40
|
-
**Đọc
|
|
40
|
+
**Đọc `.specs/main/domain.md`:**
|
|
41
41
|
|
|
42
42
|
- **Chưa tồn tại** → dừng ngay:
|
|
43
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
|
-
**Đọc
|
|
47
|
+
**Đọc `.specs/main/sad.md`:**
|
|
48
48
|
|
|
49
49
|
- **Chưa tồn tại** → tiến hành Bước 2 (full interview).
|
|
50
50
|
|
|
@@ -167,7 +167,7 @@ Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → c
|
|
|
167
167
|
|
|
168
168
|
### Bước 5: Save
|
|
169
169
|
|
|
170
|
-
Ghi nội dung đã được confirm vào
|
|
170
|
+
Ghi nội dung đã được confirm vào `.specs/main/sad.md`.
|
|
171
171
|
|
|
172
172
|
**Change History:** Append entry vào section `## Change History` cuối `sad.md` (theo `conventions.md` §5.5):
|
|
173
173
|
|
|
@@ -181,7 +181,7 @@ Nếu chạy lần thứ N (sad.md đã có) → operation = `update`, body li
|
|
|
181
181
|
|
|
182
182
|
Thông báo kết quả:
|
|
183
183
|
```
|
|
184
|
-
✓ specs/main/sad.md đã được cập nhật (status: draft)
|
|
184
|
+
✓ .specs/main/sad.md đã được cập nhật (status: draft)
|
|
185
185
|
|
|
186
186
|
Bước tiếp theo:
|
|
187
187
|
- /spec-new {feature-name} → định nghĩa requirements của từng feature
|