@relipa/ai-flow-kit 0.1.3 → 0.1.4-beta.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.
Files changed (64) hide show
  1. package/README.md +113 -0
  2. package/bin/aiflow.js +49 -1
  3. package/custom/skills/ba-skills/skill-ba-phan-tich-ban-dau-v1.md +44 -0
  4. package/custom/skills/ba-skills/skill-ba-prototype-v1.md +35 -0
  5. package/custom/skills/ba-skills/skill-ba-qa-template-v1.md +21 -0
  6. package/custom/skills/ba-skills/skill-ba-qa-v1.md +35 -0
  7. package/custom/skills/ba-skills/skill-ba-template-phan-tich-ban-dau-v1.md +30 -0
  8. package/custom/skills/ba-skills/skill-ba-template-uc-v1.md +83 -0
  9. package/custom/skills/ba-skills/skill-ba-ve-luong-mermaid-v1.md +35 -0
  10. package/custom/skills/ba-skills/skill-ba-viet-spec-uc-v1.md +38 -0
  11. package/custom/skills/ba-skills/skill-ba-xay-dung-business-rules-v1.md +39 -0
  12. package/custom/skills/execute-flow/SKILL.md +22 -2
  13. package/custom/skills/gate-review/SKILL.md +195 -0
  14. package/custom/skills/generate-test-report/SKILL.md +1 -1
  15. package/custom/skills/generate-testcase/SKILL.md +52 -5
  16. package/custom/skills/test-analysis/SKILL.md +39 -1
  17. package/custom/skills/test-skills/categories/00-core/00.01.requirement-analysis.md +111 -0
  18. package/custom/skills/test-skills/categories/00-core/00.02.risk-analysis.md +24 -0
  19. package/custom/skills/test-skills/categories/00-core/00.03.test-scenario-builder.md +90 -0
  20. package/custom/skills/test-skills/categories/00-core/00.04.testcase-review.md +68 -0
  21. package/custom/skills/test-skills/categories/01-test-design/01.01.boundary-value-analysis.md +30 -0
  22. package/custom/skills/test-skills/categories/01-test-design/01.02.equivalence.partitioning.md +27 -0
  23. package/custom/skills/test-skills/categories/01-test-design/01.03.decision-table.md +26 -0
  24. package/custom/skills/test-skills/categories/01-test-design/01.04.state.transition.md +26 -0
  25. package/custom/skills/test-skills/categories/01-test-design/01.05.pairwise.md +25 -0
  26. package/custom/skills/test-skills/categories/01-test-design/01.06.error-guessing.md +28 -0
  27. package/custom/skills/test-skills/categories/02-ui-testing/02.01.UI-layout.md +29 -0
  28. package/custom/skills/test-skills/categories/02-ui-testing/02.02.form-validation.md +57 -0
  29. package/custom/skills/test-skills/categories/02-ui-testing/02.03.navigation.md +27 -0
  30. package/custom/skills/test-skills/categories/02-ui-testing/02.04.localization.md +27 -0
  31. package/custom/skills/test-skills/categories/02-ui-testing/02.05.accessibility.md +27 -0
  32. package/custom/skills/test-skills/categories/03-business-testing/03.01.CRUD-testing.md +51 -0
  33. package/custom/skills/test-skills/categories/03-business-testing/03.02.workflow-testing.md +44 -0
  34. package/custom/skills/test-skills/categories/03-business-testing/03.03.permission-testing.md +41 -0
  35. package/custom/skills/test-skills/categories/03-business-testing/03.04.dependency-validation.md +40 -0
  36. package/custom/skills/test-skills/categories/03-business-testing/03.05.notification-testing.md +43 -0
  37. package/custom/skills/test-skills/categories/03-business-testing/03.06.calculation.testing.md +44 -0
  38. package/custom/skills/test-skills/categories/04-data-testing/04.01.database-testing.md +43 -0
  39. package/custom/skills/test-skills/categories/04-data-testing/04.02.import-export-testing.md +43 -0
  40. package/custom/skills/test-skills/categories/04-data-testing/04.03.data-mapping.md +39 -0
  41. package/custom/skills/test-skills/categories/04-data-testing/04.04.duplicate-handling.md +39 -0
  42. package/custom/skills/test-skills/categories/04-data-testing/04.05.migration.md +42 -0
  43. package/custom/skills/test-skills/categories/05-integration/05.01.API-testing.md +37 -0
  44. package/custom/skills/test-skills/categories/05-integration/05.02.third-party-integration.md +36 -0
  45. package/custom/skills/test-skills/categories/05-integration/05.03.batch-processing.md +38 -0
  46. package/custom/skills/test-skills/categories/05-integration/05.04.file-upload-download.md +40 -0
  47. package/custom/skills/test-skills/categories/08-domain-skills/CMS.md +34 -0
  48. package/custom/skills/test-skills/categories/08-domain-skills/Ecommerce.md +35 -0
  49. package/custom/skills/test-skills/categories/99-review/99.01.coverage-review.md +35 -0
  50. package/custom/skills/test-skills/categories/99-review/99.02.knowledge-learning.md +34 -0
  51. package/custom/skills/test-skills/categories/99-review/99.03.repository-update.md +33 -0
  52. package/custom/skills/test-skills/categories/99-review/99.04.change-history.md +38 -0
  53. package/custom/skills/test-skills/rules/Directory_and_Naming_Convention.md +257 -0
  54. package/custom/skills/test-skills/rules/QA_Writing_Standards.md +49 -0
  55. package/custom/skills/test-skills/template/template_testcase.md +92 -0
  56. package/custom/templates/shared/create-spec-workflow.md +441 -0
  57. package/custom/templates/shared/create-testcase-workflow.md +470 -0
  58. package/custom/templates/shared/gate-workflow.md +122 -16
  59. package/package.json +2 -2
  60. package/scripts/create-score-excel.js +17 -7
  61. package/scripts/init.js +48 -1
  62. package/scripts/review.js +91 -0
  63. package/scripts/update.js +4 -1
  64. package/scripts/use.js +22 -16
