@relipa/ai-flow-kit 0.1.4-beta.0 → 0.1.4

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.
@@ -159,7 +159,6 @@ Nhận về: danh sách kết quả per TC.
159
159
 
160
160
  ### Hiển thị kết quả
161
161
 
162
- ```
163
162
  ⏸️ GATE 2: SCRIPT SYNC COMPLETE
164
163
 
165
164
  Gen mới: {N} | Updated: {N} | Skipped: {N}
@@ -170,7 +169,6 @@ Blocked: {N} TCs — xem lý do bên trên
170
169
  → Type APPROVED to run tests
171
170
  → Type SKIP: {TC_ID} để đánh dấu Pending và tiếp tục
172
171
  → Or provide feedback to fix scripts
173
- ```
174
172
 
175
173
  Dừng. Chờ APPROVED.
176
174
 
@@ -307,26 +305,7 @@ Với mỗi TC failed, tạo `ak-test/{repo}/results/{screenId}/run-{N}/bugs/BUG
307
305
 
308
306
  BUG số: đếm file trong `bugs/` folder, +1. Format: `001`, `002`,...
309
307
 
310
- ### Bước 6: Cập nhật TC file gốc
311
-
312
- Ghi kết quả vào các cột R1/R2 trong TC file:
313
-
314
- - R1 = lần chạy đầu tiên (run-1). Nếu R1 đã có giá trị → ghi vào R2.
315
- - R1 Tester = `AI-R1`, R2 Tester = `AI-R2`
316
-
317
- ```markdown
318
- | AD10_001 | ... | ✅ Pass | {YYYY-MM-DD} | AI-R1 | | | |
319
- | AD10_005 | ... | ❌ Fail | {YYYY-MM-DD} | AI-R1 | | | |
320
- | AD10_023 | ... | ⏭️ Untest | - | - | | | |
321
- ```
322
-
323
- Cập nhật Section 2 — Test Execution Summary table:
324
-
325
- ```markdown
326
- | Round {N} | {passed} | {failed} | {untest} | {pending} | {total} | {passed/total*100}% |
327
- ```
328
-
329
- ### Bước 7: Hiển thị Gate 3
308
+ ### Bước 6: Hiển thị Gate 3
330
309
 
331
310
  ```
332
311
  ⏸️ GATE 3: EXECUTION COMPLETE
@@ -361,8 +340,7 @@ Khi tester gõ `RETEST: AD10_005, AD10_008`:
361
340
  ```
362
341
  3. Xác định run number mới (run-{N+1})
363
342
  4. Tổ chức evidence vào `run-{N+1}/` (không xóa run cũ)
364
- 5. Cập nhật R2 columns trong TC file
365
- 6. Cập nhật bug status:
343
+ 5. Cập nhật bug status:
366
344
  - TC pass sau retest → ghi `RESOLVED` vào bug file: `**Status:** ✅ Resolved`
367
345
  - TC vẫn fail → ghi `**Retest {N}:** Still OPEN` vào bug file
368
346
 
@@ -382,11 +360,7 @@ Chỉ chạy sau Gate 3 APPROVED.
382
360
 
383
361
  Đọc `bugs/BUG-*.md` trong run folder: phân loại severity + status (Open/Resolved).
384
362
 
385
- ### Bước 2: Cập nhật Section 2 trong TC file
386
-
387
- Cập nhật bảng Test Execution Summary với số liệu từ R1 và R2.
388
-
389
- ### Bước 3: Sinh testreport.md
363
+ ### Bước 2: Sinh testreport.md
390
364
 
391
365
  Tạo `ak-test/{repo}/results/{screenId}/run-{N}/testreport.md` theo template chuẩn:
392
366
 
@@ -422,7 +396,7 @@ Tạo `ak-test/{repo}/results/{screenId}/run-{N}/testreport.md` theo template ch
422
396
  - Còn Critical hoặc High Open → No-go
423
397
  - Chỉ còn Medium/Low Open → Conditional go
424
398
 
425
- ### Bước 4: Bug logging flow
399
+ ### Bước 3: Bug logging flow
426
400
 
427
401
  Hỏi từng bug theo thứ tự severity (Critical → High → Medium → Low):
428
402
 
@@ -443,9 +417,8 @@ Nếu tester gõ `Y`:
443
417
 
444
418
  Nếu `n` hoặc `SKIP-BUG`: ghi `Not logged` trong testreport.md Bug Summary.
445
419
 
446
- ### Bước 5: Hiển thị Gate 4
420
+ ### Bước 4: Hiển thị Gate 4
447
421
 
448
- ```
449
422
  ⏸️ GATE 4: REPORT READY
