CI / test (push) Canceled after 0s
fix các bug theo yêu cầu https://fptsoftware362-my.sharepoint.com/❌/g/personal/nampdt_fpt_com/IQAHBJ4A9xqDTLgvt2bhukJEAdRB5LRz2hbJpTivvIiBSYM?wdExp=TEAMS-TREATMENT&web=1&isSPOFile=1&ovuser=f01e930a-b52e-42b1-b70f-a8882b5d043b%2CAnhTNM1%40fpt.com&clickparams=eyJBcHBOYW1lIjoiVGVhbXMtRGVza3RvcCIsIkFwcFZlcnNpb24iOiI0OS8yNjA4MTMxOTMxNyIsIkhhc0ZlZGVyYXRlZFVzZXIiOmZhbHNlfQ%3D%3D --------- Co-authored-by: Duy Le Huu <duylh19@fpt.com> Reviewed-on: #10 Co-authored-by: Anh Tran Nguyen Minh <anhtnm1@fpt.com>
7.0 KiB
7.0 KiB
quality_gate.md — Checklist kiểm soát chất lượng
Trách nhiệm của file này: định nghĩa checklist self-review agent phải chạy ở Step 6 của
process.md, cách tính điểm và ngưỡng pass. Đây là file có ưu tiên cao nhất — không được đánh đổi vì lý do thời gian hay vì "sửa nhỏ".
1. Cách sử dụng
- Chạy lần lượt 7 nhóm checklist dưới đây, đánh
Pass/Failcho từng mục. - Mục
Fail→ sửa ngay, không ghi "sẽ bổ sung sau". - Chạy lại checklist. Lặp tối đa 2 lần.
- Sau 2 lần vẫn
Failvì thiếu thông tin bên ngoài → chuyển thành Open Question (OQ-xx). - Tính điểm theo §3. Chưa đạt ngưỡng thì không được trả kết quả.
Nhóm áp dụng theo chế độ: G5 chỉ áp dụng cho LAYOUT_FIX và MIXED. Với CODE_FIX thuần, bỏ G5 và chia lại điểm theo §3.
2. Checklist
G1. Root cause — Sửa đúng nguyên nhân, không che triệu chứng
- Nguyên nhân gốc được nêu cụ thể tới
file:line, không phải phỏng đoán ("có lẽ do..."). - Nguyên nhân gốc giải thích được toàn bộ triệu chứng đã quan sát, không sót phần nào.
- Không có
try/exceptnuốt lỗi hay kiểm tra null được thêm vào chỉ để hết crash. - Không sửa nhiều chỗ cùng lúc theo kiểu thử-xem-cái-nào-ăn.
G2. Minimal & scoped diff — Diff nhỏ và đúng phạm vi
- Mỗi file trong diff đều có lý do rõ ràng trong section Changes.
- Không có drive-by cleanup: đổi tên biến, sắp xếp lại import, format lại file ngoài vùng sửa.
- Không có refactor kiến trúc kèm theo trong cùng lần fix.
- Không thêm dependency mới.
- Không đổi public API / signature mà nơi khác đang gọi (trừ khi yêu cầu nói rõ).
- Không xoá code chưa hiểu rõ mục đích.
G3. Convention & consistency — Bám chuẩn codebase
- Style của đoạn sửa khớp với file xung quanh (đặt tên, type hint, comment, thứ tự import).
- Ngôn ngữ comment / docstring giữ đúng như file gốc.
- Không có mã màu rời rạc trong widget; màu đi qua
theme/palettes.py. - Không có
setStyleSheetcục bộ chồng lên thứtheme/qss.pyđã định nghĩa. - Sửa đúng tầng theo bảng ở
process.mdStep 3.4 (layout code / qss / palette). - Không còn code debug tạm: lệnh in tạm, log tạm, comment kiểu "sẽ sửa sau".
G4. Correctness & regression — Đúng và không phá thứ khác
- Hành vi mong đợi đã được kiểm chứng thật, không phải suy đoán.
- Sửa logic → có test hồi quy fail trước khi sửa và pass sau khi sửa (hoặc nêu rõ vì sao không viết được test).
- Đã chạy test liên quan; kết quả được ghi nguyên văn, kể cả khi fail.
- Đã rà mọi nơi khác đang dùng thứ vừa sửa (hàm, widget, selector, token) và kết luận.
- Không có test nào bị nới lỏng assert để pass.
- Edge case liên quan đã được xét: giá trị rỗng, null, danh sách trống, dữ liệu rất dài.
G5. Layout robustness — Chỉ áp dụng LAYOUT_FIX / MIXED
- Đã kiểm ở tối thiểu 2 kích thước cửa sổ, gồm cả kích thước nhỏ nhất còn dùng được.
- Đã kiểm cả theme sáng và tối.
- Đã kiểm với nội dung text dài bất thường: không tràn, không chồng, không cắt chữ.
- Đã kiểm trạng thái rỗng, nếu widget hiển thị danh sách.
- Không dùng kích thước cứng để ép cho vừa; nếu buộc phải dùng, đã nêu lý do.
- Widget vẫn co giãn đúng khi cửa sổ đổi kích thước (layout và size policy, không phải toạ độ tuyệt đối).
- Thay đổi trên selector dùng chung đã được kiểm ở các widget khác cùng dùng selector đó.
G6. Safety — An toàn
- Không có credential, token, API key, connection string trong code, log, test hay report.
- Không có dữ liệu cá nhân thật trong test fixture hay ví dụ.
- Không thêm log ghi ra dữ liệu nhạy cảm.
- Vùng critical trong
SECURITY.mdkhông bị chạm; nếu buộc phải chạm, đã nêu rõ và xin xác nhận. - Không tự
git commit,git pushhay tạo pull request khi người dùng chưa yêu cầu.
G7. Reviewability — Sẵn sàng cho người khác review
- Fix Report đủ section theo
output_contract.md, không section nào bị bỏ trắng. - Reviewer không cần hỏi lại: nguyên nhân gốc là gì, sửa ở đâu, đã kiểm thế nào, có phá gì không.
- Mỗi thay đổi (
CH-xx) nối được về nguyên nhân gốc hoặc về mộtAS-xx. - Mọi Open Question đều cụ thể, có người cần trả lời và có
Blocking. - Mọi Assumption đều nêu tác động nếu giả định sai.
- Điểm không giải quyết được đã ghi thành Limitation (
LM-xx) — không bị bỏ qua im lặng, không trình bày như đã trọn vẹn, và không có quyết định nghiệp vụ nào do agent tự chốt. - Không còn placeholder kiểu
TBD,???,sẽ bổ sung sau. - Có đề xuất commit message theo Conventional Commit.
3. Scoring & Ngưỡng pass
| Nhóm | Tiêu chí | Điểm (LAYOUT_FIX / MIXED) | Điểm (CODE_FIX thuần) |
|---|---|---|---|
| G1 | Root cause | 25 | 30 |
| G2 | Minimal & scoped diff | 15 | 20 |
| G3 | Convention & consistency | 10 | 10 |
| G4 | Correctness & regression | 20 | 25 |
| G5 | Layout robustness | 15 | — |
| G6 | Safety | 10 | 10 |
| G7 | Reviewability | 5 | 5 |
| Tổng | 100 | 100 |
Điểm mỗi nhóm = (số mục Pass / tổng số mục) × điểm tối đa của nhóm, làm tròn xuống.
| Tổng điểm | Kết luận | Hành động |
|---|---|---|
| ≥ 85 | Pass | Được trả kết quả |
| 70 - 84 | Conditional | Sửa các mục Fail rồi chạy lại checklist |
| < 70 | Fail | Quay lại process.md từ Step 2, làm lại phân tích |
4. Điều kiện chặn tuyệt đối
Bất kể tổng điểm bao nhiêu, không được trả kết quả nếu vi phạm bất kỳ điều nào sau:
- Chưa xác định được nguyên nhân gốc mà vẫn sửa code.
- Nhóm G6 Safety có bất kỳ mục Fail.
- Báo test pass mà không thực sự chạy test, hoặc che kết quả fail.
- Nới lỏng assert của test để test pass.
- Diff chạm file không giải thích được lý do.
- Còn credential hoặc dữ liệu cá nhân thật trong code, test hay report.
- Đã tự commit / push / tạo pull request khi người dùng không yêu cầu.
Vi phạm điều 1 → dùng khối Root Cause Not Confirmed trong output_contract.md §6
thay vì trả bản sửa.