# Checklist review bản vá UX (flow) Dùng bởi `ux-flow-fixer` (bước 8) và `regression-reviewer`. ## A. Bốn trạng thái Cho mỗi view có dữ liệu bất đồng bộ: - [ ] **Rỗng** — hiện thông điệp có nghĩa, nói được bước tiếp theo (không phải màn trắng). - [ ] **Đang tải** — có dấu hiệu chuyển động; nút bị vô hiệu hoá để chống bấm đúp. - [ ] **Lỗi** — nói *cái gì hỏng* và *làm gì tiếp*; có đường thử lại; không in nguyên exception. - [ ] **Thành công** — có xác nhận rõ; có undo nếu hành động khó đảo ngược. ## B. An toàn dữ liệu - [ ] Ô nhập dài (instruction, composer, node property, AI Edit) không mất nội dung khi chuyển tab / đóng dialog / đổi project. - [ ] Có dirty-state; `closeEvent` chặn khi còn thay đổi chưa lưu. - [ ] Hành động phá huỷ (xoá project/task, ghi đè file) có xác nhận. - [ ] Xác nhận nêu rõ **cái gì** sẽ mất, không phải "Bạn có chắc không?". - [ ] Nút phá huỷ **không** phải default button, **không** nhận Enter. ## C. Phản hồi theo thời gian - [ ] 100ms-1s: đổi con trỏ hoặc vô hiệu hoá nút. - [ ] 1s-10s: chỉ báo tiến trình rõ ràng. - [ ] \>10s: có tiến trình, **huỷ được**, không chặn phần còn lại của UI. - [ ] Việc nặng chạy ở service `application/`, không ở GUI thread. - [ ] Bấm hai lần không chạy hai lần (kiểm `connect()` trùng — P10). ## D. Khám phá được - [ ] Mọi nút icon-only có tooltip (nav rail thu gọn, toolbar Co4E, top bar). - [ ] Nút bị vô hiệu hoá nói được **lý do** (mẫu đúng: `app.nav.needs_project`). - [ ] Chức năng chính không bị chôn sau menu chuột phải mà không có lối vào khác. - [ ] Thứ tự control khớp thứ tự người dùng thực hiện. ## E. Nhất quán - [ ] Cùng một hành động dùng cùng một từ trên mọi màn (không chỗ "Lưu" chỗ "Cập nhật"). - [ ] Vị trí nút chính/phụ giống các dialog khác. - [ ] Chuỗi mới đi qua `tr()` với đủ `en`/`ja`/`vi`. ## F. Phạm vi - [ ] Bản vá chọn mức can thiệp thấp nhất (thêm thông tin trước, đổi luồng sau). - [ ] Thay đổi luồng được đánh dấu là **đề xuất** cần Cowork Team duyệt. - [ ] Có test regression cho signal/state, chạy headless.