450
423
 
451
424
  Overall: {Pass / Fail / Conditional}
@@ -456,7 +429,6 @@ Recommendation: {Go / No-go / Conditional go}
456
429
  → Review: [ak-test/{repo}/results/{screenId}/run-{N}/testreport.md](ak-test/{repo}/results/{screenId}/run-{N}/testreport.md)
457
430
  → Type APPROVED to sign off
458
431
  → Type NO-GO: {reason} to reject release
459
- ```
460
432
 
461
433
  Dừng. Chờ APPROVED hoặc NO-GO.
462
434
 
@@ -493,7 +465,6 @@ SKIP-BUG: BUG-{NNN} # bỏ qua không log bug này
493
465
 
494
466
  - ✅ Dừng ở mỗi gate, chờ APPROVED trước khi proceed
495
467
  - ✅ `run-{N}` không bao giờ bị xóa hay overwrite — luôn tạo folder mới
496
- - ✅ R1/R2 trong TC file gốc được cập nhật sau mỗi lần chạy
497
468
  - ✅ Hỏi từng bug một — không auto-log toàn bộ
498
469
  - ❌ Không lấy expected result từ PR/code — chỉ từ TC file
499
470
  - ❌ Không skip gate kể cả khi "chỉ có 1 TC"
@@ -44,93 +44,45 @@ Tester Gate 2 produces multiple review files — one per sub-phase. Use a letter
44
44
 
45
45
  ---
46
46
 
47
- ## Mode 1: GENERATE — Write Review File
47
+ ## Mode 1: GENERATE — Prepare Inline Review & Output Document
48
48
 
49
- ### Step 1: Extract checklist items from gate output
49
+ When generating the output for a gate (e.g. `requirement.md` or `plan.md`), follow these steps:
50
50
 
51
- Read the output you just created. For each **top-level section** in the output, create one checklist item — a one-line summary of what that section contains. The summary must be specific enough to identify the content without opening the output file.
51
+ ### Step 1: Ensure review directories and comments database exist
52
52
 
53
- **Extraction rules:**
54
- - One item per top-level section (H2 heading or named block)
55
- - Format: `**[Section name]**: [one-line summary of actual content]`
56
- - Maximum 12 items per gate. If more than 12 sections, group related ones.
57
- - The summary is the actual content, not a description of the category. ✅ "Scope: Auth module + User management (payment OUT of scope)" not ❌ "Scope: the scope section"
53
+ 1. Always create the directory `.aiflow/review/` if it doesn't exist.
54
+ 2. Check if `.aiflow/review/comments-[ticket-id].json` exists (where `[ticket-id]` comes from `.aiflow/context/current.json` → `ticketId` field).
55
+ 3. If the JSON file does not exist, initialize it by writing an empty array `[]` (or `{ "comments": [] }`) to it. This ensures that the CLI verification commands do not fail due to a missing file when there are no comments.
58
56
 
59
- **Examples by gate:**
60
-
61
- Dev Gate 1 (requirement.md has 4 sections → 4 items):
62
- ```
63
- - [ ] **Requirements Summary**: Add batch export endpoint returning signed S3 URL, triggered by POST /exports
64
- - [ ] **Proposed Solution**: New ExportService + S3Adapter; reuse existing AuthMiddleware for permissions
65
- - [ ] **Impact Analysis**: Medium — touches ExportController, UserService (permission check added)
66
- - [ ] **Effort Estimate**: M (3–4 days)
67
- ```
68
-
69
- Tester Gate 1 (test-analysis.md):
70
- ```
71
- - [ ] **Scope**: Auth module + User management only; payment and notifications OUT of scope
72
- - [ ] **Functional Analysis**: Login, logout, session management, password reset, role-based access (3 roles)
73
- - [ ] **Risk Areas**: High — session token handling; Medium — email format validation
74
- - [ ] **Test Approach**: 60% automation (Playwright), 40% manual; ~18 TCs estimated
75
- - [ ] **Effort Estimate**: M (2–3 days)
76
- ```
77
-
78
- ### Step 2: Write the review file
79
-
80
- **File path:** `.aiflow/review/gate-[N]-[ticket-id].md`
81
-
82
- For Tester Gate 2 sub-phases, use the lettered form: `.aiflow/review/gate-2a-[ticket-id].md`, `.aiflow/review/gate-2b-[ticket-id].md`, etc.
83
-
84
- Where `[ticket-id]` comes from `.aiflow/context/current.json` → `ticketId` field. If ticketId is unavailable, use `unknown`.
85
-
86
- **File template:**
87
-
88
- ```markdown
89
- # Gate [N] Review — [TICKET-ID]
90
- > Status: PENDING | Generated: YYYY-MM-DD
91
-
92
- ## How to review
93
- - Toggle `[ ]` → `[x]` for each item you have read and agree with
94
- - Add a comment under any item you want changed: `<!-- your comment here -->`
95
- - Type `APPROVED` in chat when done
96
-
97
- ---
98
-
99
- ## Checklist
100
-
101
- - [ ] **[Section]**: [one-line summary]
102
- - [ ] **[Section]**: [one-line summary]
103
- (... one per section, max 12)
104
-
105
- ---
106
-
107
- ## Review Notes
108
- <!-- Optional: overall notes -->
109
- ```
57
+ ### Step 2: Write the gate output file
58
+ Write the gate output file (e.g. `plan/[ticket-id]/requirement.md`, `plan/[ticket-id]/plan.md`, or `docs/ak-[project]/...`) as specified by the gate instructions.
110
59
 
111
60
  ### Step 3: Display gate pause message
112
61
 
113
- After writing the file, display in chat:
62
+ Instruct the user to review the generated document. Tell them that they can hover over any line and add inline comments in VS Code using the native commenting UI, or edit the file to add standard HTML comments `<!-- comment -->` if they are not using the VS Code extension.
63
+
64
+ Display in chat:
114
65
 
115
66
  ```
