@relipa/ai-flow-kit 0.1.2 → 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.
- package/README.md +139 -0
- package/bin/aiflow.js +89 -2
- package/custom/harness/playwright/.env.example +10 -0
- package/custom/harness/playwright/playwright.config.ts +34 -0
- package/custom/harness/playwright/tests/e2e/auth.setup.ts +25 -0
- package/custom/harness/playwright/tests/e2e/fixtures/test.ts +6 -0
- package/custom/harness/playwright/tests/e2e/pages/BasePage.ts +9 -0
- package/custom/harness/playwright/tests/e2e/support/auth.ts +5 -0
- package/custom/mcp-presets/playwright.json +8 -0
- package/custom/rules/test-patterns.md +70 -0
- package/custom/skills/automation-testing/SKILL.md +239 -0
- package/custom/skills/automation-testing/templates/BasePage.ts +29 -0
- package/custom/skills/automation-testing/templates/PageObject.example.ts +29 -0
- package/custom/skills/automation-testing/templates/playwright.config.ts +39 -0
- package/custom/skills/automation-testing/templates/spec.example.ts +29 -0
- package/custom/skills/ba-skills/skill-ba-phan-tich-ban-dau-v1.md +44 -0
- package/custom/skills/ba-skills/skill-ba-prototype-v1.md +35 -0
- package/custom/skills/ba-skills/skill-ba-qa-template-v1.md +21 -0
- package/custom/skills/ba-skills/skill-ba-qa-v1.md +35 -0
- package/custom/skills/ba-skills/skill-ba-template-phan-tich-ban-dau-v1.md +30 -0
- package/custom/skills/ba-skills/skill-ba-template-uc-v1.md +83 -0
- package/custom/skills/ba-skills/skill-ba-ve-luong-mermaid-v1.md +35 -0
- package/custom/skills/ba-skills/skill-ba-viet-spec-uc-v1.md +38 -0
- package/custom/skills/ba-skills/skill-ba-xay-dung-business-rules-v1.md +39 -0
- package/custom/skills/coverage-check/SKILL.md +202 -0
- package/custom/skills/evidence-aggregation/SKILL.md +246 -0
- package/custom/skills/execute-flow/SKILL.md +499 -0
- package/custom/skills/execute-flow/templates/playwright.config.ts +39 -0
- package/custom/skills/gate-review/SKILL.md +195 -0
- package/custom/skills/generate-test-report/SKILL.md +99 -0
- package/custom/skills/generate-test-report/templates/test-report.md +58 -0
- package/custom/skills/generate-testcase/SKILL.md +350 -0
- package/custom/skills/generate-testcase/templates/testcase.md +88 -0
- package/custom/skills/log-bug/SKILL.md +131 -0
- package/custom/skills/pr-impact-analysis/SKILL.md +180 -0
- package/custom/skills/retest-orchestration/SKILL.md +191 -0
- package/custom/skills/script-sync/SKILL.md +208 -0
- package/custom/skills/test-analysis/SKILL.md +300 -0
- package/custom/skills/test-skills/categories/00-core/00.01.requirement-analysis.md +111 -0
- package/custom/skills/test-skills/categories/00-core/00.02.risk-analysis.md +24 -0
- package/custom/skills/test-skills/categories/00-core/00.03.test-scenario-builder.md +90 -0
- package/custom/skills/test-skills/categories/00-core/00.04.testcase-review.md +68 -0
- package/custom/skills/test-skills/categories/01-test-design/01.01.boundary-value-analysis.md +30 -0
- package/custom/skills/test-skills/categories/01-test-design/01.02.equivalence.partitioning.md +27 -0
- package/custom/skills/test-skills/categories/01-test-design/01.03.decision-table.md +26 -0
- package/custom/skills/test-skills/categories/01-test-design/01.04.state.transition.md +26 -0
- package/custom/skills/test-skills/categories/01-test-design/01.05.pairwise.md +25 -0
- package/custom/skills/test-skills/categories/01-test-design/01.06.error-guessing.md +28 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.01.UI-layout.md +29 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.02.form-validation.md +57 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.03.navigation.md +27 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.04.localization.md +27 -0
- package/custom/skills/test-skills/categories/02-ui-testing/02.05.accessibility.md +27 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.01.CRUD-testing.md +51 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.02.workflow-testing.md +44 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.03.permission-testing.md +41 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.04.dependency-validation.md +40 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.05.notification-testing.md +43 -0
- package/custom/skills/test-skills/categories/03-business-testing/03.06.calculation.testing.md +44 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.01.database-testing.md +43 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.02.import-export-testing.md +43 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.03.data-mapping.md +39 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.04.duplicate-handling.md +39 -0
- package/custom/skills/test-skills/categories/04-data-testing/04.05.migration.md +42 -0
- package/custom/skills/test-skills/categories/05-integration/05.01.API-testing.md +37 -0
- package/custom/skills/test-skills/categories/05-integration/05.02.third-party-integration.md +36 -0
- package/custom/skills/test-skills/categories/05-integration/05.03.batch-processing.md +38 -0
- package/custom/skills/test-skills/categories/05-integration/05.04.file-upload-download.md +40 -0
- package/custom/skills/test-skills/categories/08-domain-skills/CMS.md +34 -0
- package/custom/skills/test-skills/categories/08-domain-skills/Ecommerce.md +35 -0
- package/custom/skills/test-skills/categories/99-review/99.01.coverage-review.md +35 -0
- package/custom/skills/test-skills/categories/99-review/99.02.knowledge-learning.md +34 -0
- package/custom/skills/test-skills/categories/99-review/99.03.repository-update.md +33 -0
- package/custom/skills/test-skills/categories/99-review/99.04.change-history.md +38 -0
- package/custom/skills/test-skills/rules/Directory_and_Naming_Convention.md +257 -0
- package/custom/skills/test-skills/rules/QA_Writing_Standards.md +49 -0
- package/custom/skills/test-skills/template/template_testcase.md +92 -0
- package/custom/templates/shared/create-spec-workflow.md +441 -0
- package/custom/templates/shared/create-testcase-workflow.md +470 -0
- package/custom/templates/shared/gate-workflow.md +421 -11
- package/docs/common/CHANGELOG.md +52 -0
- package/docs/common/QUICK_START.md +30 -0
- package/docs/common/cli-reference.md +48 -7
- package/package.json +2 -2
- package/scripts/create-score-excel.js +37 -14
- package/scripts/detect.js +10 -0
- package/scripts/guide.js +9 -0
- package/scripts/init.js +48 -1
- package/scripts/prompt.js +36 -0
- package/scripts/review.js +91 -0
- package/scripts/scaffold-playwright.js +106 -0
- package/scripts/task.js +21 -7
- package/scripts/update.js +127 -124
- package/scripts/use.js +36 -12
|
@@ -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ể
|