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>
158 lines
8.0 KiB
Markdown
158 lines
8.0 KiB
Markdown
# Agent Library — UI/UX Bug Fixing cho Cowork Local
|
|
|
|
Bộ instruction chuyên biệt để xử lý **bug UI/UX do người dùng báo** trong Cowork Local
|
|
(PySide6 desktop, 4-tier Clean Architecture).
|
|
|
|
Thiết kế theo **Production Agent Architecture** (FSG AI Core — Instruction Engineering
|
|
Training): mỗi agent có Role → Mission → Input → Process → Output → Quality Gate →
|
|
Self Review, và dùng chung một lớp `system/` (guardrail), `knowledge/` (project
|
|
knowledge), `checklist/`, `output/` (contract), `examples/`.
|
|
|
|
---
|
|
|
|
## 1. Vì sao tách như thế này
|
|
|
|
Anti-pattern mà bộ này cố tình tránh (mục 10 của tài liệu training):
|
|
|
|
| Anti-pattern | Cách bộ agent này xử lý |
|
|
|---|---|
|
|
| Hard-code theo project | Rule chung nằm ở `roles/`, tri thức riêng của Cowork Local nằm ở `knowledge/` |
|
|
| Prompt quá dài | Mỗi role là 1 file; knowledge được **tham chiếu**, không copy vào từng role |
|
|
| Không có Output Contract | Mọi output đi qua template trong `output/` |
|
|
| Không có Quality Gate | Mỗi role có Quality Gate riêng + `checklist/` dùng chung |
|
|
| Không có example | `examples/good_fix.md` và `examples/bad_fix.md` |
|
|
|
|
Sáu role **không** bị tách thành 7 file nhỏ mỗi role (role/task/process/...). Lý do:
|
|
phần bị lặp giữa các role chính là guardrail, knowledge và checklist — chúng đã được
|
|
tách ra thành module dùng chung. Phần còn lại của mỗi role gắn chặt với nhau
|
|
(process quyết định output contract, output contract quyết định quality gate), tách ra
|
|
chỉ tạo thêm chỗ để lệch nhau.
|
|
|
|
---
|
|
|
|
## 2. Cấu trúc
|
|
|
|
```text
|
|
agent/
|
|
├─ README.md ← bạn đang ở đây: index + routing map
|
|
├─ system/
|
|
│ ├─ guardrail.md ← luật bất biến cho MỌI agent
|
|
│ ├─ security.md ← xử lý log/screenshot/PII người dùng gửi lên
|
|
│ └─ response_policy.md ← ngôn ngữ, format, khi nào được hỏi lại
|
|
├─ knowledge/
|
|
│ ├─ project_map.md ← ui/ vs presentation/, tầng nào gọi được tầng nào
|
|
│ ├─ theme_tokens.md ← luật màu sắc: KHÔNG file nào ngoài theme/ được đặt tên màu
|
|
│ ├─ i18n_rules.md ← tr(), on_language_changed, 3 ngôn ngữ
|
|
│ ├─ screen_map.md ← map câu chữ người dùng → màn hình → file:line
|
|
│ ├─ qt_pitfalls.md ← 20 nguyên nhân gốc hay gặp của bug UI PySide6
|
|
│ ├─ secrets_and_config.md ← SecretStore, schema migration, bẫy .get() trên config merge
|
|
│ └─ quality_gates.md ← CASAN gate, lệnh chạy, test headless
|
|
├─ roles/ ← 7 agent chuyên biệt
|
|
│ ├─ 1_ui_bug_triage.md
|
|
│ ├─ 2_ui_visual_fixer.md
|
|
│ ├─ 3_ux_flow_fixer.md
|
|
│ ├─ 4_i18n_a11y_fixer.md
|
|
│ ├─ 5_fix_implementer.md
|
|
│ ├─ 6_regression_reviewer.md
|
|
│ └─ 7_security_defect_fixer.md
|
|
├─ workflow/
|
|
│ ├─ intake_to_fix.md ← pipeline end-to-end, ai làm gì ở bước nào
|
|
│ └─ handoff_contract.md ← envelope truyền giữa các agent
|
|
├─ checklist/
|
|
│ ├─ ui_review.md
|
|
│ ├─ ux_review.md
|
|
│ └─ pr_readiness.md
|
|
├─ output/
|
|
│ ├─ defect_record.md ← template hồ sơ lỗi (output của Triage)
|
|
│ ├─ fix_plan.md ← template phương án sửa (output của Fixer)
|
|
│ ├─ fix_report.md ← template báo cáo sau khi sửa (output của Implementer)
|
|
│ └─ pr_body.md ← template PR khớp .gitea/PULL_REQUEST_TEMPLATE.md
|
|
└─ examples/
|
|
├─ good_fix.md
|
|
└─ bad_fix.md
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Bảy agent và khi nào dùng
|
|
|
|
| # | Agent | Pattern | Nhận vào | Trả ra |
|
|
|---|---|---|---|---|
|
|
| 1 | **UI Bug Triage** | Reviewer | Lời kể lộn xộn của user, ảnh chụp màn hình, log | `defect_record.md` + phân loại + route |
|
|
| 2 | **UI Visual Fixer** | Generator | defect_record (loại `visual`) | `fix_plan.md` — layout/QSS/theme/icon/DPI |
|
|
| 3 | **UX Flow Fixer** | Generator | defect_record (loại `flow`) | `fix_plan.md` — luồng, trạng thái, phản hồi |
|
|
| 4 | **i18n & A11y Fixer** | Generator | defect_record (loại `i18n`/`a11y`) | `fix_plan.md` — tr(), tràn chữ, contrast, bàn phím |
|
|
| 5 | **Fix Implementer** | Generator | `fix_plan.md` | Patch thật + `fix_report.md` |
|
|
| 6 | **Regression Reviewer** | Reviewer | Patch + fix_report | Verdict PASS/FAIL + `pr_body.md` |
|
|
| 7 | **Security Defect Fixer** | Generator | defect_record (loại `security`) | `fix_plan.md` — credential, secret, migration |
|
|
|
|
Đây là **Multi-Agent Pattern**: `Triage (Planner) → Specialist → Implementer (Executor)
|
|
→ Reviewer`. Không bỏ bước. Đặc biệt không bỏ bước 1: 80% bug UI báo lên là mô tả
|
|
triệu chứng, không phải nguyên nhân.
|
|
|
|
Agent 7 là specialist thứ tư, ngang hàng 2/3/4 trong pipeline, nhưng khác ở hai điểm: nó
|
|
được phép chạm `config.py`, `infrastructure/`, `core/` (ba role kia bị chặn ở tầng
|
|
presentation), và nó **không được tự quyết chính sách bảo mật** — bốn câu hỏi bắt buộc trả
|
|
về cho Cowork Team.
|
|
|
|
### Routing rule (Triage quyết định)
|
|
|
|
```text
|
|
Người dùng báo lỗi
|
|
│
|
|
├─ "nhìn sai / lệch / mất chữ / màu lạ / bị che" → 2. UI Visual Fixer
|
|
├─ "bấm không ăn / không biết đang chạy / mất dữ liệu" → 3. UX Flow Fixer
|
|
├─ "chữ tiếng Nhật bị tràn / đổi ngôn ngữ không đổi" → 4. i18n & A11y Fixer
|
|
├─ "mật khẩu nằm trong code / mở khoá bằng ô trống" → 7. Security Defect Fixer
|
|
└─ "app crash / sai số liệu / sai nghiệp vụ" → KHÔNG phải bug UI.
|
|
Trả về, mở issue type:bug thường.
|
|
|
|
Nhóm `security` THẮNG mọi nhóm khác: lỗi vừa lệch layout vừa lộ credential thì đi 7 trước.
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Cách dùng
|
|
|
|
### 4.1 Dùng thủ công (mọi trợ lý AI)
|
|
|
|
Nạp theo đúng thứ tự này rồi dán bug report của user vào:
|
|
|
|
```text
|
|
agent/system/guardrail.md
|
|
agent/system/security.md
|
|
agent/system/response_policy.md
|
|
agent/roles/<role đang dùng>.md
|
|
+ các file knowledge/ mà role đó liệt kê ở mục "KNOWLEDGE"
|
|
```
|
|
|
|
### 4.2 Dùng trong Claude Code (subagent)
|
|
|
|
Mỗi file trong `roles/` có sẵn YAML frontmatter `name` + `description`. Để biến thành
|
|
subagent, copy sang `.claude/agents/`:
|
|
|
|
```bash
|
|
mkdir -p .claude/agents
|
|
cp agent/roles/*.md .claude/agents/
|
|
```
|
|
|
|
Sau đó gọi bằng tên: `ui-bug-triage`, `ui-visual-fixer`, `ux-flow-fixer`,
|
|
`i18n-a11y-fixer`, `fix-implementer`, `regression-reviewer`, `security-defect-fixer`.
|
|
|
|
### 4.3 Chạy cả pipeline
|
|
|
|
Xem `workflow/intake_to_fix.md`.
|
|
|
|
---
|
|
|
|
## 5. Versioning
|
|
|
|
Bộ instruction này được version bằng Git cùng source. Khi sửa một role, ghi lý do
|
|
trong commit message — instruction cũng là code.
|
|
|
|
| Version | Ngày | Thay đổi |
|
|
|---|---|---|
|
|
| 1.0 | 2026-09-07 | Bản đầu: 6 role, 6 knowledge module, 4 output contract |
|
|
| 1.1 | 2026-09-07 | Thêm role 7 `security-defect-fixer` + `knowledge/secrets_and_config.md`. Lý do: bộ v1.0 chỉ phủ UI/UX, nên credential hardcode phát hiện qua màn Settings bị rơi vào `not-ui` và không ai nhận |
|
|
| 1.2 | 2026-09-07 | Nạp bài học từ lần chạy thật đầu tiên (`SEC-20260907-01`). Bản vá của bước 5 mang một blocker mà **không mục nào trong bộ v1.1 bắt được** — reviewer tìm ra bằng tay. Bổ sung: `secrets_and_config.md` §9 (chặn rỗng, `compare_digest` + ASCII, và luật "API an toàn hơn thường có miền đầu vào hẹp hơn"); `6_regression_reviewer.md` Bước 2.1 (ràng buộc miền đầu vào) và 4.1 (test rỗng ruột); `5_fix_implementer.md` + `quality_gates.md` (baseline bằng `comm -13` trên tên test, guard `git add`, và thực tế suite vốn đã đỏ 11+66); `bad_fix.md` ca 11-12 — hai ví dụ **có thật** đầu tiên trong file |
|