116
67
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
117
68
  ⏸️ GATE [N] PAUSED — REVIEW REQUIRED
118
69
 
119
- 📋 Open in VSCode: [.aiflow/review/gate-[N]-[ticket-id].md](.aiflow/review/gate-[N]-[ticket-id].md)
70
+ 📋 Open in VS Code: [path/to/generated/file.md](path/to/generated/file.md)
120
71
 
121
- Toggle [ ] [x] for each item you agree with
122
- Add <!-- comment --> under any item needing changes
123
- Type APPROVED when all items are addressed
72
+ Review the generated document content directly.
73
+ Hover over any line to add specific comments (inline review).
74
+ Mark comments as "Resolved" in VS Code once addressed.
75
+ • Type APPROVED when done.
124
76
 
125
- ⚠️ APPROVED will not be accepted until all checkboxes are checked.
77
+ ⚠️ APPROVED will not be accepted until all inline comments are resolved.
126
78
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
127
79
  ```
128
80
 
129
81
  ---
130
82
 
131
- ## Mode 2: VERIFY — Check Review File on APPROVED
83
+ ## Mode 2: VERIFY — Check Comments and Checklist on APPROVED
132
84
 
133
- When the developer types `APPROVED`, run this before accepting:
85
+ When the developer types `APPROVED`, run this check:
134
86
 
135
87
  ### Step 1: Run CLI check
136
88
 
@@ -138,58 +90,30 @@ When the developer types `APPROVED`, run this before accepting:
138
90
  ak review check --gate [N] --ticket [ticket-id]
139
91
  ```
140
92
 