@@ -0,0 +1,441 @@
1
+ ## [BA] 4-Gate Spec Creation Workflow
2
+
3
+ > **For:** `create-spec`
4
+ > **Persona:** Business Analyst (BA)
5
+ > **Goal:** Chuyển đổi yêu cầu thô (Jira / Backlog / file) thành tài liệu Đặc tả Use Case (UC Spec) hoàn chỉnh để bàn giao Dev/Test, tuân theo quy trình UCflow.
6
+ > **Interaction Rules:** Hỏi ONE câu hỏi tại một thời điểm — đợi BA trả lời trước khi tiếp tục. KHÔNG hỏi nhiều câu cùng lúc.
7
+
8
+ ---
9
+
10
+ ### BA Skills
11
+
12
+ Các skill sau đây được cài tự động vào `.claude/skills/ba-skills/` khi chạy `ak init` hoặc `ak up`.
13
+
14
+ | Skill | File |
15
+ |---|---|
16
+ | `skill-ba-phan-tich-ban-dau` | `.claude/skills/ba-skills/skill-ba-phan-tich-ban-dau-v1.md` |
17
+ | `skill-ba-qa` | `.claude/skills/ba-skills/skill-ba-qa-v1.md` |
18
+ | `skill-ba-prototype` | `.claude/skills/ba-skills/skill-ba-prototype-v1.md` |
19
+ | `skill-ba-ve-luong-mermaid` | `.claude/skills/ba-skills/skill-ba-ve-luong-mermaid-v1.md` |
20
+ | `skill-ba-xay-dung-business-rules` | `.claude/skills/ba-skills/skill-ba-xay-dung-business-rules-v1.md` |
21
+ | `skill-ba-viet-spec-uc` | `.claude/skills/ba-skills/skill-ba-viet-spec-uc-v1.md` |
22
+ | `template-phan-tich-ban-dau` | `.claude/skills/ba-skills/skill-ba-template-phan-tich-ban-dau-v1.md` |
23
+ | `template-qa` | `.claude/skills/ba-skills/skill-ba-qa-template-v1.md` |
24
+ | `template-uc` | `.claude/skills/ba-skills/skill-ba-template-uc-v1.md` |
25
+
26
+ ---
27
+
28
+ ### Cấu trúc thư mục đầu ra
29
+
30
+ ```
31
+ docs/ak-{project}/spec/
32
+ ├── phan-tich/
33
+ │ ├── [functionId]_phan-tich(1).md ← Gate 1 tạo
34
+ │ └── [functionId]_phan-tich(n).md ← Gate 2 cập nhật (tăng version)
35
+ ├── QA/
36
+ │ ├── [functionId]_QA(1).md ← Gate 1 tạo
37
+ │ └── [functionId]_QA(m).md ← Gate 2 tạo thêm nếu còn Open
38
+ ├── design/
39
+ │ └── [functionId]_design.html ← Gate 3 tạo
40
+ └── UC/
41
+ └── [functionId]_UC.md ← Gate 4 tạo
42
+ ```
43
+
44
+ Ví dụ: `functionId = AD10`, `project = coinbook` → thư mục gốc là `docs/ak-coinbook/spec/`
45
+
46
+ ---
47
+
48
+ ### Quy trình tổng quan 4 Gates
49
+
50
+ ```
51
+ (spec/ = docs/ak-{project}/spec/ — viết tắt cho ngắn gọn)
52
+
53
+ [Input: Jira / Backlog / file] → Pre-flight: xác định functionId + thư mục đầu ra
54
+
55
+ Gate 1: Phân tích yêu cầu & Tạo Q&A → spec/phan-tich/ + spec/QA/
56
+ ↓ APPROVED
57
+ Gate 2: Cập nhật phản hồi Q&A ←─────────────────────────────────────────┐
58
+ ↓ còn Open → tạo QA(m+1) → đợi BA phản hồi → lặp lại ───────────────┘
59
+ ↓ tất cả Confirmed + APPROVED
60
+ Gate 3: Thiết kế UI Prototype HTML/CSS → spec/design/
61
+ ↓ APPROVED
62
+ Gate 4: Viết đặc tả Use Case Spec → spec/UC/
63
+ ↓ APPROVED
64
+ Bàn giao Dev/Test
65
+ ```
66
+
67
+ ---
68
+
69
+ ### GATE 1 — Phân tích yêu cầu ban đầu & Tạo Q&A (auto-start)
70
+
71
+ **Mục tiêu:** Tiếp nhận đầu vào, hiểu nghiệp vụ, phát hiện khoảng trống (Gaps), lập bản phân tích sơ bộ và danh sách Q&A.
72
+
73
+ **Đầu ra (Outputs):**
74
+ - `docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(1).md`
75
+ - `docs/ak-{project}/spec/QA/[functionId]_QA(1).md`
76
+
77
+ **Bước thực hiện:**
78
+
79
+ #### Bước 0: Pre-flight — Xác định functionId và thư mục đầu ra
80
+
81
+ **Xác định `functionId`:**
82
+
83
+ Kiểm tra theo thứ tự ưu tiên:
84
+ 1. Trường `functionId` hoặc `screenId` trong `.aiflow/context/current.json`
85
+ 2. Rút gọn từ `ticketId` — bỏ dấu gạch, giữ ký hiệu (ví dụ: `AD-10` → `AD10`)
86
+ 3. Nếu không tìm thấy → **hỏi BA ngay**:
87
+
88
+ ```
89
+ Không tìm thấy functionId trong context.
90
+ Vui lòng cung cấp mã định danh cho chức năng này (ví dụ: AD10, UC-LOGIN, PM-003):
91
+ ```
92
+
93
+ → Đợi BA trả lời, ghi nhận giá trị, dùng cho toàn bộ workflow.
94
+
95
+ **Xác định `{project}` và thư mục đầu ra:**
96
+
97
+ 1. Lấy `{project}` theo thứ tự ưu tiên:
98
+ - Trường `project` trong `.aiflow/context/current.json`
99
+ - Tên thư mục gốc workspace (chuyển lowercase, thay space bằng `-`)
100
+
101
+ 2. Kiểm tra tồn tại thư mục `docs/ak-{project}/spec/` trong root dự án:
102
+ - **Tìm thấy** → thông báo xác nhận:
103
+ ```
104
+ ✓ Thư mục đầu ra: docs/ak-{project}/spec/
105
+ ✓ functionId: [functionId]
106
+ → Bắt đầu Gate 1...
107
+ ```
108
+ - **Không tìm thấy** → **hỏi BA**:
109
+ ```
110
+ Không tìm thấy thư mục docs/ak-{project}/spec/.
111
+ Tên project là gì? (ví dụ: coinbook, crm-app)
112
+ ```
113
+ → Nhận tên project từ BA → chuyển lowercase → tạo toàn bộ cây thư mục:
114
+ ```
115
+ docs/ak-{project}/spec/phan-tich/
116
+ docs/ak-{project}/spec/QA/
117
+ docs/ak-{project}/spec/design/
118
+ docs/ak-{project}/spec/UC/
119
+ ```
120
+ → Thông báo:
121
+ ```
122
+ ✓ Đã tạo thư mục: docs/ak-{project}/spec/
123
+ ✓ functionId: [functionId]
124
+ → Bắt đầu Gate 1...
125
+ ```
126
+
127
+ #### Bước 1: Đọc và tổng hợp đầu vào
128
+ - Đọc `.aiflow/context/current.json` — tiêu đề, mô tả, acceptance criteria, liên kết tài liệu
129
+ - Nếu description có URL → chạy `ak fetch-links <url>` để tải nội dung
130
+ - Nếu có `supplementaryContext[]` → đọc từng item (file đính kèm, ticket liên quan, comment PM)
131
+ - Nếu có file yêu cầu thô được chỉ định → đọc file đó
132
+
133
+ #### Bước 1b: Đọc Source Code
134
+
135
+ Chạy ngay sau Bước 1, trước khi bắt đầu phân tích.
136
+
137
+ Nếu workspace mở dạng parent folder chứa cả `ak docs` lẫn source code repos:
138
+
139
+ 1. Xác định repo liên quan: đọc field `repo` trong `.aiflow/context/current.json`, hoặc suy từ tên module/màn hình. Nếu không rõ → hỏi BA 1 câu: "Feature này thuộc repo nào?"
140
+ 2. **Nếu GitNexus MCP có sẵn** (`.mcp.json` có entry `gitnexus`): dùng GitNexus thay vì đọc file trực tiếp:
141
+ - `gitnexus: query("tên màn hình hoặc chức năng")` → tìm code liên quan
142
+ - `gitnexus: context("ClassName")` → xem toàn bộ class/service/entity
143
+ 3. **Nếu không có GitNexus**: đọc trực tiếp các file liên quan trong repo:
144
+ - Data models / Entity / DB schema — hiểu cấu trúc dữ liệu hiện tại
145
+ - API endpoints / Routes — hiểu những gì đã tồn tại
146
+ - Service / Business Logic — hiểu behavior hiện tại
147
+ - Config / Constants — ràng buộc kỹ thuật, giới hạn hệ thống
148
+ 4. Tích hợp vào phân tích:
149
+ - Constraints kỹ thuật từ DB schema (kiểu dữ liệu, độ dài, nullable)
150
+ - Behavior hiện tại của hệ thống (để xác định delta — cái gì cần thêm/sửa/xóa)
151
+ - Pattern kiến trúc đang dùng (để đề xuất solution phù hợp)
152
+ - Các API hiện có (tránh đề xuất trùng lặp hoặc mâu thuẫn)
153
+
154
+ > ⚠️ Source code dùng để **hiểu hệ thống hiện tại** và phát hiện constraints kỹ thuật — giúp BA đặt câu hỏi chuẩn xác hơn và tránh đề xuất giải pháp mâu thuẫn với architecture. Business requirement vẫn đến từ stakeholder, không từ code.
155
+
156
+ #### Bước 2: Phân tích yêu cầu và xác định Gaps
157
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-phan-tich-ban-dau-v1.md` và làm theo
158
+ - Phân biệt Facts (thông tin đã chốt) vs Assumptions (tự suy luận cần kiểm chứng)
159
+ - Xem xét các khía cạnh: validate dữ liệu, định dạng nhập liệu, phân quyền, xử lý ngoại lệ, thông báo lỗi
160
+ - Nếu có điểm mơ hồ cốt yếu → hỏi ONE câu làm rõ, đợi BA trả lời trước khi tiếp tục
161
+
162
+ #### Bước 3: Soạn thảo Kết quả phân tích sơ bộ
163
+ - **READ template:** `.claude/skills/ba-skills/skill-ba-template-phan-tich-ban-dau-v1.md`
164
+ - Điền đầy đủ các mục theo template: Actors, Facts, Assumptions, Gap Analysis table
165
+ - Lưu: `docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(1).md`
166
+
167
+ #### Bước 4: Soạn thảo danh sách Q&A
168
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-qa-v1.md`
169
+ - **READ template:** `.claude/skills/ba-skills/skill-ba-qa-template-v1.md`
170
+ - Chuyển từng Gap thành câu hỏi cụ thể, khách quan, không định hướng
171
+ - Mỗi câu hỏi tương ứng với ít nhất một Gap. Trạng thái ban đầu: **Open**
172
+ - Lưu: `docs/ak-{project}/spec/QA/[functionId]_QA(1).md`
173
+
174
+ #### Bước 5: Gate Review & Pause
175
+ - **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-1-[functionId].md`
176
+ - **Kiểm tra Q&A bắt buộc:** Đọc `QA(1).md` — đếm số câu có trạng thái **Open**
177
+ - Hiển thị gate pause message — chờ phản hồi từ BA
178
+
179
+ **Nếu nhận được APPROVED mà QA(1).md còn câu hỏi Open → từ chối ngay, hiển thị:**
180
+
181
+ ```
182
+ ⛔ GATE 1 BLOCKED — Còn [N] câu hỏi chưa được trả lời trong QA(1).md.
183
+
184
+ | ID | Câu hỏi còn Open |
185
+ |----|-----------------|
186
+ | [Q_ID] | [nội dung câu hỏi] |
187
+
188
+ Vui lòng cung cấp câu trả lời theo một trong 3 cách:
189
+ → Option A: nhập trực tiếp — `Q1: [trả lời], Q2: [trả lời]`
190
+ → Option B: paste nội dung bảng Q&A đã điền vào chat
191
+ → Option C: đặt file `[functionId]_QA(1)_response.md` vào thư mục QA/ rồi gõ NEXT
192
+
193
+ ❌ APPROVED không được chấp nhận cho đến khi 100% câu hỏi đã Confirmed.
194
+ ```
195
+
196
+ **Khi APPROVED (chỉ sau khi tất cả câu hỏi trong QA(1).md đã Confirmed):**
197
+ → **INVOKE** `gate-review` skill (verify mode) — chạy `ak review check --gate 1 --ticket [functionId]`
198
+ → Nếu passed: `ak gate 1 approved --ticket [functionId]` → chuyển Gate 2
199
+ → Nếu blocked: làm theo gate-review skill response protocol
200
+
201
+ **Definition of Done:**
202
+ - [ ] `functionId` và `{project}` đã được xác định và thư mục đầu ra đã sẵn sàng
203
+ - [ ] File `phan-tich(1).md` tạo đúng vị trí, cấu trúc đúng template, có bảng Gap Analysis
204
+ - [ ] File `QA(1).md` có ít nhất 1 câu hỏi cho mỗi Gap, tất cả trạng thái **Open**
205
+ - [ ] Không có giả định nào được tự ý chốt thành Spec mà không đưa vào Q&A
206
+
207
+ > **Telemetry:** Run `ak gate 1 start --ticket [functionId]` khi bắt đầu gate này.
208
+ > Run `ak gate 1 approved --ticket [functionId]` sau khi gate-review verify passed. Run as-is — không thêm shell redirects.
209
+
210
+ ---
211
+
212
+ ### GATE 2 — Cập nhật phản hồi Q&A (lặp đến khi tất cả Confirmed)
213
+
214
+ **Mục tiêu:** Tiếp nhận câu trả lời từ BA/khách hàng, cập nhật trạng thái Q&A, tích hợp thông tin vào tài liệu phân tích, và quyết định vòng Q&A tiếp theo hay chốt để tiến Gate 3.
215
+
216
+ **Đầu vào (Inputs):**
217
+ - Phản hồi Q&A từ BA (xem 3 option bên dưới)
218
+ - `docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n).md` — phiên bản hiện tại
219
+ - `docs/ak-{project}/spec/QA/[functionId]_QA(m).md` — danh sách câu hỏi hiện tại
220
+
221
+ **Cách BA cung cấp phản hồi (BA chọn một trong 3):**
222
+ - **Option A** — Nhập trực tiếp vào chat: `Q&A: Q1: [trả lời], Q2: [trả lời]`
223
+ - **Option B** — Paste nội dung bảng Q&A đã điền vào chat
224
+ - **Option C** — Đặt file tại: `docs/ak-{project}/spec/QA/[functionId]_QA(m)_response.md`
225
+
226
+ **Bước thực hiện:**
227
+
228
+ #### Bước 1: Tiếp nhận và đánh giá câu trả lời
229
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-qa-v1.md` và làm theo
230
+ - Đối chiếu từng câu trả lời với câu hỏi trong `QA(m).md`
231
+ - Phân loại:
232
+ - Đủ thông tin → cập nhật trạng thái: **Confirmed**
233
+ - Chưa rõ hoặc phát sinh nghiệp vụ mới → giữ trạng thái **Open**, bổ sung ghi chú
234
+
235
+ #### Bước 2: Tích hợp thông tin vào tài liệu phân tích
236
+ - Lấy thông tin từ các câu Confirmed → cập nhật vào `phan-tich(n).md`
237
+ - Xóa các Gap đã được giải quyết khỏi bảng Gap Analysis
238
+ - Tạo phiên bản mới: `docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1).md`
239
+
240
+ #### Bước 3: Rẽ nhánh theo trạng thái Q&A
241
+
242
+ **Kịch bản A — Vẫn còn câu hỏi Open:**
243
+ 1. Dùng `skill-ba-phan-tich-ban-dau` kiểm tra `phan-tich(n+1).md` có phát sinh Gap mới không
244
+ 2. Tạo: `docs/ak-{project}/spec/QA/[functionId]_QA(m+1).md` theo `skill-ba-qa` — chỉ giữ câu Open và câu mới phát sinh
245
+ 3. **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-2-[functionId]-round-[m+1].md`
246
+ 4. Hiển thị:
247
+
248
+ ```
249
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
250
+ ⏸️ GATE 2 — VÒNG Q&A [m+1]
251
+
252
+ Câu hỏi còn Open: [N]
253
+ File Q&A mới: [docs/ak-{project}/spec/QA/[functionId]_QA(m+1).md](docs/ak-{project}/spec/QA/[functionId]_QA(m+1).md)
254
+ File phân tích: [docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1).md](docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n+1).md)
255
+
256
+ → BA điền câu trả lời và cung cấp theo một trong 3 option (A/B/C)
257
+ → Sau khi cung cấp phản hồi, type NEXT để AI xử lý vòng tiếp theo
258
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
259
+ ```
260
+
261
+ 5. Lặp lại Bước 1 khi nhận phản hồi mới
262
+
263
+ **Nếu BA gõ APPROVED khi đang ở Kịch bản A (còn câu hỏi Open) → từ chối ngay:**
264
+
265
+ ```
266
+ ⛔ GATE 2 BLOCKED — Còn [N] câu hỏi chưa Confirmed.
267
+
268
+ | ID | Câu hỏi còn Open |
269
+ |----|-----------------|
270
+ | [Q_ID] | [nội dung câu hỏi] |
271
+
272
+ → Cung cấp câu trả lời (Option A/B/C) rồi gõ NEXT để AI xử lý tiếp.
273
+ ❌ APPROVED chỉ được chấp nhận khi 100% câu hỏi đã Confirmed.
274
+ ```
275
+
276
+ **Kịch bản B — Tất cả đã Confirmed:**
277
+ 1. Chốt tài liệu phân tích (phiên bản cuối cùng là đầu vào Gate 3)
278
+ 2. **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-2-[functionId].md`
279
+ 3. Hiển thị gate pause message — đợi **APPROVED**
280
+
281
+ **Khi APPROVED (chỉ áp dụng Kịch bản B):**
282
+ → **INVOKE** `gate-review` skill (verify mode) — chạy `ak review check --gate 2 --ticket [functionId]`
283
+ → Nếu passed: `ak gate 2 approved --ticket [functionId]` → chuyển Gate 3
284
+ → Nếu blocked: làm theo gate-review skill response protocol
285
+
286
+ **Definition of Done:**
287
+ - [ ] Mọi câu trả lời đều được phân tích và phân loại trạng thái
288
+ - [ ] Tài liệu phân tích phiên bản mới tích hợp đầy đủ thông tin nghiệp vụ mới nhất
289
+ - [ ] Không còn câu hỏi nào ở trạng thái **Open** trước khi tiến Gate 3
290
+
291
+ > **Telemetry:** Run `ak gate 2 start --ticket [functionId]` khi bắt đầu gate này.
292
+ > Run `ak gate 2 approved --ticket [functionId]` sau khi gate-review verify passed. Run as-is — không thêm shell redirects.
293
+
294
+ ---
295
+
296
+ ### GATE 3 — Thiết kế giao diện Prototype HTML/CSS
297
+
298
+ **Mục tiêu:** Dựa trên tài liệu phân tích đã chốt, thiết kế bản mẫu giao diện (Prototype) độc lập bằng HTML/CSS để trực quan hóa các thành phần và luồng tương tác.
299
+
300
+ **Điều kiện vào Gate 3:** Tất cả Q&A đã **Confirmed** và Gate 2 đã **APPROVED**.
301
+
302
+ **Đầu vào (Inputs):**
303
+ - `docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n).md` — phiên bản cuối
304
+
305
+ **Đầu ra (Outputs):**
306
+ - `docs/ak-{project}/spec/design/[functionId]_design.html`
307
+
308
+ **Bước thực hiện:**
309
+
310
+ #### Bước 1: Liệt kê thành phần giao diện
311
+ - Đọc tài liệu phân tích đã chốt
312
+ - Xác định: ô nhập liệu, nút bấm, liên kết, vùng hiển thị lỗi, vùng hiển thị dữ liệu
313
+
314
+ #### Bước 2: Thiết kế và viết code HTML/CSS
315
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-prototype-v1.md` và làm theo
316
+ - Viết HTML ngữ nghĩa cao (semantic HTML)
317
+ - Đặt `id` và `name` **duy nhất** cho MỌI thẻ tương tác (`input`, `button`, `a`, `select`, `textarea`) — phục vụ automation test
318
+ - Nhúng CSS trong thẻ `<style>` ở `<head>` — không gọi external link (offline-friendly)
319
+ - Mã hóa hiệu ứng hover, focus bằng CSS
320
+
321
+ #### Bước 3: Dựng sẵn Error UI Placeholders
322
+ - Thẻ lỗi tại vị trí tương ứng (dưới ô nhập liệu hoặc banner trên)
323
+ - CSS nổi bật lỗi (chữ đỏ, viền đỏ), mặc định ẩn (`display: none`)
324
+
325
+ #### Bước 4: Lưu file
326
+ - `docs/ak-{project}/spec/design/[functionId]_design.html`
327
+
328
+ #### Bước 5: Gate Review & Pause
329
+ - **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-3-[functionId].md`
330
+ - Hiển thị gate pause message — đợi **APPROVED**
331
+
332
+ **Khi APPROVED:**
333
+ → **INVOKE** `gate-review` skill (verify mode) — chạy `ak review check --gate 3 --ticket [functionId]`
334
+ → Nếu passed: `ak gate 3 approved --ticket [functionId]` → chuyển Gate 4
335
+ → Nếu blocked: làm theo gate-review skill response protocol
336
+
337
+ **Definition of Done:**
338
+ - [ ] File `[functionId]_design.html` tạo đúng vị trí
339
+ - [ ] Giao diện hiển thị đủ tất cả thành phần nghiệp vụ
340
+ - [ ] 100% thẻ tương tác có `id` duy nhất
341
+ - [ ] CSS tự chứa trong file HTML
342
+
343
+ > **Telemetry:** Run `ak gate 3 start --ticket [functionId]` khi bắt đầu gate này.
344
+ > Run `ak gate 3 approved --ticket [functionId]` sau khi gate-review verify passed. Run as-is — không thêm shell redirects.
345
+
346
+ ---
347
+
348
+ ### GATE 4 — Viết đặc tả Use Case Spec hoàn chỉnh
349
+
350
+ **Mục tiêu:** Tổng hợp tất cả thông tin nghiệp vụ, giao diện HTML, sơ đồ Mermaid và Business Rules thành tài liệu UC Spec hoàn chỉnh để bàn giao Dev/Test.
351
+
352
+ **Điều kiện vào Gate 4:** Gate 3 đã **APPROVED** và `design.html` đã hoàn chỉnh.
353
+
354
+ **Đầu vào (Inputs):**
355
+ - `docs/ak-{project}/spec/phan-tich/[functionId]_phan-tich(n).md` — phiên bản cuối
356
+ - `docs/ak-{project}/spec/design/[functionId]_design.html`
357
+
358
+ **Đầu ra (Outputs):**
359
+ - `docs/ak-{project}/spec/UC/[functionId]_UC.md`
360
+
361
+ **Bước thực hiện:**
362
+
363
+ #### Bước 1: Khởi tạo Spec từ Template
364
+ - **READ template:** `.claude/skills/ba-skills/skill-ba-template-uc-v1.md`
365
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-viet-spec-uc-v1.md`
366
+ - Tạo: `docs/ak-{project}/spec/UC/[functionId]_UC.md`
367
+ - Điền General Information: Use Case ID, Title, Version, Actors, Preconditions, Postconditions
368
+
369
+ #### Bước 2: Mô tả luồng sự kiện (Flow of Events)
370
+ - **Main Flow** — happy path
371
+ - **Alternative Flow** — các trường hợp hợp lệ khác
372
+ - **Exception Flow** — lỗi, điều kiện thất bại
373
+ - Viết rõ tương tác Actor ↔ System ở từng bước
374
+
375
+ #### Bước 3: Tích hợp giao diện Prototype
376
+ - Copy toàn bộ mã HTML/CSS từ `design.html` vào phần Screen Description
377
+
378
+ #### Bước 4: Mô tả chi tiết UI Components
379
+ - Lập bảng: Tên | Loại | Bắt buộc | Độ dài tối đa | Giá trị mặc định | Ràng buộc validation
380
+ - `id` trong bảng phải khớp chính xác với `id` trong HTML
381
+
382
+ #### Bước 5: Vẽ sơ đồ hoạt động Mermaid
383
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-ve-luong-mermaid-v1.md` và làm theo
384
+ - Vẽ Activity Diagram: Main Flow, điểm quyết định (hình thoi), Alternative Flow, Exception Flow
385
+ - Nhúng mã Mermaid vào section Activity Flow của Spec
386
+
387
+ #### Bước 6: Đặc tả Business Rules (BR)
388
+ - **READ skill:** `.claude/skills/ba-skills/skill-ba-xay-dung-business-rules-v1.md` và làm theo
389
+ - Đặc tả:
390
+ - **Validation BR**: định dạng, giá trị, bắt buộc
391
+ - **Processing BR**: logic xử lý khi lưu/cập nhật
392
+ - **Authorization BR**: phân quyền theo role
393
+ - Mỗi BR có mã `[BR-NNN]`, liên kết với câu thông báo lỗi chính xác trên màn hình
394
+
395
+ #### Bước 7: Gate Review & Pause
396
+ - **INVOKE** `gate-review` skill (generate mode) — ghi `.aiflow/review/gate-4-[functionId].md`
397
+ - Hiển thị gate pause message — đợi **APPROVED**
398
+
399
+ **Khi APPROVED:**
400
+ → **INVOKE** `gate-review` skill (verify mode) — chạy `ak review check --gate 4 --ticket [functionId]`
401
+ → Nếu passed: `ak gate 4 approved --ticket [functionId]` → UC Spec hoàn thành, sẵn sàng bàn giao Dev/Test
402
+ → Nếu blocked: làm theo gate-review skill response protocol
403
+
404
+ **Phản hồi đặc biệt:**
405
+ - BA gõ `REVISION: [nội dung]` → cập nhật section liên quan → re-generate review file → hiển thị lại gate pause
406
+
407
+ **Definition of Done:**
408
+ - [ ] File `[functionId]_UC.md` đúng vị trí và cấu trúc template
409
+ - [ ] 100% element HTML được mô tả trong bảng UI Components (id, loại, ràng buộc)
410
+ - [ ] Mã Mermaid hợp lệ, thể hiện đủ Main/Alternative/Exception Flow
411
+ - [ ] Business Rules đầy đủ với mã `[BR-NNN]` và thông báo lỗi chính xác
412
+ - [ ] Tài liệu không chứa ghi chú mơ hồ hoặc câu hỏi chưa giải quyết
413
+
414
+ > **Telemetry:** Run `ak gate 4 start --ticket [functionId]` khi bắt đầu gate này.
415
+ > Run `ak gate 4 approved --ticket [functionId]` sau khi gate-review verify passed. Run as-is — không thêm shell redirects.
416
+
417
+ ---
418
+
419
+ ### Bản đồ Skills theo Gate
420
+
421
+ | Gate | Skills đọc | Output |
422
+ |---|---|---|
423
+ | Gate 1 | `skill-ba-phan-tich-ban-dau`, `template-phan-tich-ban-dau`, `skill-ba-qa`, `template-qa` | `phan-tich(1).md`, `QA(1).md` |
424
+ | Gate 2 | `skill-ba-qa`, `skill-ba-phan-tich-ban-dau` | `phan-tich(n+1).md`, `QA(m+1).md` (nếu còn Open) |
425
+ | Gate 3 | `skill-ba-prototype` | `design.html` |
426
+ | Gate 4 | `skill-ba-viet-spec-uc`, `template-uc`, `skill-ba-ve-luong-mermaid`, `skill-ba-xay-dung-business-rules` | `_UC.md` |
427
+
428
+ ---
429
+
430
+ ### Quy tắc bắt buộc
431
+
432
+ - ❌ **KHÔNG** bỏ qua thứ tự Gate — luôn đi từ Gate 1 → 2 → 3 → 4
433
+ - ❌ **KHÔNG** tự chốt giả định nghiệp vụ mà không đưa vào Q&A
434
+ - ❌ **KHÔNG** tiến Gate 3 khi vẫn còn câu hỏi Open
435
+ - ❌ **KHÔNG chấp nhận APPROVED** ở Gate 1 hoặc Gate 2 khi còn bất kỳ câu hỏi nào trạng thái **Open** — từ chối và hiển thị danh sách câu hỏi cần trả lời
436
+ - ✅ **BẮT BUỘC** chạy Bước 0 ở Gate 1 — xác nhận `functionId` và thư mục đầu ra trước khi làm bất cứ điều gì
437
+ - ✅ **BẮT BUỘC** đọc skill từ `.claude/skills/ba-skills/` — không suy luận từ bộ nhớ
438
+ - ✅ **BẮT BUỘC** invoke `gate-review` cuối mỗi gate và chờ APPROVED
439
+ - ✅ **BẮT BUỘC** mọi thẻ tương tác trong HTML có `id` duy nhất
440
+ - ✅ **BẮT BUỘC** CSS tự chứa trong HTML (không external link)
441
+ - ✅ **BẮT BUỘC** mỗi BR có mã `[BR-NNN]` và câu thông báo lỗi cụ thể