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-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.
4
+ ---
5
+
6
+ # spec-prd
7
+
8
+ ## Overview
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.
11
+
12
+ PRD không chứa: tech stack, implementation details, entity schema, hay bất cứ thứ gì thuộc về `sad.md` hoặc `domain.md`.
13
+
14
+ ## When to Use
15
+
16
+ - `specs/main/prd.md` chưa có nội dung hoặc vẫn còn là template
17
+ - Cần bổ sung hoặc cập nhật một phần của PRD hiện tại
18
+ - Requirements thay đổi và PRD cần được đồng bộ lại
19
+
20
+ ## When NOT to Use
21
+
22
+ - Đang muốn thiết kế kiến trúc kỹ thuật → dùng `/spec.sad`
23
+ - Đang muốn định nghĩa domain entities → dùng `/spec.domain`
24
+
25
+ ---
26
+
27
+ ## Process
28
+
29
+ ### Bước 1: Kiểm tra preconditions
30
+
31
+ Đọc `specs/main/prd.md`:
32
+
33
+ - **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).
34
+
35
+ - **File là template rỗng** → tiến hành Bước 2 (full interview).
36
+
37
+ - **File 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ì.
38
+
39
+ **Các sections cần quét** (theo thứ tự):
40
+
41
+ | # | Section | Có nội dung thực? |
42
+ | --- | --- | --- |
43
+ | 1 | Problem Statement | ✓ đã có / ✗ trống/thiếu |
44
+ | 2 | Target Users | ✓ đã có / ✗ trống/thiếu |
45
+ | 3 | Scope | ✓ đã có / ✗ trống/thiếu |
46
+ | 4 | Features | ✓ đã có / ✗ trống/thiếu |
47
+ | 5 | Non-Functional Requirements | ✓ đã có / ✗ trống/thiếu |
48
+ | 6 | Business Constraints | ✓ đã có / ✗ trống/thiếu |
49
+
50
+ 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
+
52
+ Ngoài các sections thuộc template, **ghi nhận các sections thừa** — những `##` heading có trong file nhưng không có trong template.
53
+
54
+ Sau khi quét, liệt kê tất cả sections **theo đúng thứ tự xuất hiện trong file** (không tách nhóm), đánh số liên tục:
55
+
56
+ ```
57
+ PRD hiện tại:
58
+ [1] Problem Statement ✓ đã có
59
+ [2] Target Users ✓ đã có
60
+ [3] Scope ✓ đã có
61
+ [4] Risks ⚠ không có trong template
62
+ [5] Features ✗ chưa có — cần bổ sung
63
+ [6] Non-Functional Req. ✓ đã có
64
+ [7] Business Constraints ✓ đã 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 requirements
77
+
78
+ Trước khi hỏi, list ra các assumptions đang tạm thời:
79
+
80
+ ```
81
+ ASSUMPTIONS TÔI ĐANG ĐẶT RA:
82
+ 1. Đây là dự án phần mềm (không phải hardware hay process)
83
+ 2. Target users là end users (không phải internal tools)
84
+ → Sửa lại nếu sai, tôi sẽ tiếp tục với các assumptions đúng.
85
+ ```
86
+
87
+ Sau đó hỏi tuần tự, từng phần một — không hỏi tất cả cùng lúc:
88
+
89
+ **Phần 1 — Problem Statement:**
90
+ > Vấn đề gì đang được giải quyết? Tại sao cần giải quyết bây giờ? (2-3 câu từ góc nhìn business)
91
+
92
+ **Phần 2 — Target Users:**
93
+ > Ai là người dùng chính? Mô tả theo persona: tên vai trò, mục tiêu chính, pain point hiện tại.
94
+ > (Có thể có nhiều persona)
95
+
96
+ **Phần 3 — Scope:**
97
+ > Hệ thống sẽ làm gì? Và quan trọng hơn — hệ thống sẽ KHÔNG làm gì (out of scope)?
98
+ > Ghi rõ lý do cho mỗi item out of scope.
99
+
100
+ **Phần 4 — Features:**
101
+ > 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
+ > (Đây sẽ là Feature Index mà các FRD sau này sẽ tham chiếu.)
103
+
104
+ **Phần 5 — Non-Functional Requirements:**
105
+ > Có yêu cầu về performance, security, availability, scalability không?
106
+ > Mỗi NFR cần: category, mô tả cụ thể, target đo được, priority (Must/Should/Could).
107
+
108
+ **Phần 6 — Business Constraints:**
109
+ > Có ràng buộc kinh doanh nào không? (deadline, budget, compliance, vendor lock-in, v.v.)
110
+ > Có giả định nào quan trọng cần ghi lại không?
111
+
112
+ Nếu câu trả lời vague → hỏi lại để làm rõ. Ví dụ:
113
+ - "hệ thống phải nhanh" → "nhanh nghĩa là response time < bao nhiêu ms ở percentile nào?"
114
+ - "bảo mật cao" → "có yêu cầu compliance cụ thể không? (PCI-DSS, HIPAA, ISO27001...)"
115
+
116
+ ---
117
+
118
+ ### Bước 3: Write — sinh nội dung
119
+
120
+ Sau khi thu thập đủ thông tin, dùng `.claude/templates/main/prd-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 trước khi 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 PRD trên đã đúng chưa? Có phần nào cần chỉnh không trước khi lưu?
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/prd.md`, thay thế toàn bộ nội dung cũ.
138
+
139
+ Thông báo kết quả:
140
+ ```
141
+ ✓ specs/main/prd.md đã được cập nhật (status: draft)
142
+
143
+ Bước tiếp theo:
144
+ - /spec-domain → định nghĩa domain entities và business rules
145
+ - (sau domain) /spec-sad → thiết kế kiến trúc kỹ thuật
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Common Rationalizations
151
+
152
+ | Rationalization | Reality |
153
+ | --- | --- |
154
+ | "Requirements rõ rồi, không cần hỏi nhiều" | Vague requirements tạo ra PRD vague. PRD vague tạo ra implementation sai. |
155
+ | "NFR có thể thêm sau" | NFR ảnh hưởng đến architecture decisions. Thêm sau là refactor kiến trúc. |
156
+ | "Out of scope thì không cần ghi" | Không ghi out of scope = scope creep không kiểm soát được. |
157
+ | "Target users ai cũng biết rồi" | Persona chưa được viết ra là persona chưa được đồng thuận. |
158
+
159
+ ## Red Flags
160
+
161
+ - PRD dùng từ ngữ không đo đếm được: "nhanh", "bảo mật", "dễ dùng"
162
+ - NFRs bỏ trống hoàn toàn
163
+ - Scope chỉ có In Scope, không có Out of Scope
164
+ - Problem Statement viết theo góc nhìn kỹ thuật thay vì business
165
+
166
+ ## Verification
167
+
168
+ Trước khi kết thúc, kiểm tra:
169
+
170
+ - [ ] Frontmatter đầy đủ và đúng schema (id, type, version, status, owner, project_name)
171
+ - [ ] Problem Statement từ góc nhìn business, không mention tech stack
172
+ - [ ] Mỗi persona có: tên vai trò, mục tiêu, pain point
173
+ - [ ] Out of Scope có ít nhất 1 item với lý do
174
+ - [ ] Features có ít nhất 1 item, mỗi item có ID (F-XXX), tên, mô tả, priority
175
+ - [ ] Mỗi NFR có target đo được (không phải "nhanh", "bảo mật chung chung")
176
+ - [ ] User đã confirm trước khi file được ghi
@@ -0,0 +1,202 @@
1
+ ---
2
+ name: spec-sad
3
+ description: Điền hoặc cập nhật sad.md — System Architecture Document (kiến trúc, tech stack, cross-cutting concerns, guardrails). Dùng sau khi prd.md và domain.md đã có nội dung.
4
+ ---
5
+
6
+ # spec-sad
7
+
8
+ ## Overview
9
+
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
+
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
+
14
+ **Guardrails là phần quan trọng nhất của SAD.** Thiếu guardrails = agent tự quyết định tech pattern mà không có constraint.
15
+
16
+ ## When to Use
17
+
18
+ - `sad.md` chưa có hoặc còn rỗng
19
+ - Tech stack thay đổi đáng kể và cần cập nhật architectural decisions
20
+ - Cần thêm guardrail mới sau khi phát hiện vấn đề trong quá trình implement
21
+
22
+ ## When NOT to Use
23
+
24
+ - `prd.md` chưa có nội dung → chạy `/spec-prd` trước
25
+ - Đang muốn thiết kế một feature cụ thể → dùng `/spec-fdd`
26
+
27
+ ---
28
+
29
+ ## Process
30
+
31
+ ### Bước 1: Kiểm tra preconditions
32
+
33
+ **Đọc `specs/main/prd.md`:**
34
+
35
+ - **Chưa tồn tại hoặc là template** → dừng ngay:
36
+ > `prd.md` chưa có nội dung. Hãy chạy `/spec-prd` trước.
37
+
38
+ - **Đã có nội dung** → đọc để lấy: NFRs (performance, security, availability targets), business constraints, scope.
39
+
40
+ **Đọc `specs/main/domain.md`:**
41
+
42
+ - **Chưa tồn tại hoặc là template** → dừng ngay:
43
+ > `domain.md` chưa có nội dung. Hãy chạy `/spec-domain` trước.
44
+
45
+ - **Đã có nội dung** → đọc để hiểu: các entities chính, có event-driven behavior không, volume ước tính.
46
+
47
+ **Đọc `specs/main/sad.md`:**
48
+
49
+ - **Chưa tồn tại** → tiến hành Bước 2 (full interview).
50
+
51
+ - **Đã 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ì.
52
+
53
+ **Các sections cần quét** (theo thứ tự):
54
+
55
+ | # | Section | Có nội dung thực? |
56
+ | --- | --- | --- |
57
+ | 1 | Architectural Style | ✓ đã có / ✗ trống/thiếu |
58
+ | 2 | System Overview | ✓ đã có / ✗ trống/thiếu |
59
+ | 3 | Tech Stack | ✓ đã có / ✗ trống/thiếu |
60
+ | 4 | Cross-Cutting Concerns | ✓ đã có / ✗ trống/thiếu |
61
+ | 5 | Inter-Service Communication | ✓ đã có / ✗ trống/thiếu |
62
+ | 6 | Infrastructure Overview | ✓ đã có / ✗ trống/thiếu |
63
+ | 7 | Architectural Guardrails | ✓ đã có / ✗ trống/thiếu |
64
+
65
+ 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.
66
+
67
+ 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:
68
+
69
+ ```
70
+ sad.md hiện tại:
71
+ [1] Architectural Style ✓ đã có
72
+ [2] System Overview ✓ đã có
73
+ [3] Tech Stack ✓ đã có
74
+ [4] Cross-Cutting Concerns ✗ chưa có — cần bổ sung
75
+ [5] Inter-Service Communication ✓ đã có
76
+ [6] ADR Log ⚠ không có trong template
77
+ [7] Infrastructure Overview ✓ đã có
78
+ [8] Architectural Guardrails ✓ đã có
79
+ [A] Interview tất cả sections
80
+
81
+ Chọn số hoặc A:
82
+ ```
83
+
84
+ - User chọn số section thuộc template → interview section đó rồi merge vào file.
85
+ - User chọn số section thừa (⚠) → xoá section đó khỏi file ngay, không hỏi thêm.
86
+ - User chọn A → interview tuần tự tất cả sections thuộc template (sections thừa không bị đụng tới).
87
+
88
+ ---
89
+
90
+ ### Bước 2: Gather — interview có cấu trúc
91
+
92
+ Tóm tắt context đọc được và surface assumptions:
93
+
94
+ ```
95
+ TỪ PRD & DOMAIN TÔI HIỂU:
96
+ - NFRs: {list NFRs từ prd — performance targets, availability, security}
97
+ - Entities chính: {list từ domain}
98
+ - Constraints: {business constraints từ prd}
99
+
100
+ ASSUMPTIONS TÔI ĐANG ĐẶT RA:
101
+ 1. {assumption về scale, team size, v.v.}
102
+ 2. {assumption về existing infrastructure nếu có}
103
+ → Sửa lại nếu sai trước khi tiếp tục.
104
+ ```
105
+
106
+ Hỏi tuần tự từng phần:
107
+
108
+ **Phần 1 — Architectural Style:**
109
+ > Hệ thống sẽ theo kiến trúc nào? (Monolith / Modular Monolith / Microservices / Event-driven / ...)
110
+ > Nếu chưa quyết định, tôi có thể đề xuất dựa trên NFRs và team size — muốn không?
111
+
112
+ Nếu user muốn đề xuất → đề xuất 2-3 option với trade-offs rõ ràng, để user chọn. Không quyết định thay.
113
+
114
+ **Phần 2 — Tech Stack:**
115
+ > Tech stack cho từng layer: Frontend, Backend, Database, Infrastructure?
116
+ > Với mỗi lựa chọn: lý do chọn là gì? (performance, team familiarity, ecosystem...)
117
+
118
+ Nếu user chưa quyết định layer nào → đề xuất options dựa trên NFRs và architectural style đã chọn.
119
+
120
+ **Phần 3 — Cross-Cutting Concerns:**
121
+ > Authentication & Authorization: strategy nào? (JWT, session, OAuth, API key...)
122
+ > Error Handling: pattern nào? (global handler, error codes, retry policy...)
123
+ > Logging & Monitoring: approach nào? (structured logging, tracing, alerting...)
124
+ > Caching: có dùng cache không? Ở layer nào? Strategy gì?
125
+
126
+ **Phần 4 — Inter-Service Communication:** *(chỉ hỏi nếu không phải monolith)*
127
+ > Các service communicate với nhau thế nào? (REST, gRPC, message queue, events...)
128
+ > Có service nào cần sync call vs async không?
129
+
130
+ **Phần 5 — Infrastructure:**
131
+ > Deploy ở đâu? (cloud provider, on-premise, hybrid)
132
+ > Có bao nhiêu môi trường? (dev, staging, prod)
133
+ > Deployment strategy: (containerized, serverless, VM...)
134
+
135
+ **Phần 6 — Architectural Guardrails:** *(quan trọng nhất)*
136
+ > Dựa trên tech stack và concerns vừa thảo luận, tôi sẽ đề xuất một bộ guardrails. Bạn review và thêm/bớt nhé.
137
+
138
+ Đề xuất guardrails cụ thể dựa trên những gì đã thu thập. Ví dụ:
139
+ - Nếu dùng ORM → `GUARD-XXX: Không dùng raw SQL, phải qua ORM`
140
+ - Nếu có external API → `GUARD-XXX: Mọi external API call phải có retry + timeout`
141
+ - Nếu layered architecture → `GUARD-XXX: Không để business logic trong API/controller layer`
142
+
143
+ ---
144
+
145
+ ### Bước 3: Write — sinh draft
146
+
147
+ Dùng `.claude/templates/main/sad-template.md` làm skeleton, điền nội dung từ interview vào từng section.
148
+
149
+ Hiển thị draft cho user xem — **chưa ghi file**.
150
+
151
+ ---
152
+
153
+ ### Bước 4: Review — xác nhận với user
154
+
155
+ Trình bày draft và chú ý hỏi riêng về Guardrails:
156
+ > Phần Architectural Guardrails có đủ và đúng không? Đây là phần agent sẽ dùng để validate mọi technical design sau này.
157
+
158
+ 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.
159
+
160
+ ---
161
+
162
+ ### Bước 5: Save
163
+
164
+ Ghi nội dung đã được confirm vào `specs/main/sad.md`.
165
+
166
+ Thông báo kết quả:
167
+ ```
168
+ ✓ specs/main/sad.md đã được cập nhật (status: draft)
169
+
170
+ Bước tiếp theo:
171
+ - /spec-frd {feature-name} → định nghĩa requirements của từng feature
172
+ ```
173
+
174
+ ---
175
+
176
+ ## Common Rationalizations
177
+
178
+ | Rationalization | Reality |
179
+ | --- | --- |
180
+ | "Tech stack thì sau quyết định cũng được" | Tech stack ảnh hưởng đến guardrails. Không có guardrails = agent tự ý chọn pattern khi sinh tech.md. |
181
+ | "Guardrails thì ghi ít thôi, ghi nhiều phức tạp" | Mỗi guardrail thiếu là một loại technical debt có thể xảy ra. Ghi đủ ngay từ đầu. |
182
+ | "System diagram thì vẽ sau" | Diagram buộc phải nghĩ về component boundaries. Không có diagram = chưa rõ architecture. |
183
+ | "Cross-cutting concerns thì ai cũng biết rồi" | "Auth strategy" chưa được ghi = mỗi feature tự implement theo cách riêng. |
184
+
185
+ ## Red Flags
186
+
187
+ - Guardrails section rỗng hoặc chỉ có 1-2 item chung chung
188
+ - Tech stack chọn mà không có lý do
189
+ - Lý do chọn tech là "quen dùng" mà không đối chiếu với NFRs
190
+ - System Overview không có diagram hoặc mô tả component boundaries
191
+ - Cross-cutting concerns bỏ trống
192
+
193
+ ## Verification
194
+
195
+ Trước khi kết thúc, kiểm tra:
196
+
197
+ - [ ] Frontmatter đầy đủ và đúng schema
198
+ - [ ] Architectural Style có lý do gắn với NFRs hoặc constraints
199
+ - [ ] Mỗi tech stack item có lý do chọn rõ ràng
200
+ - [ ] Tất cả 4 cross-cutting concerns đã được điền (auth, error, logging, caching)
201
+ - [ ] Guardrails có ít nhất 3 item, mỗi item cụ thể và actionable
202
+ - [ ] User đã confirm — đặc biệt phần Guardrails — trước khi ghi file
@@ -0,0 +1,195 @@
1
+ ---
2
+ name: spec-tech
3
+ description: Tạo tech.md cho một integration dựa trên spec.md đã được approve. Dùng sau khi BA đã hoàn thành spec.md. Nhận slug của integration từ argument hoặc cho phép chọn từ danh sách các spec.md chưa có tech.md.
4
+ ---
5
+
6
+ # spec-tech
7
+
8
+ ## Overview
9
+
10
+ Tạo `tech.md` cho một integration trong `specs/integrations/{slug}/`.
11
+
12
+ `tech.md` là technical design — định nghĩa **how to build**: solution approach, data model changes, interfaces. Phải có `spec.md` đã approve trước khi chạy skill này.
13
+
14
+ ## When to Use
15
+
16
+ - `spec.md` đã được BA approve và DEV cần thiết kế technical design
17
+ - Bắt đầu implement nhưng chưa có `tech.md`
18
+
19
+ ## When NOT to Use
20
+
21
+ - `spec.md` chưa có hoặc chưa được approve → chạy `/spec-new` trước
22
+ - `sad.md` chưa có → chạy `/spec-sad` trước (cần tech stack để đưa ra design đúng hướng)
23
+ - Chỉ muốn cập nhật tech.md đã có → edit file trực tiếp
24
+
25
+ ---
26
+
27
+ ## Process
28
+
29
+ ### Bước 1: Xác định integration
30
+
31
+ Quét thư mục `specs/integrations/`. Liệt kê **tất cả** integrations có `spec.md`, đánh dấu những cái đã có `tech.md`:
32
+
33
+ ```
34
+ Integrations:
35
+
36
+ [1] f001-authentication — User Authentication
37
+ [2] f003-app-browsing — App Browsing & Opt-in ✓ có tech.md
38
+ [3] f004-credit-system — Credit System
39
+
40
+ Chọn số integration:
41
+ ```
42
+
43
+ Nếu không có integration nào → thông báo:
44
+ > Chưa có integration nào. Hãy chạy `/spec-new` trước.
45
+
46
+ **Nếu có ARGUMENT** → đây là số thứ tự trong danh sách trên (ví dụ `1`, `2`, hoặc `001`). Parse thành số nguyên, bỏ qua leading zeros, map vào integration tương ứng — không cần hiển thị danh sách, chọn luôn.
47
+
48
+ Nếu integration đã có `tech.md` → hỏi trước khi tiếp tục:
49
+ > `tech.md` đã tồn tại cho integration này. Tiếp tục sẽ ghi đè. Tiếp tục không?
50
+
51
+ ---
52
+
53
+ ### Bước 2: Load context
54
+
55
+ Load các file sau:
56
+
57
+ - `specs/integrations/{slug}/spec.md` — đọc toàn bộ: Problem Statement, Requirements, Acceptance Criteria, Out of Scope
58
+ - `specs/main/sad.md` — đọc Tech Stack và Architectural Guardrails
59
+ - `specs/main/domain.md` — đọc Entities và Business Rules
60
+
61
+ Tóm tắt context và surface assumptions:
62
+
63
+ ```
64
+ TỪ SPEC & SAD TÔI HIỂU:
65
+ - Integration: {title}
66
+ - Yêu cầu chính: {tóm tắt requirements từ spec.md}
67
+ - Tech stack: {từ sad.md}
68
+ - Entities liên quan: {từ domain.md}
69
+ - Guardrails cần tuân theo: {list GUARD-XXX từ sad.md}
70
+
71
+ ASSUMPTIONS TÔI ĐANG ĐẶT RA:
72
+ 1. {assumption về approach}
73
+ 2. {assumption về dependencies}
74
+ → Sửa lại nếu sai trước khi tiếp tục.
75
+ ```
76
+
77
+ ---
78
+
79
+ ### Bước 3: Interview
80
+
81
+ Hỏi tuần tự, từng phần — không hỏi tất cả cùng lúc:
82
+
83
+ **Phần 1 — Solution Overview:**
84
+ > Approach kỹ thuật nào sẽ dùng? Tại sao chọn approach này (so với alternatives)?
85
+ > Nếu chưa rõ, tôi có thể đề xuất dựa trên sad.md và requirements — muốn không?
86
+
87
+ Nếu user muốn đề xuất → đề xuất 2-3 options với trade-offs rõ ràng, để user chọn. Không quyết định thay.
88
+
89
+ **Phần 2 — Data Model Changes:**
90
+ > Integration này có thêm/sửa/xóa entity hoặc field nào không?
91
+ > Nếu có, thay đổi gì và ảnh hưởng thế nào đến business rules hiện tại?
92
+
93
+ Bỏ qua nếu không có data model changes.
94
+
95
+ **Phần 3 — Interface Changes:**
96
+ > Có API endpoints mới hoặc thay đổi không? Events, queue messages?
97
+ > Với mỗi endpoint: method, path, request/response shape, auth requirement.
98
+
99
+ **Phần 4 — Implementation Notes:**
100
+ > Có điểm kỹ thuật đặc biệt nào cần lưu ý không? (edge cases, ordering constraints, known gotchas...)
101
+
102
+ Bỏ qua nếu không có.
103
+
104
+ Nếu câu trả lời vague → hỏi lại. Ví dụ:
105
+ - "dùng JWT" → "JWT lưu ở đâu? expiry bao lâu? refresh token có không?"
106
+ - "tạo bảng mới" → "fields gì? quan hệ với entity nào trong domain?"
107
+
108
+ ---
109
+
110
+ ### Bước 4: Write — sinh draft
111
+
112
+ Tổng hợp và viết draft `tech.md`:
113
+
114
+ **Cấu trúc file**: dùng `.claude/templates/integrations/tech-template.md` làm skeleton, điền nội dung từ interview vào.
115
+
116
+ **Cascade Proposals** — điền theo hướng dẫn sau:
117
+
118
+ ### sad.md
119
+
120
+ {Đề xuất cập nhật nếu phát hiện quyết định kiến trúc mới, tech stack thay đổi, hoặc guardrail mới cần thêm. Hoặc "Không có thay đổi đề xuất."}
121
+
122
+ ### domain.md
123
+
124
+ {Đề xuất cập nhật nếu phát hiện entity hoặc business rule mới trong quá trình thiết kế. Hoặc "Không có thay đổi đề xuất."}
125
+
126
+ ### fdd.md
127
+
128
+ {Một trong hai:}
129
+
130
+ **Tạo mới** `specs/main/features/{feature-id}-{feature-slug}/fdd.md`
131
+ - Dùng khi feature chưa có fdd.md
132
+ - Thư mục theo convention: `{number}-{feature-slug}` (ví dụ: `001-authentication`)
133
+ - Nội dung đề xuất: {tóm tắt Module Structure, Data Flow, Interfaces từ tech.md}
134
+
135
+ **Cập nhật** `specs/main/features/{feature-id}-{feature-slug}/fdd.md`
136
+ - Dùng khi fdd.md đã tồn tại, ghi rõ thay đổi cụ thể cần thêm/sửa
137
+
138
+ {Hoặc "Không liên quan" nếu integration không gắn với feature cụ thể nào trong prd.md.}
139
+ ```
140
+
141
+ Hiển thị draft cho user xem — **chưa ghi file**.
142
+
143
+ ---
144
+
145
+ ### Bước 5: Review — xác nhận với user
146
+
147
+ > Draft trên đã đúng chưa?
148
+ > - Technical Design có đủ để DEV implement không?
149
+ > - Cascade Proposals (nếu có) — cần approve trước khi tiến hành.
150
+
151
+ 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.
152
+
153
+ ---
154
+
155
+ ### Bước 6: Save
156
+
157
+ Ghi nội dung đã confirm vào `specs/integrations/{slug}/tech.md`.
158
+
159
+ Thông báo kết quả:
160
+ ```
161
+ ✓ specs/integrations/{slug}/tech.md đã được tạo (status: draft)
162
+
163
+ Bước tiếp theo:
164
+ - Review và approve tech.md
165
+ - Implement theo tech.md
166
+ - Sau khi done: đổi status F-XXX trong prd.md thành DONE
167
+ - Nếu Cascade Proposals có thay đổi → chạy /spec-domain hoặc /spec-sad
168
+ ```
169
+
170
+ ---
171
+
172
+ ## Common Rationalizations
173
+
174
+ | Rationalization | Reality |
175
+ | --- | --- |
176
+ | "Tech design thì code xong mới biết được" | Không cần design hoàn hảo, cần đủ để thống nhất approach trước khi viết code. |
177
+ | "Interface thì ghi sau khi implement xong" | Interface chưa được agree = BA không biết integration làm gì, không thể verify AC. |
178
+ | "Cascade Proposals thì sau cập nhật cũng được" | Domain và SAD là shared context. Cập nhật trễ = các tech.md sau dùng context sai. |
179
+
180
+ ## Red Flags
181
+
182
+ - Solution Overview không có lý do chọn approach — chỉ mô tả "sẽ làm X" mà không giải thích tại sao
183
+ - Interface Changes trống trong khi spec.md có AC về API/response shape
184
+ - Data Model Changes bỏ qua nhưng spec.md có requirement về data mới
185
+ - Cascade Proposals không được review trước khi approve
186
+
187
+ ## Verification
188
+
189
+ Trước khi ghi file, kiểm tra:
190
+
191
+ - [ ] Solution Overview có lý do chọn approach (không chỉ mô tả)
192
+ - [ ] Mỗi Acceptance Criterion trong spec.md đều được cover bởi design
193
+ - [ ] Interface Changes đầy đủ method, path, auth requirement (nếu có)
194
+ - [ ] Cascade Proposals đã được user review
195
+ - [ ] User đã confirm draft trước khi ghi file