141
- For Tester Gate 2 sub-phases, pass the lettered gate identifier:
142
-
143
- ```bash
144
- ak review check --gate 2a --ticket [ticket-id]
145
- ak review check --gate 2b --ticket [ticket-id]
146
- ```
147
-
148
93
  ### Step 2: Interpret result
149
94
 
150
- **Exit code 0 — all checked:**
95
+ **Exit code 0 — all checked & resolved:**
151
96
  - Gate proceeds normally
152
97
  - Run telemetry: `ak gate [N] approved --ticket [ticket-id]`
153
98
  - Continue to next gate
154
99
 
155
100
  **Exit code 1 — file missing:**
156
- ```
157
- Review file not found for gate N, ticket PROJ-33
158
- ```
159
- AI response:
160
- > "The review file wasn't found. Let me regenerate it."
161
- Then re-run Mode 1 (generate) and display the gate pause message again.
101
+ - AI response: "The review session files weren't found. Let me prepare them."
102
+ - Re-run Mode 1 (initialize `comments-[ticket-id].json` and output file) and display pause message.
162
103
 
163
104
  **Exit code 1 — items with comments (need revision):**
164
- ```
165
- Items with comments (need AI revision):
166
- **Risk Areas**: High session token handling
167
- Comment: "Missing: SQL injection risk on login form"
168
- ```
169
- AI response:
170
- 1. Read each comment
171
- 2. Update the specific section in the gate output file
172
- 3. Rewrite only the flagged items in the review file (keep already-checked `[x]` items as-is)
173
- 4. Display updated gate pause message
174
-
175
- **Exit code 1 — unchecked items, no comment:**
176
- ```
177
- Items unchecked (no comment):
178
- • **Scope**: Auth module only
179
- ```
180
- AI response:
181
- > "Item(s) are unchecked without a comment. Please either:
182
- > - Check `[x]` if you agree with the content, or
183
- > - Add `<!-- your comment -->` on the next line if you want changes."
184
- Do NOT re-generate. Wait for developer to update the file.
105
+ If the CLI reports unresolved comments, the AI must:
106
+ 1. Read the unresolved comments returned by the CLI (which include file path, line number, and comment text).
107
+ 2. Read the source file at those line numbers to understand the context.
108
+ 3. Update the specific sections of the document to address the comments.
109
+ 4. Tell the user what was updated, ask them to mark the comment thread as resolved in VS Code, and type `APPROVED`.
185
110
 
186
111
  ---
187
112
 
188
113
  ## Mandatory Rules
189
114
 
190
115
  - ❌ **NEVER** accept `APPROVED` without first running `ak review check`
191
- - **NEVER** re-generate already-checked `[x]` items when doing a partial revision
192
- - ✅ **ALWAYS** create `.aiflow/review/` directory if it doesn't exist (use `mkdir -p`)
116
+ - **ALWAYS** ensure `.aiflow/review/` directory exists (use `mkdir -p`)
117
+ - ✅ **ALWAYS** initialize `.aiflow/review/comments-[ticket-id].json` with `[]` if not present when starting a gate pause.
193
118
  - ✅ **ALWAYS** use the ticket ID from `.aiflow/context/current.json` in the file name
194
- - ✅ **ALWAYS** keep review items specific to the actual content — not generic category names
195
119
  - ✅ **ALWAYS** use lettered suffixes (`gate-2a`, `gate-2b`, …) for Tester Gate 2 sub-phases — never plain `gate-2`
@@ -99,13 +99,11 @@ Liệt kê scenarios theo nhóm, output vào `test-plan/checklist.md`:
99
99
  📙 **Regression** _(nếu Dev Artifacts Check Bước 2 tìm thấy impacted areas)_
100
100
  - Mỗi item ghi rõ: "Regression — [vùng ảnh hưởng] — [lý do từ PR diff]"
101
101
 
102
- ```
103
102
  ⏸️ GATE 2 — PHASE 2a: SCENARIOS READY
104
103
  Scenarios: [N] total
105
104
  - Functional: [N] | Non-functional: [N] | Integration: [N] | Exploratory: [N] | Regression: [N]
106
105
  → Review: [test-plan/checklist.md](test-plan/checklist.md)
107
106
  → Type APPROVED to proceed to Phase 2b
108
- ```
109
107
 
