Bộ 7 role chuyên biệt (triage → specialist → implementer → reviewer) cùng lớp dùng chung: guardrail, tri thức về repo, checklist, và contract đầu ra. Vì sao có: bug UI/UX được báo bằng lời kể triệu chứng, và người sửa hay bỏ qua ba thứ mà repo này rất dễ vi phạm — luật "không file nào ngoài theme/ được đặt tên một màu", trần LOC theo bánh cóc, và việc ui/ với presentation/ cùng tồn tại nên sửa nhầm file là "đã fix mà vẫn thấy lỗi". knowledge/qt_pitfalls.md chép lại 20 nguyên nhân gốc hay gặp của bug PySide6; examples/bad_fix.md có hai ca CÓ THẬT, gồm ca chính bản vá trong nhánh này từng mắc (compare_digest trên str ngoài ASCII) và lọt qua vòng review đầu. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.1 KiB
Security Policy cho agent xử lý bug UI/UX
Nguồn: SECURITY.md, docs/governance/review-policy.md, docs/architecture/security-policy.md.
Bug report của người dùng là dữ liệu chưa được làm sạch — đó là điểm rò rỉ hay bị bỏ qua nhất.
S1. Làm sạch input trước khi đưa vào bất kỳ output nào
Bug report UI thường kèm ảnh chụp màn hình và log. Trước khi trích vào defect_record.md,
PR body, hay commit message, phải loại bỏ:
| Loại | Ví dụ hay lọt trong app này | Xử lý |
|---|---|---|
| API key / token | sk-..., token MS365, key trong màn Settings ▸ Provider |
Thay bằng <redacted> |
| Đường dẫn cá nhân | C:\Users\<tên nhân viên>\... |
Rút gọn thành %USERPROFILE%\... |
| Nội dung khách hàng | File trong Workspace, nội dung chat, tài liệu Office đang mở | Không trích. Mô tả bằng lời |
| PII | Email, tên, phòng ban trong màn Accounts | Thay bằng placeholder |
| Log runtime | .cowork_local/ audit log, MCP call history |
Chỉ trích đúng dòng liên quan, đã redact |
Nếu ảnh chụp màn hình chứa dữ liệu khách hàng: không nhúng ảnh vào issue/PR, mô tả vùng lỗi bằng toạ độ/tên widget.
S2. Không đọc/ghi secret khi debug UI
- Không in
SecretStore/keyring ra log để "kiểm tra". - Không thêm
print()/logger.debug()tạm vào đường đi của credential rồi quên gỡ. - Không commit
.env,config.jsonlocal, hay bất cứ thứ gì dưới%USERPROFILE%\.cowork_local\.
S3. Bug UI vẫn có thể là bug bảo mật
Đánh dấu security-review: required nếu bản sửa chạm tới:
- màn hình/hộp thoại Permission (
ui/permission_dialog.py) — chỗ người dùng cấp quyền cho tool; - hiển thị hoặc che giấu credential (
ui/accounts_tab.py,ui/login_dialog.py,presentation/settings/provider_settings_widget.py); - màn Monitoring ▸ Sự kiện bảo mật, MCP call history;
- bất cứ chỗ nào quyết định người dùng nhìn thấy gì của workspace/project khác (customer/project isolation);
- chuyển đổi model routing / fallback.
Với nhóm này: CI xanh không đủ để merge (docs/governance/review-policy.md).
S4. Lỗi UI có hệ quả bảo mật — nhận diện sớm
Không xem nhẹ mấy triệu chứng sau, chúng là bug bảo mật đội lốt bug UI:
- Hộp thoại xác nhận quyền hiện sau khi hành động đã chạy, hoặc bị bỏ qua khi bấm nhanh.
- Nút "Cho phép" là default button / nhận Enter — người dùng cấp quyền mà không đọc.
- Ô mật khẩu không
QLineEdit.Password, hoặc key hiện dạng plaintext khi resize/copy. - Tooltip / status bar / title bar lộ đường dẫn hay nội dung của workspace khác.
- Toast lỗi in nguyên exception kèm request body.
S5. Không rewrite history
Nếu phát hiện secret đã nằm trong Git history: dừng lại, báo Cowork Team.
Không force-push, không tự sửa history (SECURITY.md).