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
package/README.md
CHANGED
|
@@ -29,17 +29,17 @@ Chạy một lần để bootstrap main artifacts, sau đó vào Integration Pip
|
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
#### `/spec-prd`
|
|
32
|
-
Tạo hoặc cập nhật
|
|
32
|
+
Tạo hoặc cập nhật `.specs/main/prd.md` thông qua interview có cấu trúc. Đồng thời scaffold `.specs/main/domain.md` skeleton. Nhận tùy chọn một nguồn baseline (path/@file/paste proposal/BRD) để pre-fill interview.
|
|
33
33
|
|
|
34
34
|
Sections: Problem Statement · Target Users · Scope · Features · Components · Non-Functional Requirements · Business Constraints
|
|
35
35
|
|
|
36
36
|
#### `/spec-sad`
|
|
37
|
-
Tạo hoặc cập nhật
|
|
37
|
+
Tạo hoặc cập nhật `.specs/main/sad.md`. Yêu cầu `prd.md` và `domain.md` đã tồn tại.
|
|
38
38
|
|
|
39
39
|
Sections: Architectural Style · System Overview · Tech Stack · Cross-Cutting Concerns · Inter-Service Communication · Infrastructure Overview · Architectural Guardrails
|
|
40
40
|
|
|
41
41
|
#### `/spec-frd [F-XXX]` *(tùy chọn)*
|
|
42
|
-
BA author
|
|
42
|
+
BA author `.specs/main/feature/{F-XXX}-*/frd.md` trực tiếp qua interview, **trước** khi DEV bắt đầu integration — spec-first ở feature level. Cặp greenfield đối xứng với `/spec-brownfield-feature`. Nhận F-XXX (hoặc chọn từ Feature Index) + tùy chọn nguồn baseline (path/@file/paste).
|
|
43
43
|
|
|
44
44
|
**Hai gate input (làm chặt):** (1) **Single-feature** — nguồn liên quan đúng 1 feature; xác định >1 → dừng, mô tả rõ lý do tách, redirect `/spec-prd`. (2) **Create-only** — frd.md đã tồn tại → dừng, redirect `/spec-new` (thay đổi feature đã spec đi qua integration để delta cascade + tech/test). Feature mới đơn lẻ chưa có trong Index → skill offer **register một row vào prd Features** rồi author.
|
|
45
45
|
|
|
@@ -114,19 +114,19 @@ Mỗi requirement mới đều đi qua pipeline này.
|
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
#### `/spec-new [requirement]`
|
|
117
|
-
Tạo
|
|
117
|
+
Tạo `.specs/integrations/{slug}/spec.md` cho một integration mới.
|
|
118
118
|
|
|
119
119
|
- Có argument → dùng trực tiếp làm raw requirement
|
|
120
120
|
- Không có argument → hiển thị danh sách features TODO từ `prd.md` để chọn
|
|
121
121
|
|
|
122
122
|
#### `/spec-tech [number]`
|
|
123
|
-
Tạo
|
|
123
|
+
Tạo `.specs/integrations/{slug}/tech.md` sau khi `spec.md` được approve. Chạy bởi **DEV**.
|
|
124
124
|
|
|
125
125
|
- Có argument → chọn integration theo số thứ tự luôn
|
|
126
126
|
- Không có argument → hiển thị danh sách tất cả integrations
|
|
127
127
|
|
|
128
128
|
#### `/spec-test [number]`
|
|
129
|
-
Tạo
|
|
129
|
+
Tạo `.specs/integrations/{slug}/test.md` sau khi `spec.md` được approve. Chạy bởi **QC**, **song song / độc lập** với `/spec-tech` — cả hai chỉ phụ thuộc `spec.md`. Mechanical derive Test Scenarios + Test Cases từ frd.md (Flow → TS, US/AC → Functional TC, VR → positive + negative, FAC → Feature AC TC), priority deterministic. Cascade lên `feature/{F-XXX}/tsd.md` qua Changes blocks. Gate: integration phải có `features:` non-empty (component-thuần không áp dụng).
|
|
130
130
|
|
|
131
131
|
#### `/plan`
|
|
132
132
|
Tạo `plan.md` và `todo.md` từ `spec.md` + `tech.md`.
|
|
@@ -143,7 +143,7 @@ Review implementation sau `/build` theo năm trục: correctness, readability, a
|
|
|
143
143
|
#### `/review-everything`
|
|
144
144
|
Review toàn bộ codebase ở **project level** đối chiếu với `prd.md` / `domain.md` / `sad.md`. Spawn 5 subagent song song theo năm axis của `code-review-and-quality`.
|
|
145
145
|
|
|
146
|
-
Sau khi có findings, hỏi user severity tier muốn xử lý (Critical / Critical+Required / +Optional / All / Bỏ qua). Nếu chọn fix → gom selected findings thành raw requirement và auto-invoke `/spec-new` để tạo integration. Findings full snapshot được lưu vào
|
|
146
|
+
Sau khi có findings, hỏi user severity tier muốn xử lý (Critical / Critical+Required / +Optional / All / Bỏ qua). Nếu chọn fix → gom selected findings thành raw requirement và auto-invoke `/spec-new` để tạo integration. Findings full snapshot được lưu vào `.specs/integrations/{NNN}-{slug}/review-findings.md`.
|
|
147
147
|
|
|
148
148
|
---
|
|
149
149
|
|
|
@@ -162,20 +162,20 @@ Pre-flight yêu cầu git working tree clean — rollback dùng `git checkout --
|
|
|
162
162
|
|
|
163
163
|
| Command | Output |
|
|
164
164
|
|---------|--------|
|
|
165
|
-
| `/spec-prd` |
|
|
166
|
-
| `/spec-sad` |
|
|
167
|
-
| `/spec-frd` |
|
|
168
|
-
| `/spec-brownfield-init` |
|
|
169
|
-
| `/spec-brownfield-component` |
|
|
170
|
-
| `/spec-brownfield-feature` |
|
|
171
|
-
| `/spec-tsd` |
|
|
165
|
+
| `/spec-prd` | `.specs/main/prd.md`, `.specs/main/domain.md` (skeleton) |
|
|
166
|
+
| `/spec-sad` | `.specs/main/sad.md` |
|
|
167
|
+
| `/spec-frd` | `.specs/main/feature/{F-XXX}-*/frd.md` *(+ register feature row vào `prd.md` nếu feature mới)* |
|
|
168
|
+
| `/spec-brownfield-init` | `.specs/main/prd.md`, `.specs/main/domain.md`, `.specs/main/sad.md` |
|
|
169
|
+
| `/spec-brownfield-component` | `.specs/main/component/{C-XXX}-*/crd.md + cdd.md` |
|
|
170
|
+
| `/spec-brownfield-feature` | `.specs/main/feature/{F-XXX}-*/frd.md + fdd.md` |
|
|
171
|
+
| `/spec-tsd` | `.specs/main/feature/{F-XXX}-*/tsd.md` |
|
|
172
172
|
| `/spec-frd-update` | *(modify in-place `feature/*/frd.md` + cascade refs)* |
|
|
173
|
-
| `/spec-new` |
|
|
174
|
-
| `/spec-tech` |
|
|
175
|
-
| `/spec-test` |
|
|
176
|
-
| `/plan` |
|
|
173
|
+
| `/spec-new` | `.specs/integrations/{slug}/spec.md` |
|
|
174
|
+
| `/spec-tech` | `.specs/integrations/{slug}/tech.md` |
|
|
175
|
+
| `/spec-test` | `.specs/integrations/{slug}/test.md`, cascade: `feature/{F-XXX}/tsd.md` |
|
|
176
|
+
| `/plan` | `.specs/integrations/{slug}/plan.md`, `todo.md` |
|
|
177
177
|
| `/build` | *(implements tasks từ `plan.md`/`todo.md`)* |
|
|
178
178
|
| `/review-integration` | *(findings report — không tạo file)* |
|
|
179
|
-
| `/review-everything` |
|
|
179
|
+
| `/review-everything` | `.specs/integrations/{NNN}-{slug}/review-findings.md` *(qua /spec-new)* |
|
|
180
180
|
|
|
181
181
|
Feature artifacts (`frd.md`) ở greenfield có thể author trước bằng `/spec-frd`, hoặc mọc dần qua **cascade proposals** từ integrations (`/spec-new` fallback). Component artifacts (`crd.md`/`cdd.md`) ở greenfield chỉ mọc qua cascade — không có skill author trực tiếp (`/spec-frd` chỉ reference component, không tạo crd/cdd).
|
package/package.json
CHANGED
|
@@ -176,7 +176,7 @@ options:
|
|
|
176
176
|
```
|
|
177
177
|
|
|
178
178
|
Nếu user chọn **"Dùng nội dung từ spec artifact"**:
|
|
179
|
-
- Hỏi đường dẫn file (ví dụ
|
|
179
|
+
- Hỏi đường dẫn file (ví dụ `.specs/integrations/001-implement-auth/spec.md`)
|
|
180
180
|
- Đọc file → dùng toàn bộ nội dung làm description của Epic (format Markdown)
|
|
181
181
|
|
|
182
182
|
Nếu user chọn **"Tự nhập mô tả"**:
|
|
@@ -12,7 +12,7 @@ description: Tạo Feature và User Story tickets trên ADO từ spec.md của m
|
|
|
12
12
|
## Prerequisites
|
|
13
13
|
|
|
14
14
|
- `.claude/ado.yaml` phải tồn tại và có `epic.id` (chạy `/ado-config` nếu chưa có)
|
|
15
|
-
- `frd.md` tương ứng phải tồn tại trong
|
|
15
|
+
- `frd.md` tương ứng phải tồn tại trong `.specs/main/features/` cho mỗi feature
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -49,7 +49,7 @@ Không resolve được ADO identity ID cho <email>. Kiểm tra lại PAT token
|
|
|
49
49
|
|
|
50
50
|
### Bước 2: Chọn integration
|
|
51
51
|
|
|
52
|
-
List tất cả thư mục trong
|
|
52
|
+
List tất cả thư mục trong `.specs/integrations/` trừ `000-scaffold`. Với mỗi thư mục, đọc frontmatter của `spec.md` để lấy `title` và `status`.
|
|
53
53
|
|
|
54
54
|
Hỏi user bằng `AskUserQuestion`:
|
|
55
55
|
|
|
@@ -120,7 +120,7 @@ Thực hiện tuần tự với từng Feature chưa có ADO ticket:
|
|
|
120
120
|
|
|
121
121
|
**5.1 Tìm frd.md:**
|
|
122
122
|
|
|
123
|
-
Map `F-NNN` → tìm thư mục
|
|
123
|
+
Map `F-NNN` → tìm thư mục `.specs/main/features/` bắt đầu bằng `NNN-`. Đọc `frd.md` trong thư mục đó.
|
|
124
124
|
|
|
125
125
|
Nếu không tìm thấy `frd.md` → cảnh báo, dùng phần mô tả Feature từ `spec.md` làm description thay thế.
|
|
126
126
|
|
|
@@ -226,7 +226,7 @@ Sau khi tất cả tickets đã được tạo, cập nhật `spec.md`:
|
|
|
226
226
|
|
|
227
227
|
### Bước 8: Cập nhật prd.md
|
|
228
228
|
|
|
229
|
-
Mở
|
|
229
|
+
Mở `.specs/main/prd.md`. Tìm bảng `## Features`.
|
|
230
230
|
|
|
231
231
|
**Nếu bảng chưa có cột `ADO`:** Thêm cột vào header và separator row:
|
|
232
232
|
|
|
@@ -284,9 +284,9 @@ Tìm section `## ADO Tickets` trong file.
|
|
|
284
284
|
✓ #12348 — [SDLC-TEST] [Đăng ký / Đăng nhập] - US-F001-003 — Đăng xuất → F-001 #12345
|
|
285
285
|
|
|
286
286
|
Files đã cập nhật:
|
|
287
|
-
✓ specs/integrations/001-implement-auth/spec.md
|
|
288
|
-
✓ specs/main/features/001-auth/frd.md
|
|
289
|
-
✓ specs/main/prd.md
|
|
287
|
+
✓ .specs/integrations/001-implement-auth/spec.md
|
|
288
|
+
✓ .specs/main/features/001-auth/frd.md
|
|
289
|
+
✓ .specs/main/prd.md
|
|
290
290
|
|
|
291
291
|
{nếu có lỗi tạo ticket}
|
|
292
292
|
✗ US-F001-004 — ... → tạo thất bại: <lý do>
|
|
@@ -92,7 +92,7 @@ Nếu `environments` trống hoặc không tồn tại trong file → dừng:
|
|
|
92
92
|
|
|
93
93
|
### Bước 2: Chọn integration
|
|
94
94
|
|
|
95
|
-
List tất cả thư mục trong
|
|
95
|
+
List tất cả thư mục trong `.specs/integrations/` trừ `000-scaffold`. Với mỗi thư mục, đọc frontmatter của `spec.md` để lấy `title` và `status`.
|
|
96
96
|
|
|
97
97
|
Hỏi user bằng `AskUserQuestion`:
|
|
98
98
|
|
package/skills/archive/SKILL.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: archive
|
|
3
|
-
description: Archive một integration từ specs/integrations sang specs/archive. Dùng khi một integration đã hoàn thành hoặc không còn active và cần được lưu trữ ra khỏi thư mục làm việc chính.
|
|
3
|
+
description: Archive một integration từ .specs/integrations sang .specs/archive. Dùng khi một integration đã hoàn thành hoặc không còn active và cần được lưu trữ ra khỏi thư mục làm việc chính.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# archive
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Di chuyển một integration từ
|
|
10
|
+
Di chuyển một integration từ `.specs/integrations/` sang `.specs/archive/` để dọn dẹp thư mục làm việc chính trong khi vẫn giữ nguyên toàn bộ nội dung integration đó.
|
|
11
11
|
|
|
12
12
|
## When to Use
|
|
13
13
|
|
|
14
14
|
- Integration đã hoàn thành (Done) và không cần active nữa
|
|
15
15
|
- Integration bị cancel hoặc deferred vô thời hạn
|
|
16
|
-
- Muốn dọn dẹp
|
|
16
|
+
- Muốn dọn dẹp `.specs/integrations/` khỏi các integration cũ
|
|
17
17
|
|
|
18
18
|
## When NOT to Use
|
|
19
19
|
|
|
@@ -26,9 +26,9 @@ Di chuyển một integration từ `specs/integrations/` sang `specs/archive/`
|
|
|
26
26
|
|
|
27
27
|
### Bước 1: Kiểm tra thư mục archive
|
|
28
28
|
|
|
29
|
-
Kiểm tra
|
|
29
|
+
Kiểm tra `.specs/archive/` đã tồn tại chưa.
|
|
30
30
|
|
|
31
|
-
**Nếu chưa tồn tại** → tạo thư mục
|
|
31
|
+
**Nếu chưa tồn tại** → tạo thư mục `.specs/archive/`.
|
|
32
32
|
|
|
33
33
|
**Nếu đã tồn tại** → tiếp tục.
|
|
34
34
|
|
|
@@ -36,12 +36,12 @@ Kiểm tra `specs/archive/` đã tồn tại chưa.
|
|
|
36
36
|
|
|
37
37
|
### Bước 2: Liệt kê integrations
|
|
38
38
|
|
|
39
|
-
Quét
|
|
39
|
+
Quét `.specs/integrations/` để tìm tất cả các integration (mỗi integration là một thư mục con).
|
|
40
40
|
|
|
41
41
|
**Nếu không có integration nào:**
|
|
42
42
|
|
|
43
43
|
```
|
|
44
|
-
Không có integration nào trong specs/integrations/.
|
|
44
|
+
Không có integration nào trong .specs/integrations/.
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Dừng lại.
|
|
@@ -49,7 +49,7 @@ Dừng lại.
|
|
|
49
49
|
**Nếu có integrations**, hiển thị danh sách dạng numbered list, kèm trạng thái nếu đọc được từ `spec.md` (frontmatter `status` hoặc heading):
|
|
50
50
|
|
|
51
51
|
```
|
|
52
|
-
Integrations trong specs/integrations/:
|
|
52
|
+
Integrations trong .specs/integrations/:
|
|
53
53
|
|
|
54
54
|
[1] 001-user-authentication (approved)
|
|
55
55
|
[2] 002-payment-integration (draft)
|
|
@@ -70,8 +70,8 @@ Sau khi user chọn, hiển thị xác nhận trước khi di chuyển:
|
|
|
70
70
|
```
|
|
71
71
|
Sẽ archive các integration sau:
|
|
72
72
|
|
|
73
|
-
specs/integrations/001-user-authentication/ → specs/archive/001-user-authentication/
|
|
74
|
-
specs/integrations/003-notification-service/ → specs/archive/003-notification-service/
|
|
73
|
+
.specs/integrations/001-user-authentication/ → .specs/archive/001-user-authentication/
|
|
74
|
+
.specs/integrations/003-notification-service/ → .specs/archive/003-notification-service/
|
|
75
75
|
|
|
76
76
|
Xác nhận? (yes/no)
|
|
77
77
|
```
|
|
@@ -84,13 +84,13 @@ Nếu user không confirm → hủy, không làm gì.
|
|
|
84
84
|
|
|
85
85
|
Với mỗi integration đã được confirm:
|
|
86
86
|
|
|
87
|
-
- Di chuyển toàn bộ thư mục
|
|
87
|
+
- Di chuyển toàn bộ thư mục `.specs/integrations/{slug}/` sang `.specs/archive/{slug}/`
|
|
88
88
|
- Giữ nguyên toàn bộ cấu trúc thư mục và file bên trong
|
|
89
89
|
|
|
90
|
-
Nếu
|
|
90
|
+
Nếu `.specs/archive/{slug}/` đã tồn tại (trùng tên) → cảnh báo:
|
|
91
91
|
|
|
92
92
|
```
|
|
93
|
-
⚠ specs/archive/001-user-authentication/ đã tồn tại. Bỏ qua integration này để tránh ghi đè.
|
|
93
|
+
⚠ .specs/archive/001-user-authentication/ đã tồn tại. Bỏ qua integration này để tránh ghi đè.
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
Và bỏ qua integration đó, tiếp tục với các integration còn lại.
|
|
@@ -103,14 +103,14 @@ Thông báo kết quả:
|
|
|
103
103
|
|
|
104
104
|
```
|
|
105
105
|
✓ Đã archive:
|
|
106
|
-
specs/archive/001-user-authentication/
|
|
107
|
-
specs/archive/003-notification-service/
|
|
106
|
+
.specs/archive/001-user-authentication/
|
|
107
|
+
.specs/archive/003-notification-service/
|
|
108
108
|
|
|
109
109
|
{nếu có lỗi}
|
|
110
110
|
⚠ Bỏ qua (đã tồn tại):
|
|
111
|
-
specs/archive/005-foo/
|
|
111
|
+
.specs/archive/005-foo/
|
|
112
112
|
|
|
113
|
-
specs/integrations/ hiện còn {N} integration(s).
|
|
113
|
+
.specs/integrations/ hiện còn {N} integration(s).
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
---
|
|
@@ -119,7 +119,7 @@ specs/integrations/ hiện còn {N} integration(s).
|
|
|
119
119
|
|
|
120
120
|
Trước khi di chuyển:
|
|
121
121
|
|
|
122
|
-
- [ ]
|
|
122
|
+
- [ ] `.specs/archive/` đã tồn tại (tạo nếu chưa có)
|
|
123
123
|
- [ ] User đã chọn ít nhất 1 integration
|
|
124
124
|
- [ ] User đã confirm trước khi di chuyển
|
|
125
|
-
- [ ] Không ghi đè nếu slug đã tồn tại trong
|
|
125
|
+
- [ ] Không ghi đè nếu slug đã tồn tại trong `.specs/archive/`
|
package/skills/build/SKILL.md
CHANGED
|
@@ -17,13 +17,13 @@ Invoke `incremental-implementation` và `test-driven-development` cùng nhau cho
|
|
|
17
17
|
|
|
18
18
|
**Nếu có ARGUMENT:**
|
|
19
19
|
- Parse argument: có thể là số thứ tự (`2`, `002`) hoặc slug (`002-implement-todo`)
|
|
20
|
-
- Quét
|
|
20
|
+
- Quét `.specs/integrations/*/todo.md`, tìm integration khớp với argument
|
|
21
21
|
- Nếu không tìm thấy → báo lỗi:
|
|
22
22
|
> Không tìm thấy integration khớp với "{argument}". Kiểm tra lại tên hoặc số thứ tự.
|
|
23
|
-
- Nếu tìm thấy → dùng
|
|
23
|
+
- Nếu tìm thấy → dùng `.specs/integrations/{slug}/` làm working integration, bắt đầu luôn
|
|
24
24
|
|
|
25
25
|
**Nếu không có ARGUMENT:**
|
|
26
|
-
- Quét
|
|
26
|
+
- Quét `.specs/integrations/*/todo.md`, liệt kê tất cả integrations có todo.md, đánh dấu tiến độ:
|
|
27
27
|
|
|
28
28
|
```
|
|
29
29
|
Integrations:
|
|
@@ -40,7 +40,7 @@ Chọn số integration:
|
|
|
40
40
|
|
|
41
41
|
### Bước 0a: Gate check — plan.md phải approved
|
|
42
42
|
|
|
43
|
-
Đọc frontmatter của
|
|
43
|
+
Đọc frontmatter của `.specs/integrations/{slug}/plan.md`.
|
|
44
44
|
|
|
45
45
|
Nếu `plan.md` chưa tồn tại:
|
|
46
46
|
|
|
@@ -59,7 +59,7 @@ Nếu `plan.md` tồn tại nhưng `status` **không phải** `approved`:
|
|
|
59
59
|
> ⛔ `plan.md` của integration **{slug}** chưa được approve (status hiện tại: `{status}`).
|
|
60
60
|
>
|
|
61
61
|
> Để tiếp tục:
|
|
62
|
-
> 1. Review
|
|
62
|
+
> 1. Review `.specs/integrations/{slug}/plan.md`
|
|
63
63
|
> 2. Đổi `status: draft` → `status: approved` trong frontmatter
|
|
64
64
|
>
|
|
65
65
|
> Sau khi approve xong, chạy lại `/build`.
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -29,14 +29,14 @@ Mọi quyết định về sizing, slicing đều thuộc về `planning-and-tas
|
|
|
29
29
|
|
|
30
30
|
**Nếu có ARGUMENT:**
|
|
31
31
|
- Parse argument: có thể là số thứ tự (`2`, `002`) hoặc slug (`002-implement-todo`)
|
|
32
|
-
- Quét
|
|
32
|
+
- Quét `.specs/integrations/*/`, tìm integration khớp với argument
|
|
33
33
|
- Nếu không tìm thấy → báo lỗi:
|
|
34
34
|
> Không tìm thấy integration khớp với "{argument}". Kiểm tra lại tên hoặc số thứ tự.
|
|
35
35
|
- Nếu tìm thấy → dùng integration đó, bắt đầu luôn
|
|
36
36
|
|
|
37
37
|
**Nếu không có ARGUMENT:**
|
|
38
38
|
|
|
39
|
-
Quét
|
|
39
|
+
Quét `.specs/integrations/`. Liệt kê tất cả integrations:
|
|
40
40
|
|
|
41
41
|
```
|
|
42
42
|
Integrations:
|
|
@@ -55,7 +55,7 @@ Nếu plan.md / todo.md đã tồn tại → hỏi trước khi ghi đè.
|
|
|
55
55
|
|
|
56
56
|
### Bước 1b: Gate check — spec.md và tech.md phải approved
|
|
57
57
|
|
|
58
|
-
Đọc frontmatter của
|
|
58
|
+
Đọc frontmatter của `.specs/integrations/{slug}/spec.md` và `.specs/integrations/{slug}/tech.md`.
|
|
59
59
|
|
|
60
60
|
Nếu `tech.md` chưa tồn tại → coi như `status: missing`.
|
|
61
61
|
|
|
@@ -83,9 +83,9 @@ Nếu cả hai đều `approved` → tiếp tục sang Bước 2.
|
|
|
83
83
|
|
|
84
84
|
Load:
|
|
85
85
|
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
86
|
+
- `.specs/integrations/{slug}/spec.md` — Requirements, Acceptance Criteria (ghi chú số AC và IDs)
|
|
87
|
+
- `.specs/integrations/{slug}/tech.md` — Technical Design, Interface Changes, Data Model Changes, Implementation Notes
|
|
88
|
+
- `.specs/main/domain.md` — Entities và Business Rules liên quan
|
|
89
89
|
|
|
90
90
|
Surface tóm tắt để planning-and-task-breakdown có đủ context:
|
|
91
91
|
|
|
@@ -35,9 +35,9 @@ Khác với `/review-integration` (chạy sau `/build`, đối chiếu với spe
|
|
|
35
35
|
|
|
36
36
|
Kiểm tra các file sau tồn tại và **có nội dung** (không phải template rỗng):
|
|
37
37
|
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
38
|
+
- `.specs/main/prd.md`
|
|
39
|
+
- `.specs/main/domain.md`
|
|
40
|
+
- `.specs/main/sad.md`
|
|
41
41
|
|
|
42
42
|
Nếu thiếu hoặc rỗng → dừng:
|
|
43
43
|
|
|
@@ -65,7 +65,7 @@ CONTEXT
|
|
|
65
65
|
|
|
66
66
|
SOURCE SCOPE
|
|
67
67
|
- Roots: src/, packages/api/, …
|
|
68
|
-
- Excluded: node_modules/, dist/, .claude/, specs/
|
|
68
|
+
- Excluded: node_modules/, dist/, .claude/, .specs/
|
|
69
69
|
|
|
70
70
|
Tiếp tục review? (y/n)
|
|
71
71
|
```
|
|
@@ -175,7 +175,7 @@ options:
|
|
|
175
175
|
description: "Không tạo integration. Findings vẫn được lưu nếu cần tham chiếu sau."
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
-
Nếu user chọn "Bỏ qua" → ghi findings ra
|
|
178
|
+
Nếu user chọn "Bỏ qua" → ghi findings ra `.specs/main/review/{YYYY-MM-DD-HHmm}.md` (tạo thư mục nếu chưa có) rồi dừng.
|
|
179
179
|
|
|
180
180
|
Nếu user chọn một tier → tiếp Bước 6.
|
|
181
181
|
|
|
@@ -212,7 +212,7 @@ Gọi `Skill` tool: `skill=spec-new`, `args={raw requirement ở Bước 6}`.
|
|
|
212
212
|
1. Nhận ARGUMENT làm raw requirement (bỏ qua nhánh "chọn từ prd.md").
|
|
213
213
|
2. Load context (prd / domain / frd / crd liên quan).
|
|
214
214
|
3. Interview 4 phần (Problem Statement, Requirements, Acceptance Criteria, Out of Scope) — agent **gợi ý sẵn** dựa trên findings, user chỉnh.
|
|
215
|
-
4. Sinh
|
|
215
|
+
4. Sinh `.specs/integrations/{NNN}-{slug}/spec.md` + cascade lên main artifacts.
|
|
216
216
|
|
|
217
217
|
**Khi `/spec-new` đề xuất slug**, gợi ý mặc định:
|
|
218
218
|
- `review-{YYYY-MM-DD}` — ngắn, có ngày để truy ngược review nào.
|
|
@@ -222,12 +222,12 @@ Gọi `Skill` tool: `skill=spec-new`, `args={raw requirement ở Bước 6}`.
|
|
|
222
222
|
|
|
223
223
|
### Bước 8: Sau khi /spec-new tạo xong integration → lưu findings file
|
|
224
224
|
|
|
225
|
-
`/spec-new` ghi
|
|
225
|
+
`/spec-new` ghi `.specs/integrations/{NNN}-{slug}/spec.md`. Đọc lại path đó để biết `{NNN}-{slug}`.
|
|
226
226
|
|
|
227
227
|
Ghi **toàn bộ findings** (không chỉ selected — giữ full để tham chiếu sau) vào:
|
|
228
228
|
|
|
229
229
|
```
|
|
230
|
-
specs/integrations/{NNN}-{slug}/review-findings.md
|
|
230
|
+
.specs/integrations/{NNN}-{slug}/review-findings.md
|
|
231
231
|
```
|
|
232
232
|
|
|
233
233
|
Nội dung:
|
|
@@ -270,7 +270,7 @@ Thông báo:
|
|
|
270
270
|
|
|
271
271
|
Findings: {N} total ({C} Critical · {R} Required · {O} Optional · {Ni} Nit · {F} FYI)
|
|
272
272
|
Selected: {tier} → {K} findings
|
|
273
|
-
Integration: specs/integrations/{NNN}-{slug}/
|
|
273
|
+
Integration: .specs/integrations/{NNN}-{slug}/
|
|
274
274
|
├── spec.md (đã tạo bởi /spec-new + cascade)
|
|
275
275
|
└── review-findings.md (full snapshot)
|
|
276
276
|
|
|
@@ -11,10 +11,10 @@ Invoke `code-review-and-quality` để review toàn bộ thay đổi sau `/build
|
|
|
11
11
|
|
|
12
12
|
Trước khi bắt đầu review, load context từ working integration:
|
|
13
13
|
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
14
|
+
1. `.specs/integrations/{slug}/spec.md` — yêu cầu nghiệp vụ, acceptance criteria
|
|
15
|
+
2. `.specs/integrations/{slug}/tech.md` — thiết kế kỹ thuật, API contract, data model
|
|
16
|
+
3. `.specs/integrations/{slug}/plan.md` — task breakdown và acceptance criteria chi tiết
|
|
17
|
+
4. `.specs/integrations/{slug}/todo.md` — task nào đã được implement (`[x]`)
|
|
18
18
|
|
|
19
19
|
Chạy lệnh sau để lấy thay đổi cần review — diff từ điểm branch tách ra, không phải từ tip của base branch:
|
|
20
20
|
|
|
@@ -25,7 +25,7 @@ git diff $(git merge-base HEAD $BASE)...HEAD
|
|
|
25
25
|
|
|
26
26
|
## Xác định integration
|
|
27
27
|
|
|
28
|
-
**Nếu có ARGUMENT:** Parse số thứ tự (`2`, `002`) hoặc slug (`002-implement-todo`). Quét
|
|
28
|
+
**Nếu có ARGUMENT:** Parse số thứ tự (`2`, `002`) hoặc slug (`002-implement-todo`). Quét `.specs/integrations/*/todo.md`, dùng integration khớp.
|
|
29
29
|
|
|
30
30
|
**Nếu không có ARGUMENT:** Liệt kê integrations có task đã done, cho user chọn.
|
|
31
31
|
|
|
@@ -45,7 +45,7 @@ Nhóm các findings thành tasks cụ thể có thể implement được. Mỗi
|
|
|
45
45
|
|
|
46
46
|
Lấy short SHA hiện tại: `git rev-parse --short HEAD`.
|
|
47
47
|
|
|
48
|
-
Ghi findings vào
|
|
48
|
+
Ghi findings vào `.specs/integrations/{slug}/techdebt.md`.
|
|
49
49
|
|
|
50
50
|
Nếu file chưa tồn tại, tạo mới từ `.claude/templates/integrations/techdebt-template.md`, điền `slug`, `title`, `created`.
|
|
51
51
|
|
|
@@ -141,7 +141,7 @@ Sau khi cập nhật xong plan.md và todo.md, invoke ngay `/build` để thực
|
|
|
141
141
|
Thông báo:
|
|
142
142
|
|
|
143
143
|
```
|
|
144
|
-
Findings đã được lưu vào specs/integrations/{slug}/techdebt.md.
|
|
144
|
+
Findings đã được lưu vào .specs/integrations/{slug}/techdebt.md.
|
|
145
145
|
Chạy /review-integration lại hoặc /build khi sẵn sàng xử lý.
|
|
146
146
|
```
|
|
147
147
|
|
package/skills/scaffold/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: Khởi tạo project scaffold dựa trên sad.md — tạo plan.md
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Đọc
|
|
10
|
+
Đọc `.specs/main/sad.md`, phân rã thành plan.md và todo.md cho bước khởi tạo project, sau đó thực thi từng task theo thứ tự.
|
|
11
11
|
|
|
12
12
|
Khác với `/plan` — skill này không dừng lại sau khi sinh plan. Sau khi user confirm, nó execute luôn.
|
|
13
13
|
|
|
@@ -18,7 +18,7 @@ Khác với `/plan` — skill này không dừng lại sau khi sinh plan. Sau kh
|
|
|
18
18
|
|
|
19
19
|
## When NOT to Use
|
|
20
20
|
|
|
21
|
-
-
|
|
21
|
+
- `.specs/main/sad.md` chưa có → chạy `/spec-sad` trước
|
|
22
22
|
- Project đã được khởi tạo rồi → implement trực tiếp
|
|
23
23
|
|
|
24
24
|
---
|
|
@@ -27,14 +27,14 @@ Khác với `/plan` — skill này không dừng lại sau khi sinh plan. Sau kh
|
|
|
27
27
|
|
|
28
28
|
### Bước 1: Kiểm tra preconditions
|
|
29
29
|
|
|
30
|
-
Đọc
|
|
30
|
+
Đọc `.specs/main/sad.md`:
|
|
31
31
|
|
|
32
32
|
- **Không tồn tại hoặc là template** → dừng ngay:
|
|
33
33
|
> `sad.md` chưa có nội dung. Hãy chạy `/spec-sad` trước.
|
|
34
34
|
|
|
35
35
|
- **Đã có nội dung** → tiếp tục.
|
|
36
36
|
|
|
37
|
-
Kiểm tra
|
|
37
|
+
Kiểm tra `.specs/integrations/000-scaffold/`:
|
|
38
38
|
|
|
39
39
|
- **Không có plan.md và todo.md** → tiếp tục Bước 2 (sinh mới).
|
|
40
40
|
|
|
@@ -214,11 +214,11 @@ Chỉ tiếp tục sau khi user confirm. Nếu cần chỉnh → cập nhật dr
|
|
|
214
214
|
|
|
215
215
|
### Bước 5: Ghi file
|
|
216
216
|
|
|
217
|
-
Tạo thư mục
|
|
217
|
+
Tạo thư mục `.specs/integrations/000-scaffold/` nếu chưa có.
|
|
218
218
|
|
|
219
219
|
Ghi:
|
|
220
|
-
-
|
|
221
|
-
-
|
|
220
|
+
- `.specs/integrations/000-scaffold/plan.md`
|
|
221
|
+
- `.specs/integrations/000-scaffold/todo.md`
|
|
222
222
|
|
|
223
223
|
---
|
|
224
224
|
|
|
@@ -269,8 +269,8 @@ Sau khi tất cả tasks pass:
|
|
|
269
269
|
```
|
|
270
270
|
✓ Scaffold hoàn thành
|
|
271
271
|
|
|
272
|
-
specs/integrations/000-scaffold/plan.md
|
|
273
|
-
specs/integrations/000-scaffold/todo.md
|
|
272
|
+
.specs/integrations/000-scaffold/plan.md
|
|
273
|
+
.specs/integrations/000-scaffold/todo.md
|
|
274
274
|
|
|
275
275
|
Tất cả tasks: {N}/{N} ✓
|
|
276
276
|
|
|
@@ -7,7 +7,7 @@ description: Discover components từ code, generate crd.md + cdd.md cho từng
|
|
|
7
7
|
|
|
8
8
|
## Overview
|
|
9
9
|
|
|
10
|
-
Tạo
|
|
10
|
+
Tạo `.specs/main/component/{C-XXX}-{component-name}/crd.md` và `cdd.md` cho các components trong brownfield project.
|
|
11
11
|
|
|
12
12
|
Skill này **tự discover** component boundaries từ code (không dựa vào init), sau đó scan sâu từng component để extract responsibilities, entities, public interface, business rules. Khi hoàn thành, **điền Component Index vào prd.md** và **đề xuất Shared Entities cascade vào domain.md**.
|
|
13
13
|
|
|
@@ -30,8 +30,8 @@ Skill này **tự discover** component boundaries từ code (không dựa vào i
|
|
|
30
30
|
**Path:** Nếu có ARGUMENT là path → dùng làm root. Nếu không → CWD.
|
|
31
31
|
|
|
32
32
|
**Load:**
|
|
33
|
-
-
|
|
34
|
-
-
|
|
33
|
+
- `.specs/main/prd.md` — kiểm tra tồn tại; đọc problem statement và NFRs để hiểu business context
|
|
34
|
+
- `.specs/main/domain.md` — đọc Glossary để reuse business terms
|
|
35
35
|
|
|
36
36
|
Nếu `prd.md` không tồn tại → dừng:
|
|
37
37
|
> `prd.md` chưa có nội dung. Hãy chạy `/spec-brownfield-init` trước.
|
|
@@ -178,7 +178,7 @@ Nếu có Shared Entities được phát hiện ở Bước 5:
|
|
|
178
178
|
SHARED ENTITIES DETECTED
|
|
179
179
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
180
180
|
Các entities sau được dùng bởi nhiều components.
|
|
181
|
-
Đề xuất thêm vào specs/main/domain.md (Shared Entities):
|
|
181
|
+
Đề xuất thêm vào .specs/main/domain.md (Shared Entities):
|
|
182
182
|
|
|
183
183
|
Entity: Order (Owner: C-003-payment)
|
|
184
184
|
Dùng bởi: C-003-payment, C-005-inventory
|
|
@@ -191,7 +191,7 @@ Các entities sau được dùng bởi nhiều components.
|
|
|
191
191
|
Apply cascade proposals vào domain.md? [y/n/edit]
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
Nếu `y` → update
|
|
194
|
+
Nếu `y` → update `.specs/main/domain.md` Shared Entities section, đồng thời append entry vào `## Change History` của domain.md (theo `conventions.md` §5.5):
|
|
195
195
|
|
|
196
196
|
```markdown
|
|
197
197
|
### {YYYY-MM-DD} — manual — update
|
|
@@ -209,10 +209,10 @@ Nếu `edit` → hỏi chỉnh sửa từng entity trước khi apply.
|
|
|
209
209
|
|
|
210
210
|
```
|
|
211
211
|
Sẽ tạo {N} components ({2N} files):
|
|
212
|
-
✓ specs/main/component/C-001-auth/crd.md (3 NEEDS_CLARIFY)
|
|
213
|
-
✓ specs/main/component/C-001-auth/cdd.md (1 NEEDS_CLARIFY)
|
|
214
|
-
✓ specs/main/component/C-002-user/crd.md (0 NEEDS_CLARIFY)
|
|
215
|
-
✓ specs/main/component/C-002-user/cdd.md (2 NEEDS_CLARIFY)
|
|
212
|
+
✓ .specs/main/component/C-001-auth/crd.md (3 NEEDS_CLARIFY)
|
|
213
|
+
✓ .specs/main/component/C-001-auth/cdd.md (1 NEEDS_CLARIFY)
|
|
214
|
+
✓ .specs/main/component/C-002-user/crd.md (0 NEEDS_CLARIFY)
|
|
215
|
+
✓ .specs/main/component/C-002-user/cdd.md (2 NEEDS_CLARIFY)
|
|
216
216
|
...
|
|
217
217
|
|
|
218
218
|
Ghi tất cả? [y] hoặc review từng file trước [r]:
|
|
@@ -273,8 +273,8 @@ Khi apply → đồng thời append entry vào `## Change History` của prd.md
|
|
|
273
273
|
|
|
274
274
|
```
|
|
275
275
|
✓ Generated {N} components:
|
|
276
|
-
specs/main/component/C-001-auth/ (crd.md + cdd.md)
|
|
277
|
-
specs/main/component/C-002-user/ (crd.md + cdd.md)
|
|
276
|
+
.specs/main/component/C-001-auth/ (crd.md + cdd.md)
|
|
277
|
+
.specs/main/component/C-002-user/ (crd.md + cdd.md)
|
|
278
278
|
...
|
|
279
279
|
|
|
280
280
|
✓ prd.md Component Index: {N} entries đã được điền
|