110
108
  ---
111
109
 
@@ -178,14 +176,12 @@ Output testcases: `test-plan/test-cases/[ScreenID]-testcases.md`
178
176
  | **Total** | **[S/M/L/XL]** |
179
177
  ```
180
178
 
181
- ```
182
179
  ⏸️ GATE 2 — PHASE 2b: TESTCASES GENERATED
183
180
  Test cases: [N] total ([N] positive / [N] negative / [N] edge)
184
181
  Test plan: [test-plan/test-plan.md](test-plan/test-plan.md)
185
182
  → Review: [test-plan/test-cases/](test-plan/test-cases/)
186
183
  → Type APPROVED to proceed to Phase 2c (Review & Optimize)
187
184
  → Or provide feedback to update
188
- ```
189
185
 
190
186
  ---
191
187
 
@@ -229,18 +225,15 @@ Kiểm tra theo thứ tự, output vào `test-plan/review-report.md`:
229
225
  Priority: High (phải fix trước Phase 2d) / Medium / Low (có thể defer)
230
226
  ```
231
227
 
232
- ```
233
228
  ⏸️ GATE 2 — PHASE 2c: REVIEW COMPLETE
234
229
  Issues: [N] duplicate | [N] problematic | [N] to optimize | [N] missing
235
230
  High priority chưa xử lý: [N]
236
231
  → Review: [test-plan/review-report.md](test-plan/review-report.md)
237
232
  → Type APPROVED to proceed to Phase 2d (chỉ khi High priority = 0)
238
233
  → Or provide specific fixes to apply
239
- ```
240
234
 
241
235
  **Nếu nhận được APPROVED mà còn issues Priority High chưa xử lý → từ chối ngay:**
242
236
 
243
- ```
244
237
  ⛔ PHASE 2c BLOCKED — Còn [N] issues Priority HIGH chưa được xử lý:
245
238
 
246
239
  | TC_ID | Vấn đề | Đề xuất sửa |
@@ -250,7 +243,6 @@ High priority chưa xử lý: [N]
250
243
  → Cung cấp fixes cho các issues trên, sau đó gõ APPROVED.
251
244
  ❌ APPROVED chỉ được chấp nhận khi không còn issues Priority High.
252
245
  Medium và Low có thể defer — không block APPROVED.
253
- ```
254
246
 
255
247
  ---
256
248
 
@@ -11,78 +11,69 @@
11
11
  | **Người kiểm duyệt (Reviewer)** | |
12
12
  | **Ngày kiểm duyệt (Review Date)** | |
13
13
 
14
- ## 2. Kết quả kiểm thử tổng hợp (Test Execution Summary)
14
+ ## 2. Danh sách Test Cases Chi Tiết
15
15
 
16
- | Vòng kiểm thử (Round) | Đạt (Passed) | Lỗi (Failed) | Chưa test (Untest) | Chờ (Pending) | Tổng số (Total) | Tỷ lệ đạt (%) |
17
- |:---|:---:|:---:|:---:|:---:|:---:|:---:|
18
- | Round 1 | 0 | 0 | 0 | 0 | 0 | 0% |
19
- | Round 2 | 0 | 0 | 0 | 0 | 0 | 0% |
16
+ ### 2.1. Kiểm thử Truy cập & Phân quyền (Access & Authorization)
20
17
 
21
- ---
18
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
19
+ |---|---|---|---|---|---|---|---|---|
20
+ | [ID]_001 | Truy cập trực tiếp qua URL khi chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang đăng nhập (Login). | | |
21
+ | [ID]_002 | Truy cập trực tiếp qua URL khi đã đăng nhập | Medium | Người dùng đã đăng nhập thành công | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | |
22
+ | [ID]_003 | Truy cập qua button/menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click vào nút "Thêm mới" hoặc menu tương ứng. | - | Hệ thống mở màn hình đăng ký/thực hiện tương ứng thành công. | | |
22
23
 
