Sửa Bug Có Hệ Thống
Bug là sự gián đoạn tốn thời gian nhất trong bất kỳ dự án outsourcing nào. Một báo cáo bug từ khách hàng thường bao gồm một screenshot, một mô tả mơ hồ, và một deadline. QA regression sheet có 20 dòng và không có stack trace. Incident production cần một bản fix trước standup sáng của khách hàng. Sun Agent Kit biến mọi bug — từ một typo đơn giản trong validation message đến một race condition trong payment worker — thành một cuộc điều tra có cấu trúc với một bản fix có thể truy vết được.
Tổng Quan
Mục tiêu: Xác định root cause, triển khai bản fix, và xác minh mà không làm hỏng các hành vi liền kề
Thời gian: 5–20 phút mỗi bug (so với 1–4 giờ thủ công)
Agents sử dụng: debugger, tester, reviewer
Commands: /sk:fix, /sk:fix --quick, /sk:debug, /sk:test
Yêu Cầu Trước Khi Bắt Đầu
- Sun Agent Kit đã cài đặt và dự án đã được index (chạy
/sk:scoutít nhất một lần với codebase phức tạp) - Mô tả bug có thể tái hiện — error message, các bước tái hiện, hoặc một test case đang fail
- Test suite đã sẵn sàng (rất nên có trước khi sửa bất cứ thứ gì trong production code)
- Quyền truy cập log nếu đó là production issue (
/sk:debugcó thể đọc log file trực tiếp)
Quy Trình Từng Bước
Bước 1: Quick Fix Cho Bug Đơn Giản, Rõ Ràng
Đối với những bug có mô tả rõ ràng — validation error, status code sai, typo trong error message:
/sk:fix --quick "the POST /api/users endpoint returns 500 instead of 422 when the email field is missing from the request body"
Điều gì xảy ra: Agent thực hiện:
- Xác định route handler và controller liên quan cho endpoint bị ảnh hưởng
- Chẩn đoán root cause — thường là thiếu validation, status code sai, hoặc unhandled path
- Áp dụng bản fix tối thiểu và xác minh hành vi đúng
Bước 2: Deep Fix Cho Bug Phức Tạp
Đối với những bug cần phân tích root cause trên nhiều file hoặc module:
/sk:fix "users report that after resetting their password, they're immediately logged out when they try to sign in with the new password — this is intermittent, happens about 1 in 5 times"
Điều gì xảy ra: Agent thực hiện:
- Đọc các service file liên quan và trace toàn bộ password reset flow
- Xác định root cause — thường là race condition, thiếu session invalidation, hoặc vấn đề token lifecycle
- Triển khai bản fix trên tất cả các file bị ảnh hưởng (service, middleware, migration)
- Viết regression test để ngăn bug tái phát
Bước 3: Debug Lỗi Production Từ Log
/sk:debug "production logs show: UnhandledPromiseRejection: Cannot read properties of undefined (reading 'stripe_customer_id') — this started at 14:32 UTC yesterday, affecting the checkout flow"
Điều gì xảy ra: Agent thực hiện:
- Tìm kiếm tất cả call site cho property hoặc variable được tham chiếu
- Trace crash path từ HTTP request đến dòng bị lỗi
- Xác định trigger — thường là một migration hoặc deploy gần đây đã thay đổi một constraint
- Tạo khuyến nghị fix với các thay đổi code cụ thể cần thiết
Bước 4: Fix Lỗi CI/CD Pipeline
/sk:fix "GitHub Actions build is failing on the test step — error: ECONNREFUSED 127.0.0.1:5432 in the auth integration tests"
Điều gì xảy ra: Agent thực hiện:
- Đọc file CI configuration và xác định bước bị lỗi
- Chẩn đoán root cause — thường là vấn đề timing, thiếu service dependency, hoặc environment mismatch
- Áp dụng bản fix trực tiếp vào file CI configuration
Bước 5: Fix Bug UI (Visual + Functional)
/sk:fix "the mobile nav menu doesn't close when a user taps outside of it on iOS Safari — it just stays open"
Điều gì xảy ra: Agent thực hiện:
- Xác định component liên quan và trace logic event handler
- Chẩn đoán root cause — thường là vấn đề xử lý event theo browser cụ thể
- Áp dụng bản fix tương thích cross-browser với các fallback pattern phù hợp
Ví Dụ Thực Tế: QA Báo Cáo 5 Bug Từ Vòng Test Mới Nhất
Tình huống: QA gửi một spreadsheet vào chiều thứ Sáu với 5 bug từ regression testing trên dự án của khách hàng. Sprint review là thứ Hai. Các bug dao động từ trivial đến một race condition tinh vi.
Danh sách bug từ QA:
POST /api/orderstrả về HTML error page thay vì JSON khi payload không hợp lệ- Email đặt lại mật khẩu không gửi đến địa chỉ Gmail (Yahoo hoạt động tốt)
- Tổng giỏ hàng hiển thị sai ký hiệu tiền tệ cho người dùng ở locale EU
- Trang xác nhận đơn hàng crash trên Safari 16 với lỗi JS
- Webhook từ Stripe đôi khi kích hoạt hai lần, gây ra bản ghi đơn hàng trùng lặp
Chiều thứ Sáu — fix tất cả 5:
# Bug 1: validation/response format issue trivial
/sk:fix --quick "POST /api/orders returns HTML error page instead of JSON 400 when request body is malformed"
# Bug 2: email delivery — cần điều tra
/sk:fix "password reset emails not delivered to Gmail addresses — Yahoo works fine. Check SendGrid config, DKIM, and any email filtering happening in the notification service"
# Bug 3: i18n display bug
/sk:fix --quick "cart total shows wrong currency symbol for EU locale users — should be € not $ — check the currency formatting utility and locale detection"
# Bug 4: Safari JS crash
/sk:debug "order confirmation page crashes on Safari 16 with: TypeError: undefined is not an object (evaluating 'e.dataset.orderId'). Find the component and the Safari-incompatible pattern."
# Sau đó apply fix từ debug report:
/sk:fix --quick "apply the fix recommended in the debug report for the Safari 16 crash on the order confirmation page"
# Bug 5: idempotency — cái khó nhất
/sk:fix "Stripe webhook fires twice causing duplicate order records. Implement idempotency key checking so the same webhook event can never create two orders"
# Chạy full test suite sau tất cả các fix
/sk:test "run all tests and flag any regressions from today's fixes"
Kết quả: Tất cả 5 bug đã được fix, tests đang pass, và một commit sạch sẵn sàng cho sprint review thứ Hai. Bản fix idempotency (Bug 5) một mình đã mất nửa ngày để nghiên cứu và triển khai thủ công.
So Sánh Thời Gian
| Loại Bug | Thủ công | Với Sun Agent Kit |
|---|---|---|
| Validation / response fix đơn giản | 30–60 phút | vài phút |
| Race condition không liên tục | 3–6 giờ | 15–30 phút |
| Điều tra log production | 1–2 giờ | vài phút |
| Fix CI/CD pipeline | 30–60 phút | vài phút |
| Tương thích iOS Safari | 1–2 giờ | vài phút |
| Idempotency / ngăn trùng lặp | 4–8 giờ | 20–40 phút |
| Batch QA 5 bug | 8–16 giờ | dưới 2 giờ |
Các Thực Hành Tốt Nhất
1. Dùng —quick cho bug có mô tả rõ ràng ✅
Nếu bạn có thể giải thích bug trong một câu và biết endpoint hoặc component nào bị ảnh hưởng, --quick bỏ qua phân tích sâu và áp dụng fix trực tiếp. Để dành /sk:fix đầy đủ cho những bug cần điều tra.
2. Đưa vào các bước tái hiện trong prompt fix ✅
“Tổng giỏ hàng bị sai” tạo ra một bản fix nông cạn. “Cart total shows $ instead of € when the user’s Accept-Language header is de-DE and they have 3+ items in the cart” giúp agent xác định chính xác điểm lỗi.
3. Luôn chạy /sk:test sau một batch fix ✅
Các fix riêng lẻ được cô lập, nhưng fixing 5 bug liên tiếp có thể gây ra regression. Một lượt test đầy đủ sau batch sẽ phát hiện các vấn đề cross-cutting trước khi chúng đến review.
4. Apply fix mà không đọc diff trước ❌
Agent hiển thị cho bạn những gì đã thay đổi. Hãy đọc nó. Một bản fix 4 dòng chỉnh sai function có thể đưa vào một bug tệ hơn. Một phút review ngăn chặn một vụ escalation với khách hàng.
5. Nhờ /sk:fix fix triệu chứng thay vì nguyên nhân ❌
“Make the 500 go away” có thể dẫn đến việc error bị nuốt chửng thay vì xử lý. Mô tả hành vi đúng phải là gì: “return 422 with a JSON error body when the email field is missing.”
Xử Lý Sự Cố
Vấn đề: /sk:fix —quick thực hiện thay đổi nhưng bug vẫn tái hiện
Giải pháp: Quick mode đi theo con đường ngắn nhất. Chuyển sang full mode: /sk:fix "..." không có --quick để chạy điều tra sâu hơn và một bản fix toàn diện hơn.
Vấn đề: /sk:debug không thể tìm root cause từ log snippet
Giải pháp: Paste toàn bộ stack trace, không chỉ error message. Stack trace bao gồm tên file và số dòng mà debug agent sử dụng để trace execution path.
Vấn đề: Bản fix gây ra TypeScript error
Giải pháp: Chạy /sk:fix --quick "fix the TypeScript error introduced in src/services/billing.ts:89 — expected string, got string | null". Agent có thể resolve các side effect do chính nó tạo ra.
Vấn đề: Một bug nằm trong third-party integration và source code không có trong repo
Giải pháp: Dùng /sk:ask để hiểu ranh giới integration, sau đó fix adapter layer trong code của bạn. Agent không thể sửa code của bên thứ ba nhưng có thể sửa cách bạn gọi nó.
Bước Tiếp Theo
- Thêm Tính Năng Mới — sau khi xóa sạch bug backlog, chuyển sang feature work
- Tiếp Nhận Dự Án Có Sẵn — nếu bạn kế thừa một dự án đầy bug, hãy bắt đầu với định hướng toàn diện
- Triển Khai Xác Thực — nhiều bug report truy về các edge case của auth
Điểm mấu chốt: Một QA sheet với 5 bug nên xử lý xong trong một chiều thứ Sáu, không phải cả một sprint — /sk:fix cho bạn root cause và một bản fix đã kiểm tra trong vài phút, không phải vài giờ.