---
name: "TDD Auto-Sandbox Loop"
description: "Vòng lặp tự động hóa việc phát triển tính năng bằng cách viết Script thử nghiệm (Test-Driven Sandbox), cho AI tự chạy, tự đọc lỗi, tự sửa code đến khi đầu ra chuẩn 100% trước khi ghép vào ứng dụng chính."
---

# TDD Auto-Sandbox Loop (Vòng lặp Tự Động Thử Nghiệm)

Sử dụng workflow này khi User yêu cầu: **"Xây dựng một tính năng mới", "Kiểm tra và sửa lỗi logic", "Tạo luồng kết nối DB mới (chọc SQL)"**, hoặc User trực tiếp gọi lệnh `/auto-tdd`.

## MỤC TIÊU
- TUYỆT ĐỐI KHÔNG sửa file API lõi (`router.py`, `engine.py`,...) ngay lập tức để tránh làm "chết" server hoặc sập Production.
- Mô phỏng và chạy thử nghiệm mọi logic mới hoàn toàn độc lập trong thư mục Sandbox (`backend/scripts/`).
- Tận dụng khả năng "chữa lành" (self-healing) của AI: Tự chạy script -> Tự đọc lỗi -> Tự fix code -> Lặp lại đến khi kết quả Data (Output) chính xác tuyệt đối.
- Chỉ "Cấy" (Inject) code vào Source chính khi User đã xác nhận hoặc Output Sandbox đã đạt 100% tỉ lệ thành công.

---

## 🛠 CÁC BƯỚC THỰC HIỆN BẮT BUỘC

### Bước 1: Phân tích & Viết Script Rác (Sandbox Setup)
1. Xác định rõ Input (Đầu vào) và Expected Output (Kết quả mong muốn) của User.
2. Tạo 1 file Python độc lập trong thư mục `backend/scripts/` có tên phản ánh tính năng.
   *(Ví dụ: `backend/scripts/test_fetch_stock_logic.py`, `backend/scripts/scratch_sql_query.py`)*
3. Setup file này sao cho nó **có thể tự chạy được (`__main__`)**, tự import các common function, DB connections cần thiết từ hệ thống, và trả log kết quả ra cửa sổ Console (sử dụng in mã UTF-8 bằng `sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')`).

### Bước 2: Kích hoạt Vòng Lặp Chữa Lành (Self-Healing Auto-Run)
- **// turbo-all**
1. AI sử dụng công cụ Tự chạy Command (Terminal) để thực thi file python rác vừa tạo.
2. **KẾT QUẢ > LỖI (Exception/Syntax Error):** AI đọc Terminal Error -> Hiểu nguyên nhân -> Tự sửa lại file Test -> Chạy lệnh lại.
3. **KẾT QUẢ > SAI LOGIC (Data rác, không map đúng Rule):** AI phân tích Output thực tế vs Output kì vọng -> Tìm hiểu Rule hệ thống -> Tự sửa lại file Test -> Chạy lệnh lại.
4. Quá trình này **không cần sự can thiệp của User**, AI liên tục chạy lệnh và fix đến khi nào màn hình kết quả Terminal (Data in ra) đúng 100% logic.

### Bước 3: Show kết quả cho User Duyệt
- Sau khi có cái "Mộc xanh" trên Terminal (Output chuẩn). 
- AI chụp (hoặc copy paste) cái Output Terminal đó gửi cho User kèm lời báo cáo: *"Script đã chạy thành công, log data chuẩn. Bro check xem ưng ý chưa để tôi cấy vào hệ thống chính?"*
- Nếu User OK -> Lên Bước 4.
- Nếu User muốn điều chỉnh -> Lại vòng về Bước 2.

### Bước 4: Cấy Ghép Vào Hệ Thống (Production Injection)
- Mở file hệ thống lõi (ví dụ: `worker/stylist_engine.py`, `api/router.py`).
- Triển khai chức năng đã TEST THÀNH CÔNG từ file Sandbox vào hàm chuẩn.
- Lưu ý khi cấy phải giữ nguyên toàn bộ chuẩn biến số của hàm hiện tại. 
- Xóa các lệnh in rác (`print`) ở Sandbox và thay bằng `logger.info()` chuẩn.

### Bước 5: Cleanup & Commit
- Cleanup code thừa, chuyển file rác trong `scripts/` về trạng thái đọc tắt comment nếu cần thiết (hoặc đổi tên thành `archive_...` nếu Task yêu cầu luỹ kế) để giữ gọn Project backend.

## ⚠️ QUY TẮC SỐNG CÒN CỦA WORKFLOW
- **CHẶN SỬA MÙ:** Cấm sửa trực tiếp hệ thống logic vòng lặp lớn (như thuật toán Fashion Stylist Engine) khi chưa chạy Test Script Sandbox để kiểm chứng 1 input nhỏ lẻ!
- **ENCODING LUÔN LUÔN UTF-8:** Database Canifa chứa rất nhiều Tiếng Việt có dấu, khi in `print()` ra Windows Powershell thường bị lỗi charmap. Phải cài cắm header cho file Sandbox:
  ```python
  import sys, io
  sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
  ```
- **TỰ CHỦ ĐỘNG:** Đừng rụt rè gõ ra để hỏi User là lỗi này phải sửa sao. Dùng Tool `run_command` fix liên tục cho đến khi gõ chạy Terminal ngon êm ru nhé!