23
- ## 3. Danh sách Test Cases Chi Tiết
24
+ ### 2.2. Kiểm thử Giao diện Người dùng (UI/UX)
24
25
 
25
- ### 3.1. Kiểm thử Truy cập & Phân quyền (Access & Authorization)
26
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
27
+ |---|---|---|---|---|---|---|---|---|
28
+ | [ID]_004 | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | |
26
29
 
27
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
28
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
29
- | [ID]_001 | Truy cập trực tiếp qua URL khi chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang đăng nhập (Login). | | | | | | | | |
30
- | [ID]_002 | Truy cập trực tiếp qua URL khi đã đăng nhập | Medium | Người dùng đã đăng nhập thành công | 1. Nhập URL màn hình vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | | | | | | | |
31
- | [ID]_003 | Truy cập qua button/menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click vào nút "Thêm mới" hoặc menu tương ứng. | - | Hệ thống mở màn hình đăng ký/thực hiện tương ứng thành công. | | | | | | | | |
32
-
33
- ### 3.2. Kiểm thử Giao diện Người dùng (UI/UX)
34
-
35
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
36
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
37
- | [ID]_004 | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | | | | | | | |
38
-
39
- ### 3.3. Kiểm thử Validation các trường nhập liệu (Input Validation)
30
+ ### 2.3. Kiểm thử Validation các trường nhập liệu (Input Validation)
40
31
 
41
32
  *(Tạo riêng từng bảng hoặc nhóm theo từng Field để dễ theo dõi)*
42
33
 
43
34
  #### * Đối với Trường [Tên Trường] — Text
44
35
 
45
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
46
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
47
- | [ID]_0xx | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder theo thiết kế. | | | | | | | | |
48
- | [ID]_0xx | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi: "Hãy nhập [Tên Trường]".<br>2. Field bị highlight viền đỏ. | | | | | | | | |
49
- | [ID]_0xx | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện hoặc focus out. | `" "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | | | | | | | |
50
- | [ID]_0xx | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `" data_test "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | | | | | | | |
51
- | [ID]_0xx | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi độ dài N-1 ký tự.<br>2. Nhập chuỗi độ dài N ký tự.<br>3. Nhập chuỗi độ dài > N ký tự. | Chuỗi test tương ứng | - Độ dài <= N: cho phép nhập và lưu bình thường.<br>- Độ dài > N: hệ thống chặn trực tiếp trên UI hoặc báo lỗi hợp lệ. | | | | | | | | |
52
- | [ID]_0xx | Kiểm tra nhập ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$%^&*).<br>2. Bấm nút thực hiện. | `"!@#$%"` | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi nếu có quy định hạn chế định dạng). | | | | | | | | |
53
- | [ID]_0xx | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | | | | | | | |
36
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
37
+ |---|---|---|---|---|---|---|---|---|
38
+ | [ID]_0xx | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder theo thiết kế. | | |
39
+ | [ID]_0xx | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi: "Hãy nhập [Tên Trường]".<br>2. Field bị highlight viền đỏ. | | |
40
+ | [ID]_0xx | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện hoặc focus out. | `" "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | |
41
+ | [ID]_0xx | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `" data_test "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | |
42
+ | [ID]_0xx | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi độ dài N-1 ký tự.<br>2. Nhập chuỗi độ dài N ký tự.<br>3. Nhập chuỗi độ dài > N ký tự. | Chuỗi test tương ứng | - Độ dài <= N: cho phép nhập và lưu bình thường.<br>- Độ dài > N: hệ thống chặn trực tiếp trên UI hoặc báo lỗi hợp lệ. | | |
43
+ | [ID]_0xx | Kiểm tra nhập ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$%^&*).<br>2. Bấm nút thực hiện. | `"!@#$%"` | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi nếu có quy định hạn chế định dạng). | | |
44
+ | [ID]_0xx | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | |
54
45
 
55
46
  #### * Đối với Trường Số (Number / Price / Quantity)
56
47
 
