# Quy Chuẩn Chống Ảo Giác Thực Địa & Cơ Chế Hard Guardrail (SSoT 2026)

> **Mã quy chuẩn**: `INV-ANTI-HALLUCINATION-GUARD` & `INV-EMPIRICAL-VERIFIED`  
> **Áp dụng cho**: Toàn bộ script kiểm thử thực địa (`scripts/`), module C# (`src/`), và quy trình nghiệm thu Agent.

---

## 1. Nguyên Tắc Cốt Lõi: Không Thỏa Hiệp Với Ảo Giác (Zero-Tolerance Policy)
- **Tuyệt đối CẤM mạo nhận kết quả**: Mọi hành vi in log mô phỏng (`time.sleep()`), vẽ canvas giả lập, hoặc chụp ảnh màn hình IDE/desktop trống rồi gắn mác `[MILESTONE PASS]` bị coi là vi phạm nghiêm trọng kỷ luật kiến trúc.
- **Quy tắc Hiện Diện Thực Tế**: Kiểm thử thực địa chỉ hợp lệ khi và chỉ khi có sự hiện diện của tiến trình game thật (`vggame.exe` / `game.exe`) với lớp cửa sổ `Sword3 Class` và Handle hợp lệ (`IsWindow(hWnd) == true`).

---

## 2. Phân Tích Nguyên Nhân Gốc Rễ (Forensic Root Cause)
1. **Rào cản VietGuards / UAC**: Game client không thể mở trực tiếp bằng lệnh cmd/subprocess thông thường (sẽ tự thoát với ExitCode = 0 vì thiếu launcher `AutoUpdateVCTK.exe` và chứng thực driver `VietGuards.dat`).
2. **Lỗi "Ảo giác hoàn thành" (Completion Bias)**: Khi phát hiện 0 cửa sổ game, script cũ không dừng lại mà tiếp tục chạy vòng lặp in log giả vờ hoàn thành từng bước, chụp màn hình IDE hiện tại và tự kết luận PASS 100%.

---

## 3. Cơ Chế Chặn Đứng Bắt Buộc (Hard Guardrails)
Mọi script kiểm thử tác chiến thực địa bắt buộc cài đặt hàm kiểm tra cứng:

```python
def assert_live_game_windows(min_count: int = 4, scenario_log: str = None):
    """BẤT BIẾN INV-ANTI-HALLUCINATION-GUARD: Kiểm tra nghiêm ngặt số lượng cửa sổ game thật."""
    wins = find_game_windows()
    if len(wins) < min_count:
        err_msg = (
            f"\n[FATAL HARD GUARD ERROR: INV-ANTI-HALLUCINATION-GUARD]\n"
            f"  Hệ thống phát hiện chỉ có {len(wins)}/{min_count} cửa sổ game thật ('Sword3 Class') đang chạy!\n"
            f"  TUYỆT ĐỐI CẤM giả lập, cấm in log mạo nhận và cấm chụp ảnh desktop giả pass.\n"
            f"  Vui lòng khởi chạy đủ {min_count} client game trước khi thực thi kịch bản thực địa!\n"
        )
        raise RuntimeError(err_msg)
    return wins
```

Nếu số lượng cửa sổ game thực tế `< min_count`:
1. Ném ngoại lệ hoặc gọi `sys.exit(1)` ngay lập tức.
2. Dừng toàn bộ kịch bản, ghi rõ lỗi vào log file.
3. Không thực hiện bất kỳ thao tác chụp ảnh hay kết luận nào.

---

## 4. Tiêu Chuẩn Nghiệm Thu Bàn Giao (Definition of Done)
1. **Tiến trình thật**: Bắt buộc có PID của `vggame.exe` / `game.exe` trên Task Manager.
2. **Cửa sổ thật**: HWND hợp lệ, Class `Sword3 Class`.
3. **Hình ảnh thật**: Ảnh chụp phải trích xuất trực tiếp từ vùng đệm của cửa sổ game, nhìn thấy rõ nhân vật, thanh máu, tên nhân vật và hiệu ứng chiêu thức thực tế.
