# 6. Checklist sau khi sửa

Mỗi lần sửa bất kỳ file nào trong Lead Agent, **bắt buộc** chạy qua checklist này:

## Pre-deploy Checklist

| # | Hành động | Tool | Bắt buộc |
|---|---|---|---|
| 1 | Chạy User Simulator 50 test case | `python simulator.py --count 50` | **Bắt buộc** |
| 2 | Kiểm tra Langfuse trace 10 request gần nhất | Langfuse Dashboard | **Bắt buộc** |
| 3 | Verify InsightJSON không bị null | Redis CLI: `GET lead_insight:*` | Bắt buộc nếu sửa graph.py |
| 4 | Verify Cascading Search trả kết quả | Log `[SEARCH]` | Bắt buộc nếu sửa engine |
| 5 | Test Early Exit (gửi "Hi") | Chat Widget | Bắt buộc nếu sửa prompts |
| 6 | Test Upsell (gửi budget thấp) | Chat Widget | Bắt buộc nếu sửa engine |

## Test Case bắt buộc (Smoke Test)

| # | Input | Expected Mode | Expected Behavior |
|---|---|---|---|
| 1 | "Hi" | Mode 1 (BROWSE) | Chào hỏi, KHÔNG search |
| 2 | "Tìm áo khoác" | Mode 2 (IDENTIFYING) | Hỏi thêm (giá, dịp, size) |
| 3 | "Áo khoác nam mùa đông dưới 500k" | Mode 3 (CONSIDERING) | Search + tư vấn SP |
| 4 | "Lấy anh cái đầu tiên" | Mode 4 (CLOSING) | Xin SĐT/Email |
| 5 | "SĐT 0912345678" | Mode 5 (RETENTION) | Cảm ơn + lưu DB |
| 6 | "Thôi để sau" | Mode 5 (RETENTION) | Mở đường lùi, KHÔNG chèo kéo |
| 7 | "Cho mình xem quần đi" | Mode 2 (IDENTIFYING) | Downgrade từ Mode 3 → 2 |
| 8 | "Đắt quá" (2 lần) | Mode 3 | DỪNG Upsell, gợi ý đồ rẻ hơn |

## Rollback Plan

Nếu sau deploy phát hiện lỗi:

1. **Sửa prompt:** Revert file `prompts.py` về commit trước → restart server
2. **Sửa logic:** Revert `graph.py` hoặc `product_search_engine.py` → restart
3. **Sửa data:** Nếu lỗi do tag mới → xoá BITMAP column trong StarRocks

```bash
# Rollback nhanh
git checkout HEAD~1 -- backend/agent/lead_stage_agent/prompts.py
# Restart
systemctl restart canifa-backend
```