57
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
58
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
59
- | [ID]_0xx | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | | | | | | | |
60
- | [ID]_0xx | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | | | | | | | |
61
- | [ID]_0xx | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | | | | | | | |
62
- | [ID]_0xx | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (VD: `1,000,000`). | | | | | | | | |
48
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
49
+ |---|---|---|---|---|---|---|---|---|
50
+ | [ID]_0xx | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | |
51
+ | [ID]_0xx | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | |
52
+ | [ID]_0xx | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | |
53
+ | [ID]_0xx | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (VD: `1,000,000`). | | |
63
54
 
64
55
  #### * Đối với Trường File Upload (Hình ảnh)
65
56
 
66
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
67
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
68
- | [ID]_0xx | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | | | | | | | |
69
- | [ID]_0xx | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...).<br>2. Tiến hành upload. | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | | | | | | | |
70
- | [ID]_0xx | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | | | | | | | |
71
- | [ID]_0xx | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | | | | | | | |
72
- | [ID]_0xx | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | | | | | | | |
73
-
74
- ### 3.4. Kiểm thử Logic Nghiệp vụ (Business Rules - BR)
75
-
76
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
77
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
78
- | [ID]_0xx | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | | | | | | | |
79
- | [ID]_0xx | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả Business Rule. | | | | | | | | |
80
- | [ID]_0xx | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | | | | | | | |
81
-
82
- ### 3.5. Kiểm thử Ngoại lệ & Hệ thống (Exceptions & Systems)
83
-
84
- | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment | R1 Result | R1 Date | R1 Tester | R2 Result | R2 Date | R2 Tester |
85
- |---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
86
- | [ID]_0xx | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | | | | | | | |
87
- | [ID]_0xx | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng. | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | | | | | | | |
88
- | [ID]_0xx | Kiểm tra nhấn nút Quay lại | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | | | | | | | |
57
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
58
+ |---|---|---|---|---|---|---|---|---|
59
+ | [ID]_0xx | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | |
60
+ | [ID]_0xx | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...).<br>2. Tiến hành upload. | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | |
61
+ | [ID]_0xx | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | |
62
+ | [ID]_0xx | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | |
63
+ | [ID]_0xx | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | |
64
+
65
+ ### 2.4. Kiểm thử Logic Nghiệp vụ (Business Rules - BR)
66
+
67
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
68
+ |---|---|---|---|---|---|---|---|---|
69
+ | [ID]_0xx | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | |
70
+ | [ID]_0xx | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả Business Rule. | | |
71
+ | [ID]_0xx | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | |
72
+
73
+ ### 2.5. Kiểm thử Ngoại lệ & Hệ thống (Exceptions & Systems)
74
+
75
+ | TC ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
76
+ |---|---|---|---|---|---|---|---|---|
77
+ | [ID]_0xx | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | |
78
+ | [ID]_0xx | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng. | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | |
79
+ | [ID]_0xx | Kiểm tra nhấn nút Quay lại | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | |
@@ -250,7 +250,6 @@ Tạo `test-plan/test-analysis.md`:
250
250
 
251
251
  ### Step 5: Present to Tester
252
252
 
253
- ```
254
253
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
255
254
  ⏸️ GATE 1: TEST ANALYSIS READY
256
255
 
@@ -266,11 +265,9 @@ Summary:
266
265
 
267
266
  ⚠️ I will NOT proceed to Gate 2 until I receive "APPROVED".
268
267
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
269
- ```
270
268
 
271
269
  **Nếu nhận được APPROVED mà còn câu hỏi clarify (Step 3) chưa được TESTER trả lời → từ chối ngay:**
272
270
 
273
- ```
274
271
  ⛔ GATE 1 BLOCKED — Còn câu hỏi chưa được trả lời.
275
272
 
276
273
  Câu hỏi đang chờ:
@@ -278,7 +275,6 @@ Câu hỏi đang chờ:
278
275
 
279
276
  → Vui lòng trả lời câu hỏi trên trước khi gõ APPROVED.
280
277
  ❌ APPROVED không được chấp nhận khi còn câu hỏi chưa được làm rõ.
281
- ```
282
278
 
283
279
  ---
284
280