spec-lite 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: spec-domain
3
+ description: Điền hoặc cập nhật domain.md — Domain Knowledge (entities, business rules, terminology). Dùng sau khi prd.md đã có nội dung.
4
+ ---
5
+
6
+ # spec-domain
7
+
8
+ ## Overview
9
+
10
+ Tạo nội dung cho `specs/main/domain.md` thông qua interview có cấu trúc. Domain là ngôn ngữ chung của hệ thống — nó định nghĩa các khái niệm business, entities, business rules, và events mà toàn bộ team (cả business lẫn tech) dùng chung.
11
+
12
+ Domain không chứa: implementation details, DB schema, framework-specific code, hay bất cứ thứ gì thuộc về `sad.md`, `fdd.md`.
13
+
14
+ ## When to Use
15
+
16
+ - `domain.md` chưa có hoặc còn rỗng, và `prd.md` đã có nội dung
17
+ - Cần bổ sung entity hoặc business rule mới phát sinh từ một integration
18
+ - Cascade proposals từ `spec.md` hoặc `tech.md` yêu cầu cập nhật domain
19
+
20
+ ## When NOT to Use
21
+
22
+ - `prd.md` chưa có nội dung → chạy `/spec-prd` trước
23
+ - Đang muốn thiết kế kiến trúc kỹ thuật → dùng `/spec-sad`
24
+ - Đang muốn định nghĩa feature-level requirements → dùng `/spec-frd`
25
+
26
+ ---
27
+
28
+ ## Process
29
+
30
+ ### Bước 1: Kiểm tra preconditions
31
+
32
+ **Đọc `specs/main/prd.md`:**
33
+
34
+ - **Chưa tồn tại hoặc là template** → dừng ngay:
35
+ > `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước để có PRD trước khi định nghĩa domain.
36
+
37
+ - **Đã có nội dung** → đọc để lấy context: scope, problem statement, target users. Dùng làm nền để hỏi về entities.
38
+
39
+ **Đọc `specs/main/domain.md`:**
40
+
41
+ - **Chưa tồn tại** → tạo thư mục `specs/main/` nếu chưa có, tiến hành Bước 2 (full interview).
42
+
43
+ - **Đã có nội dung thực** → quét toàn bộ sections, hiển thị trạng thái từng section, rồi hỏi user muốn làm gì.
44
+
45
+ **Các sections cần quét** (theo thứ tự):
46
+
47
+ | # | Section | Có nội dung thực? |
48
+ | --- | --- | --- |
49
+ | 1 | Terminology | ✓ đã có / ✗ trống/thiếu |
50
+ | 2 | Entities | ✓ đã có / ✗ trống/thiếu |
51
+ | 3 | Business Rules | ✓ đã có / ✗ trống/thiếu |
52
+ | 4 | Domain Events | ✓ đã có / ✗ trống/thiếu |
53
+
54
+ 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. Ngoài các sections trên, **ghi nhận các sections thừa** — những `##` heading có trong file nhưng không có trong template.
55
+
56
+ Sau khi quét, liệt kê tất cả sections **theo đúng thứ tự xuất hiện trong file**, đánh số liên tục:
57
+
58
+ ```
59
+ domain.md hiện tại:
60
+ [1] Terminology ✓ đã có
61
+ [2] Entities ✓ đã có
62
+ [3] Business Rules ✗ chưa có — cần bổ sung
63
+ [4] Risks ⚠ không có trong template
64
+ [5] Domain Events ✓ đã có
65
+ [A] Interview tất cả sections
66
+
67
+ Chọn số hoặc A:
68
+ ```
69
+
70
+ - User chọn số section thuộc template → interview section đó rồi merge vào file.
71
+ - User chọn số section thừa (⚠) → xoá section đó khỏi file ngay, không hỏi thêm.
72
+ - User chọn A → interview tuần tự tất cả sections thuộc template (sections thừa không bị đụng tới).
73
+
74
+ ---
75
+
76
+ ### Bước 2: Gather — interview có cấu trúc
77
+
78
+ Trước khi hỏi, tóm tắt ngắn context đọc được từ `prd.md` (nếu có) và surface assumptions:
79
+
80
+ ```
81
+ TỪ PRD TÔI HIỂU:
82
+ - Hệ thống giải quyết: {problem statement ngắn gọn}
83
+ - Các khái niệm tôi thấy xuất hiện: {list terms từ prd}
84
+
85
+ ASSUMPTIONS TÔI ĐANG ĐẶT RA:
86
+ 1. {assumption 1}
87
+ 2. {assumption 2}
88
+ → Sửa lại nếu sai trước khi tiếp tục.
89
+ ```
90
+
91
+ Sau đó hỏi tuần tự từng phần — không hỏi tất cả cùng lúc:
92
+
93
+ **Phần 1 — Terminology:**
94
+ > Có thuật ngữ nghiệp vụ nào đặc thù cần định nghĩa rõ không? (Ví dụ: "đơn hàng" trong hệ thống này nghĩa là gì chính xác?)
95
+ > Liệt kê những term hay bị dùng sai hoặc có nhiều cách hiểu.
96
+
97
+ **Phần 2 — Entities:**
98
+ > Hệ thống làm việc với những "đối tượng" nghiệp vụ nào? (Ví dụ: User, Order, Product...)
99
+ > Với mỗi entity: nó đại diện cho cái gì trong business? Attributes nào quan trọng? Có lifecycle (state machine) không?
100
+
101
+ Với mỗi entity được đề cập, hỏi tiếp:
102
+ > Entity này có trạng thái (state) thay đổi theo thời gian không? Nếu có, các trạng thái đó là gì và khi nào chuyển đổi?
103
+
104
+ **Phần 3 — Business Rules:**
105
+ > Có quy tắc nghiệp vụ nào bất biến không? (Ví dụ: "Không thể hủy đơn hàng đã giao", "User chưa verify không được thanh toán")
106
+ > Ghi theo format: rule — khi nào apply — ngoại lệ nếu có.
107
+
108
+ **Phần 4 — Domain Events:** *(hỏi nếu hệ thống có event-driven behavior)*
109
+ > Có sự kiện nghiệp vụ nào quan trọng cần track không? (Ví dụ: OrderPlaced, PaymentFailed...)
110
+ > Khi nào xảy ra? Data gì đi kèm?
111
+
112
+ Nếu câu trả lời vague → hỏi lại. Ví dụ:
113
+ - "có nhiều loại user" → "liệt kê cụ thể từng loại và điểm khác nhau giữa chúng là gì?"
114
+ - "đơn hàng có nhiều trạng thái" → "liệt kê hết các trạng thái và vẽ luồng chuyển đổi"
115
+
116
+ ---
117
+
118
+ ### Bước 3: Write — sinh draft
119
+
120
+ Dùng `.claude/templates/main/domain-template.md` làm skeleton, điền nội dung từ interview vào từng section.
121
+
122
+ Hiển thị draft cho user xem — **chưa ghi file**.
123
+
124
+ ---
125
+
126
+ ### Bước 4: Review — xác nhận với user
127
+
128
+ Trình bày draft và hỏi:
129
+ > Draft Domain trên đã đúng chưa? Có entity nào thiếu, business rule nào sai không?
130
+
131
+ Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → cập nhật draft → hỏi lại.
132
+
133
+ ---
134
+
135
+ ### Bước 5: Save
136
+
137
+ Ghi nội dung đã được confirm vào `specs/main/domain.md`.
138
+
139
+ Thông báo kết quả:
140
+ ```
141
+ ✓ specs/main/domain.md đã được cập nhật (status: draft)
142
+
143
+ Bước tiếp theo:
144
+ - /spec-sad → thiết kế kiến trúc kỹ thuật (dùng prd.md + domain.md làm context)
145
+ - (sau sad) /spec-frd {feature-name} → định nghĩa requirements của từng feature
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Common Rationalizations
151
+
152
+ | Rationalization | Reality |
153
+ | --- | --- |
154
+ | "Entities thì ai cũng biết rồi, không cần ghi" | Entity chưa được viết ra là entity chưa được đồng thuận. Dev và BA có thể hiểu khác nhau. |
155
+ | "Business rules thì ghi trong code thôi" | Business rules trong code không ai đọc được ngoài dev. Domain là ngôn ngữ chung cho cả team. |
156
+ | "State machine phức tạp, thêm sau" | State machine ảnh hưởng trực tiếp đến data model và API design. Thiếu nó là thiếu constraint quan trọng. |
157
+ | "Terminology thì khỏi cần, ai cũng hiểu" | "Order" trong hệ thống bán lẻ khác "Order" trong hệ thống sản xuất. Định nghĩa rõ tránh miscommunication. |
158
+
159
+ ## Red Flags
160
+
161
+ - Entity chỉ có tên, không có attributes hay mô tả
162
+ - Business rules ghi dưới dạng technical ("validate bằng regex") thay vì business ("số điện thoại phải là số Việt Nam")
163
+ - Terminology section trống trong khi domain có nhiều thuật ngữ đặc thù
164
+ - Attributes dùng DB type (`VARCHAR`, `INT`) thay vì business type (`text`, `number`)
165
+
166
+ ## Verification
167
+
168
+ Trước khi kết thúc, kiểm tra:
169
+
170
+ - [ ] Frontmatter đầy đủ và đúng schema
171
+ - [ ] Mỗi term trong Terminology có definition rõ ràng, không mơ hồ
172
+ - [ ] Mỗi entity có mô tả business context (không chỉ là tên)
173
+ - [ ] Attributes dùng business type, không phải DB type
174
+ - [ ] State machine chỉ có ở entity có lifecycle thực sự
175
+ - [ ] Business rules có ID (`DOM-R01`...), condition, và exception rõ ràng
176
+ - [ ] User đã confirm trước khi file được ghi
@@ -0,0 +1,263 @@
1
+ ---
2
+ name: spec-new
3
+ description: Tạo spec.md cho một integration mới thông qua interview có cấu trúc. Dùng khi bắt đầu implement một feature hoặc requirement mới. Nhận raw requirement từ argument hoặc chọn feature TODO từ prd.md.
4
+ ---
5
+
6
+ # spec-new
7
+
8
+ ## Overview
9
+
10
+ Tạo `spec.md` cho một integration mới trong `specs/integrations/{NNN}-{slug}/`.
11
+
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
+
14
+ ## When to Use
15
+
16
+ - Bắt đầu implement một feature mới
17
+ - Có raw requirement chưa được spec hóa
18
+ - Muốn chọn một feature TODO từ prd.md để bắt đầu
19
+
20
+ ## When NOT to Use
21
+
22
+ - `prd.md` hoặc `domain.md` chưa có → chạy `/spec-prd`, `/spec-domain` trước
23
+ - Muốn thiết kế technical design → dùng `/spec-tech` (cần `spec.md` đã approve trước)
24
+ - Chỉ muốn cập nhật spec đã có → edit file trực tiếp
25
+
26
+ ---
27
+
28
+ ## Process
29
+
30
+ ### Bước 1: Xác định input
31
+
32
+ **Nếu có ARGUMENT** → đây là raw requirement, chuyển sang Bước 2.
33
+
34
+ **Nếu không có ARGUMENT:**
35
+
36
+ Đọc `specs/main/prd.md`. Nếu file không tồn tại hoặc là template rỗng → dừng:
37
+ > `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước.
38
+
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:
40
+
41
+ ```
42
+ Features trong PRD:
43
+
44
+ [1] F-001 — Authentication (High) [TODO]
45
+ [2] F-002 — User Profile (Medium) [In Progress] → frd.md tồn tại
46
+ [3] F-003 — App Browsing & Opt-in (High) [TODO]
47
+ [4] F-004 — Credit System (High) [Done] → frd.md tồn tại
48
+ [5] F-006 — Admin Panel (Medium) [TODO]
49
+
50
+ Chọn số feature để bắt đầu spec:
51
+ ```
52
+
53
+ Ghi chú `→ frd.md tồn tại` nếu file `specs/main/features/{feature-id}-*/frd.md` đã có.
54
+
55
+ Nếu tất cả features đều Done → thông báo:
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>`.
57
+
58
+ Sau khi user chọn feature:
59
+
60
+ - Nếu feature **chưa có frd.md** → lấy feature đó làm requirement, chuyển sang Bước 2.
61
+ - Nếu feature **đã có frd.md** → đọc file frd.md, liệt kê các sections và hỏi ngay:
62
+
63
+ ```
64
+ frd.md — F-001 Authentication đã tồn tại.
65
+ Sections hiện có:
66
+
67
+ [1] Overview
68
+ [2] Feature-level Acceptance Criteria
69
+ [3] User Stories
70
+ [4] Scope (In Scope / Out of Scope)
71
+ [5] Dependencies
72
+ [A] All — viết lại toàn bộ từ đầu
73
+
74
+ Chọn section cần cập nhật (có thể chọn nhiều, ví dụ: 2 3):
75
+ ```
76
+
77
+ Lưu lại lựa chọn section. Nếu chọn `A` → xử lý như tạo mới toàn bộ. Sau đó chuyển sang Bước 2.
78
+
79
+ ---
80
+
81
+ ### Bước 2: Load context
82
+
83
+ Load các file sau (bất kể input là raw requirement hay từ prd.md):
84
+
85
+ - `specs/main/prd.md` — đọc Problem Statement, Target Users, Scope, và mô tả feature liên quan nếu có
86
+ - `specs/main/domain.md` — đọc Entities và Business Rules
87
+ - Nếu input từ prd.md và có `specs/main/features/{feature-id}/frd.md` → đọc User Stories và Acceptance Criteria
88
+
89
+ Tóm tắt context và surface assumptions:
90
+
91
+ ```
92
+ TỪ PRD & DOMAIN TÔI HIỂU:
93
+ - Vấn đề đang giải quyết: {problem statement ngắn từ prd}
94
+ - Personas liên quan: {từ prd Target Users}
95
+ - Entities liên quan: {từ domain.md}
96
+ {nếu có feature cụ thể} - Feature: {ID} — {tên} — {mô tả}
97
+
98
+ ASSUMPTIONS TÔI ĐANG ĐẶT RA:
99
+ 1. {assumption về scope}
100
+ 2. {assumption về persona}
101
+ → Sửa lại nếu sai trước khi tiếp tục.
102
+ ```
103
+
104
+ ---
105
+
106
+ ### Bước 3: Interview
107
+
108
+ Hỏi tuần tự, từng phần — không hỏi tất cả cùng lúc:
109
+
110
+ **Phần 1 — Problem Statement:**
111
+ > Vấn đề cụ thể cần giải quyết trong integration này là gì? Tại sao cần làm ngay bây giờ?
112
+ > (Đây là scope của integration này — không phải toàn bộ feature)
113
+
114
+ **Phần 2 — Requirements:**
115
+ > Requirements cụ thể là gì? Ghi theo dạng user stories: "As a {persona}, I want to {action} so that {value}"
116
+ > Hoặc liệt kê functional requirements nếu không theo user story format.
117
+
118
+ **Phần 3 — Acceptance Criteria:**
119
+ > Điều kiện nào để biết integration này là done? Phân theo 2 loại:
120
+ > - **Feature-level AC** (`AC-F-xxx`): criterion áp dụng cho toàn flow — không gắn với story cụ thể (ví dụ: error format, auth guard, cross-story constraints)
121
+ > - **Story-level AC** (`AC-S-xxx`): criterion gắn với từng user story cụ thể
122
+ > Viết theo cú pháp: GIVEN {precondition} / WHEN {action} / THEN {expected outcome}
123
+ > `AC-F` và `AC-S` đánh số độc lập, tăng dần xuyên suốt toàn spec (không reset qua feature/story).
124
+
125
+ **Phần 4 — Out of Scope:**
126
+ > Có gì liên quan nhưng sẽ KHÔNG làm trong integration này không? Ghi rõ lý do.
127
+
128
+ Nếu câu trả lời vague → hỏi lại để làm rõ. Ví dụ:
129
+ - "user phải login được" → "login bằng gì? email/password, OAuth, hay cả hai? Response là gì?"
130
+ - "hiển thị danh sách" → "hiển thị những field nào? có filter/sort/pagination không?"
131
+
132
+ ---
133
+
134
+ ### Bước 4: Xác định slug và output path
135
+
136
+ Từ title của integration, sinh slug:
137
+ - Lowercase, dùng dấu gạch ngang, không có ký tự đặc biệt
138
+ - Ví dụ: "User Authentication" → `user-authentication`
139
+ - Nếu từ prd.md: dùng `{feature-id}-{feature-slug}`, ví dụ: `f001-authentication`
140
+
141
+ Xác định số thứ tự (`NNN`):
142
+ - Liệt kê các thư mục hiện có trong `specs/integrations/` theo pattern `{NNN}-*`
143
+ - 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`)
144
+ - Nếu chưa có thư mục nào → bắt đầu từ `001`
145
+
146
+ Output path: `specs/integrations/{NNN}-{slug}/spec.md`
147
+
148
+ ---
149
+
150
+ ### Bước 5: Write — sinh draft
151
+
152
+ Tổng hợp và viết draft `spec.md`:
153
+
154
+ **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.
155
+
156
+ **Cascade Proposals** — điền theo hướng dẫn sau:
157
+
158
+ ### prd.md
159
+
160
+ {Đề xuất cập nhật nếu phát hiện scope/feature mới cần ghi lại, hoặc "Không có thay đổi đề xuất."}
161
+
162
+ ### domain.md
163
+
164
+ {Đề xuất cập nhật nếu phát hiện entity hoặc business rule mới, hoặc "Không có thay đổi đề xuất."}
165
+
166
+ ### frd.md
167
+
168
+ Liệt kê **tất cả** features từ PRD và đánh giá từng cái:
169
+
170
+ | Feature | Status | frd.md | Đề xuất |
171
+ | --- | --- | --- | --- |
172
+ | F-001 — Authentication | In Progress | tồn tại | **Cập nhật** — bổ sung US-003, AC mới về rate limiting |
173
+ | F-002 — User Profile | TODO | chưa có | **Tạo mới** |
174
+ | F-003 — Credit System | Done | tồn tại | Không liên quan |
175
+
176
+ Với từng feature có đề xuất thay đổi, ghi rõ:
177
+
178
+ **Tạo mới** `specs/main/features/{number}-{feature-slug}/frd.md`
179
+ - Dùng khi integration này là lần đầu tiên implement feature này
180
+ - Thư mục đặt tên theo convention: `{number}-{feature-slug}` (ví dụ: `001-authentication`)
181
+ - Nội dung đề xuất: {tóm tắt User Stories và Acceptance Criteria từ spec.md}
182
+
183
+ **Cập nhật** `specs/main/features/{number}-{feature-slug}/frd.md`
184
+ - Dùng khi frd.md đã tồn tại và integration này bổ sung thêm stories hoặc criteria
185
+ - Đọc file frd.md hiện tại, liệt kê các sections và hỏi user muốn update section nào:
186
+
187
+ ```
188
+ frd.md — F-001 Authentication đã tồn tại.
189
+ Sections hiện có:
190
+
191
+ [1] Overview
192
+ [2] Feature-level Acceptance Criteria
193
+ [3] User Stories
194
+ [4] Scope (In Scope / Out of Scope)
195
+ [5] Dependencies
196
+ [A] All — viết lại toàn bộ từ đầu
197
+
198
+ Chọn section cần cập nhật (có thể chọn nhiều, ví dụ: 2 3):
199
+ ```
200
+
201
+ Sau khi user chọn → chỉ sinh nội dung cho section đó. Nếu chọn `A` → sinh lại toàn bộ frd.md như tạo mới.
202
+
203
+ Không được bỏ qua feature nào — kể cả feature `Done` vẫn phải đánh giá xem spec mới có làm thay đổi scope không.
204
+ ```
205
+
206
+ Hiển thị draft cho user xem — **chưa ghi file**.
207
+
208
+ ---
209
+
210
+ ### Bước 6: Review — xác nhận với user
211
+
212
+ > Draft trên đã đúng chưa?
213
+ > - Acceptance Criteria có đủ và đo được không?
214
+ > - Cascade Proposals (nếu có) — cần approve trước khi tiến hành.
215
+
216
+ Chỉ ghi file sau khi user confirm. Nếu user yêu cầu chỉnh sửa → cập nhật draft → hỏi lại.
217
+
218
+ ---
219
+
220
+ ### Bước 7: Save
221
+
222
+ Tạo thư mục `specs/integrations/{NNN}-{slug}/` nếu chưa có.
223
+
224
+ Ghi nội dung đã confirm vào `specs/integrations/{NNN}-{slug}/spec.md`.
225
+
226
+ Nếu integration này đến từ prd.md, cập nhật `specs/main/prd.md`: đổi Status của feature từ `TODO` → `In Progress` và điền link vào cột FRD.
227
+
228
+ Thông báo kết quả:
229
+ ```
230
+ ✓ specs/integrations/{NNN}-{slug}/spec.md đã được tạo (status: draft)
231
+ {nếu có} ✓ prd.md — F-XXX status cập nhật: TODO → In Progress
232
+
233
+ Bước tiếp theo:
234
+ - Review và approve spec.md
235
+ - /spec-tech → thiết kế technical design dựa trên spec.md này
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Common Rationalizations
241
+
242
+ | Rationalization | Reality |
243
+ | --- | --- |
244
+ | "Requirement rõ rồi, bỏ qua spec.md" | Acceptance Criteria chưa viết = không biết khi nào là done. Code xong vẫn có thể sai. |
245
+ | "Out of scope thì ai cũng hiểu rồi" | Không ghi = scope creep không kiểm soát được. DEV sẽ tự quyết định implement hay không. |
246
+ | "Cascade Proposals thì sau cập nhật cũng được" | Domain là shared context. Cập nhật trễ = các spec sau dùng context sai. |
247
+
248
+ ## Red Flags
249
+
250
+ - Acceptance Criteria dùng từ không đo được: "hoạt động đúng", "hiển thị đẹp", "nhanh"
251
+ - Out of Scope trống — mọi integration đều có thứ liên quan nhưng không làm
252
+ - Open Questions để trống nhưng vẫn còn điểm mơ hồ trong requirements
253
+ - Cascade Proposals không được review trước khi approve
254
+
255
+ ## Verification
256
+
257
+ Trước khi ghi file, kiểm tra:
258
+
259
+ - [ ] Problem Statement từ góc nhìn user/business, không mention tech
260
+ - [ ] Mỗi Acceptance Criterion dùng cú pháp GIVEN / WHEN / THEN, có thể test được
261
+ - [ ] Out of Scope có ít nhất 1 item
262
+ - [ ] Cascade Proposals đã được user review
263
+ - [ ] User đã confirm draft trước khi ghi file
@@ -0,0 +1,193 @@
1
+ ---
2
+ name: spec-plan
3
+ description: Tạo plan.md và todo.md cho một integration — phân rã tasks từ spec.md và tech.md. SDD wrapper quanh planning-and-task-breakdown — chỉ làm context loading, delegate toàn bộ breakdown cho planning-and-task-breakdown.
4
+ ---
5
+
6
+ # spec-plan
7
+
8
+ ## Overview
9
+
10
+ SDD wrapper quanh `planning-and-task-breakdown`. Nhiệm vụ duy nhất của skill này là:
11
+ 1. Load và surface đúng context từ SDD artifacts
12
+ 2. Handoff sang `planning-and-task-breakdown` để thực hiện breakdown
13
+
14
+ Mọi quyết định về sizing, slicing đều thuộc về `planning-and-task-breakdown`. Output format được định nghĩa trong SKILL này.
15
+
16
+ ## When to Use
17
+
18
+ - Có `spec.md` và/hoặc `tech.md` cho integration cần plan
19
+
20
+ ## When NOT to Use
21
+
22
+ - Hotfix nhỏ, single-file → implement trực tiếp không cần plan
23
+
24
+ ---
25
+
26
+ ## Process
27
+
28
+ ### Bước 1: Xác định integration
29
+
30
+ Quét `specs/integrations/`. Liệt kê tất cả integrations:
31
+
32
+ ```
33
+ Integrations:
34
+
35
+ [1] f001-authentication — User Authentication spec✓ tech✓ plan—
36
+ [2] f003-app-browsing — App Browsing & Opt-in spec✓ tech—
37
+ [3] f004-credit-system — Credit System spec—
38
+
39
+ Chọn số integration:
40
+ ```
41
+
42
+ Legend: `✓` = có, `—` = chưa có
43
+
44
+ Nếu có ARGUMENT → chọn luôn, không hiển thị danh sách.
45
+
46
+ Nếu plan.md / todo.md đã tồn tại → hỏi trước khi ghi đè.
47
+
48
+ ---
49
+
50
+ ### Bước 2: Load và surface context
51
+
52
+ Load:
53
+
54
+ - `specs/integrations/{slug}/spec.md` — Requirements, Acceptance Criteria (ghi chú số AC và IDs)
55
+ - `specs/integrations/{slug}/tech.md` — Technical Design, Interface Changes, Data Model Changes, Implementation Notes
56
+ - `specs/main/domain.md` — Entities và Business Rules liên quan
57
+
58
+ Surface tóm tắt để planning-and-task-breakdown có đủ context:
59
+
60
+ ```
61
+ CONTEXT CHO PLANNING:
62
+ - Integration: {title}
63
+ - Yêu cầu chính: {tóm tắt từ spec.md — 2-4 bullet}
64
+ - Acceptance Criteria: {số lượng} — Feature-level: {AC-F-001, AC-F-002...} / Story-level: {AC-S-001, AC-S-002...}
65
+ - Thay đổi kỹ thuật: {modules, data model, interfaces từ tech.md}
66
+ - Entities liên quan: {từ domain.md}
67
+
68
+ ASSUMPTIONS:
69
+ 1. {assumption về ordering nếu có}
70
+ → Sửa lại nếu sai trước khi tiếp tục.
71
+ ```
72
+
73
+ > **Plan mode từ đây** — chỉ đọc, không viết code.
74
+
75
+ ---
76
+
77
+ ### Bước 3: Handoff sang planning-and-task-breakdown
78
+
79
+ Invoke `planning-and-task-breakdown` với context đã load. Skill đó sẽ thực hiện: dependency graph, slicing, write tasks. Output phải theo **Output Format** định nghĩa bên dưới — không dùng format mặc định của `planning-and-task-breakdown`.
80
+
81
+ ---
82
+
83
+ ## Output Format
84
+
85
+ ### plan.md
86
+
87
+ ```markdown
88
+ ---
89
+ id: "{slug}"
90
+ slug: "{slug}"
91
+ title: "{title} — Implementation Plan"
92
+ features: ["{F-XXX}"]
93
+ status: draft
94
+ created: {YYYY-MM-DD}
95
+ ---
96
+
97
+ ## Summary
98
+
99
+ [2-3 sentences on what will be implemented]
100
+
101
+ ## Dependency Graph
102
+
103
+ [ASCII diagram — bottom = foundations, top = UI. Ví dụ:]
104
+
105
+ UI Components
106
+
107
+ API Routes ──── Middleware
108
+
109
+ Services
110
+
111
+ Prisma Schema
112
+
113
+ ## Tasks
114
+
115
+ ### Phase 1: [Phase name]
116
+
117
+ #### T001 · [task title — starts with a verb]
118
+
119
+ **Mục tiêu:** [One sentence: what this task delivers]
120
+
121
+ **depends:** — (hoặc T-IDs)
122
+
123
+ **Các bước:**
124
+ 1. [Concrete implementation step]
125
+ 2. [Concrete implementation step]
126
+
127
+ **Verification:**
128
+ - [ ] [AC-F-001] [specific test case]
129
+ - [ ] [smoke check or observable result]
130
+
131
+ ---
132
+
133
+ ### Phase N: Verification
134
+
135
+ #### T00N · Integration tests — [flow name]
136
+
137
+ **Mục tiêu:** [End-to-end flow being tested]
138
+
139
+ **depends:** T001, T002, ...
140
+
141
+ **Các bước:**
142
+ 1. [Test setup / seed data]
143
+ 2. [Execute happy path]
144
+ 3. [Execute error cases]
145
+
146
+ **Verification:**
147
+ - [ ] Happy path: [description]
148
+ - [ ] Error case: [description]
149
+
150
+ ---
151
+
152
+ ## Definition of Done
153
+
154
+ - [ ] [AC-F-001 / AC-S-001] [AC description — concise, preserve intent]
155
+ - [ ] All unit tests pass
156
+ - [ ] All integration tests pass
157
+ ```
158
+
159
+ **Lưu ý format:**
160
+ - Task ID dùng `·` (middle dot), không dùng `—`
161
+ - `**Các bước:**` là numbered list, đủ cụ thể để agent implement không cần đoán
162
+ - `**Verification:**` là checklist `- [ ]`, gắn AC ID khi có
163
+ - `**depends:**` luôn có, dùng `—` nếu không có dependency
164
+
165
+ ### todo.md
166
+
167
+ ```markdown
168
+ # [title] — Todo
169
+
170
+ ### Phase 1: [Phase name]
171
+ - [ ] T001 · [task title]
172
+ - [ ] T002 · [task title]
173
+
174
+ ### Phase N: Verification
175
+ - [ ] T00N · Integration tests — [flow name]
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Cascade Proposals
181
+
182
+ Không có Cascade Proposals — plan.md là terminal artifact.
183
+
184
+ Nếu trong quá trình breakdown phát hiện delta cần cập nhật `sad.md`, `domain.md`, hay artifacts khác → **không tự cập nhật**. Thông báo user và đề xuất tạo integration riêng để xử lý.
185
+
186
+ ---
187
+
188
+ ## Verification
189
+
190
+ - [ ] Context đã được surface và user confirm trước khi breakdown
191
+ - [ ] plan.md có section **Dependency Graph**
192
+ - [ ] Mỗi task có đủ: Mục tiêu / depends / Các bước / Verification
193
+ - [ ] Không viết code trong suốt quá trình