# AutoPOE2 - Quy Trình Giám Sát Real Test & Khôi Phục Tự Hành Khép Kín (Doc 64)
*(Supervised Real Test Procedure, Closed-Loop Autonomous Recovery & Farm Node Gating)*

> **Phiên bản**: 1.0.0 (SSoT 2026)  
> **Áp dụng**: Client Path of Exile 2 (2560x1440, Patch 0.5.5+), C++23 Core, Python 3.11 Companion  
> **Liên kết kiến trúc**: [Doc 50 (Two-Tier Asymmetric Architecture)](50_two_tier_asymmetric_hybrid_architecture_specification.md), [Doc 56 (Atlas Node Selector)](56_spec_atlas_node_selector_and_map_device_orchestration.md), [Doc 61 (Autonomy Gap Audit)](61_autonomy_gap_audit_and_next_development_basis.md), [Doc 63 (Item & Inventory Lifecycle)](63_item_inventory_stash_and_gem_lifecycle_specification.md)

---

## 1. Bối Cảnh & Mục Tiêu Nghiệm Thu Thực Nghiệm (Empirical DoD)

Theo nguyên tắc **Rule 5** ("Untested code is broken code, and mocked code is unproven code") và yêu cầu của người dùng, toàn bộ hệ thống phải được vận hành và giám sát trực tiếp trên client game thật 100% (*Path of Exile 2* đang chạy, độ phân giải 2560x1440, Shoreline Hideout):
- **Đa nguồn dữ liệu đồng bộ**: Kết hợp Live Game Window (GDI capture), Sentinel 3.0s liên tục, Log game thời gian thực (`logs/Client.txt`), WinOCR quang học, và kênh IPC Shared Memory Seqlock.
- **Giám sát khép kín từng bước**: Từng Stage trong chu trình cày map (Stage 1 $\to$ Stage 6) đều có mốc kiểm định (Milestone Verification), cấm đoán mò hoặc bỏ qua kiểm tra.
- **Phản ứng khẩn cấp tức thời (F8 Interlock)**: Bất kỳ khi nào phát hiện bất thường, timeout, hoặc ngoại lệ, hệ thống lập tức kích hoạt phím `F8` ngắt Core, nhả toàn bộ phím WASD, chụp ảnh hiện trường và đóng gói **Incident Dossier**.

---

## 2. Chu Trình Tự Hành 6 Giai Đoạn (The 6-Stage Autonomous Pipeline)

```mermaid
graph TD
    S1[Stage 1: Precheck Túi Đồ<br/>Quét 60 ô, chọn Waystone động] --> S2[Stage 2: Mở Map Device<br/>Zoom camera, Click LMB bệ đá, verify Atlas UI]
    S2 --> S3[Stage 3: Chọn Node & Nạp Waystone<br/>Lọc bỏ Well of Souls, Ctrl+Click, click TRAVERSE]
    S3 --> S4[Stage 4: Vào Portal Chuyển Cảnh<br/>Nhận diện vortex/nhãn Portal, Click LMB, đối soát Client.txt]
    S4 --> S5[Stage 5: Dọn Map Tự Trị<br/>25s combat loop, Hollow Form, sinh tồn CI]
    S5 --> S6[Stage 6: Thoát Map Về Hideout<br/>Mở portal phím '.', click portal, xác nhận Shoreline Hideout]
    S6 --> S1
```

### Stage 1: Kiểm Tra Túi Đồ & Định Vị Waystone Động (`INV-INVENTORY-DYNAMIC-LOCATE`)
- **Hành vi**: Nhấn phím `I` mở hành trang, chụp ảnh quang học `STAGE1_INVENTORY_OPEN.png`.
- **Thực thi**: Quét toàn bộ ma trận 12 cột $\times$ 5 hàng = 60 ô (`OpticalInventoryScanner.scan_all_waystones`).
- **Phản xạ túi đầy**: Nếu occupied $\ge 48$ ô, tự động phát Opcode 8 gọi The Hooded One Identify All.
- **Lựa chọn Waystone**: Tự động lấy Waystone đầu tiên khả dụng ở bất kỳ ô nào (không ép hàng 1). Đánh giá qua `WaystoneAutoCrafter` (INV-CRAFT-WAYSTONE-01).

### Stage 2: Tiếp Cận & Mở Giao Diện Map Device Tại Hideout (`INV-HIDEOUT-ENTITY-NAV-01`)
- **Hành vi**: Nếu khoảng cách $> 18\text{u}$, di chuyển tiếp cận bằng WASD + Tangent Sliding.
- **Độ phóng đại camera**: Thực hiện `DynamicCameraZoom(zoom_in=True)` cuộn chuột 4 nấc tăng kích thước bệ đá.
- **Tương tác**: Nhận diện bệ đá qua OCR nhãn `"MAP DEVICE"` hoặc ngọn lửa (x=1102, y=233 @1440p) $\to$ Click LMB có chủ đích.
- **Xác thực mở UI (`INV-MAPDEVICE-VERIFY-UI`)**:
  - Đo tỷ lệ pixel tối trung tâm màn hình: Atlas Tree có nền vũ trụ tối $> 55\%$ (khác với nền cát Hideout $\le 7\%$).
  - OCR nhận diện các tab chuyển đổi (`ENDGAME`, `WORLD`).
  - Click chuyển sang tab `ENDGAME` (x=1563, y=95) và Zoom-out camera về mặc định.

### Stage 3: Lọc Node Cày Thường & Kích Hoạt Bản Đồ (`INV-ATLAS-FARM-NODE`)
- **Khóa loại trừ Special Arena**:
  > [!CAUTION]
  > Tuyệt đối **CẤM** chọn đền thờ trung tâm `"The Well of Souls"` hoặc Citadel/Pinnacle Arenas cho farming loop tự hành! Các map này không có socket để cắm Waystone và Tablet.
  - Thuật toán `find_reachable_green_node` tự động loại trừ vùng bán kính $200\text{px}$ quanh tâm đền thờ $(1250, 480)$.
  - Ưu tiên các cụm màu xanh lá cây có kích thước lớn tại các nhánh cày bình thường (ví dụ: `(1075, 779)`, `(1641, 588)`).
- **Kiểm định hai lớp**: Sau khi click chọn node, OCR quét tên bản đồ. Nếu phát hiện `"WELL OF SOULS"`, lập tức unselect và chuyển sang node nhánh thông thường.
- **Nạp Waystone**: Bấm `I` mở túi, thực hiện `Ctrl + Click` tại ô Waystone đã chọn ở Stage 1 (ví dụ ô `(1731, 822)`).
- **Mở cổng bản đồ**: OCR tìm nút `"TRAVERSE"` (x=1089, y=814 @1440p) với retry polling $\to$ Click LMB kích hoạt. Chờ 2.5s cổng portal hình thành.

### Stage 4: Bước Vào Portal Chuyển Cảnh (`INV-WASD-NO-BLIND-LMB`)
- **Hành vi**: Nhấn `Spacebar` đóng các modal UI, chụp ảnh Hideout với 6 cổng portal đang mở.
- **Nhận diện cổng**: Tìm vortex xoáy xanh đặc trưng qua cụm màu $(B > 180, B > R+30)$ tại tọa độ $(874, 407)$ hoặc nhãn tên map.
- **Tương tác**: Click LMB trực tiếp lên portal. CẤM phím `F` (`INV-KEY-NO-F-FOR-INTERACT`).
- **Xác thực chuyển cảnh**: Lắng nghe `logs/Client.txt` qua `LogWatcher`. Chờ sự kiện `AreaTransition` / `Entered` xác nhận rời khỏi `Shoreline Hideout`.

### Stage 5: Vận Hành Tự Trị Trong Map (Autonomous In-Map Clear)
- **Hành vi**: Khởi động `AutonomousMapRunner` dọn map trong thời gian cấu hình (20-30s).
- **Hot Path 120Hz**: Phản xạ sinh tồn độc lập CI (Life 1/1, Shield 4,284/4,284, Ward 241/241, kích hoạt dodge/chicken theo ES).
- **Combat & Loot**: Xoay vòng kỹ năng Hollow Form, nhặt loot ưu tiên theo bán kính $\le 22\text{u}$ (`INV-LOOT-PROXIMITY-22U`).

### Stage 6: Thoát Map Bằng Town Portal & Quay Về Hideout An Toàn (`INV-KEY-PORTAL`)
- **Hành vi**: Nhấn phím `.` (`VK_OEM_PERIOD 0xBE`, HID `0x37`) mở Town Portal. TUYỆT ĐỐI CẤM phím `T` hay Warcry.
- **Chuyển cảnh**: Click LMB vào portal xanh vừa mở $\to$ chờ chuyển cảnh.
- **Đối soát an toàn**: Đọc `Client.txt` xác nhận nhân vật đã quay trở lại `Shoreline Hideout`.

---

## 3. Ma Trận Bất Biến & Cơ Chế Khẩn Cấp F8 Interlock (`INV-F8-MUTES-BRAIN`)

Khi xảy ra sự cố (ngoại lệ code, timeout không mở được UI, kẹt đường, hoặc mất focus), hệ thống thực thi quy trình khẩn cấp 5 bước:

```mermaid
sequenceDiagram
    participant Monitor as Watchdog / Stage Runner
    participant Interlock as Emergency F8 Interlock
    participant Game as Client POE2 Window
    participant Dossier as Incident Dossier Storage

    Note over Monitor: Phát hiện lỗi / ngoại lệ / timeout
    Monitor->>Interlock: emergency_f8_pause_and_release_all()
    Interlock->>Game: Nhả toàn bộ WASD, Space, Ctrl, LMB, RMB
    Interlock->>Game: Gửi phím F8 (Mute Core Brain)
    Monitor->>Game: Chụp ảnh hiện trường INCIDENT_FAIL_<STAGE>.png
    Monitor->>Dossier: Đóng gói screenshot + 100 dòng Client.txt + traceback.json
    Monitor-->>Interlock: Dừng tiến trình an toàn, chuyển trạng thái FAILED
```

1. **Nhả cưỡng chế toàn bộ phím nhập liệu**:
   - Gửi sự kiện `KEYEVENTF_KEYUP` cho toàn bộ phím di chuyển: `W` (`0x57`), `A` (`0x41`), `S` (`0x53`), `D` (`0x44`).
   - Nhả các phím modifier: `Ctrl` (`0x11`), `Spacebar` (`0x20`).
   - Nhả chuột: `MOUSEEVENTF_LEFTUP`, `MOUSEEVENTF_RIGHTUP`.
2. **Kích hoạt F8 Mute Bot Brain**:
   - Gửi phím `F8` (`VK_F8 0x77`, Scan code `0x42`) ra lệnh cho C++ Core và Python Companion tắt hoàn toàn `botBrain.Process`.
3. **Chụp ảnh hiện trường sự cố**:
   - Lưu ảnh chất lượng cao vào `debug_harness/incidents/INCIDENT_<TIME>_<STAGE>/incident_screenshot.png`.
4. **Trích xuất Log Client Thật**:
   - Lưu 100 dòng log gần nhất từ `Client.txt` vào `client_recent.log`.
5. **Ghi nhận Traceback & Hồ Sơ Phân Tích**:
   - Lưu đầy đủ call stack, exception message vào `incident_report.json`.

---

## 4. Bằng Chứng Thực Nghiệm Từ Phiên Chạy Live (Session 20260916_093625)

Phiên kiểm thử thực tế trên client POE2 (Shoreline Hideout, 2560x1440, CI build Shield 4,284):

| Stage | Tên Giai Đoạn | Kết Quả Thực Tế | Tệp Bằng Chứng |
|---|---|---|---|
| **Precheck** | Baseline State | `HWND 0x3D0348`, Focused `True`, Zone `Shoreline Hideout` | `stages/20260916_093626_935_BASELINE_INITIAL_STATE.png` |
| **Stage 1** | Túi đồ & Waystone | Quét 26/60 ô, chọn Waystone Tier XV tại Ô `(0, 0)` (tọa độ 1731, 822) | `sentinel/20260916_093629_700_STAGE1_INVENTORY_OPEN.png` |
| **Stage 2** | Mở Map Device | Zoom camera, click bệ đá (1102, 233), dark ratio > 55%, mở tab ENDGAME (1563, 95) | `sentinel/20260916_093637_926_STAGE2_MAP_DEVICE_OPENED.png` |
| **Stage 3** | Chọn Node & Nạp Waystone | Chọn Reachable Node, mở túi, Ctrl+Click nạp Waystone, OCR nút TRAVERSE (1089, 814) $\to$ **Mở thành công 6 portal rực rỡ** | `sentinel/20260916_093646_815_STAGE3_NODE_LOADED.png`<br/>`sentinel/20260916_093651_230_STAGE3_MAP_ACTIVATED.png` |
| **Sentinel** | Chụp định kỳ 3s | Chụp liên tục 9 frame ảnh trong suốt 27.42 giây | `sentinel/sentinel_3s_*_0001.png .. 0009.png` |

---

## 5. Kết Luận & Hướng Dẫn Vận Hành

Lệnh thực thi phiên Real Test tự hành:
```powershell
# Chạy chu trình đầy đủ có giám sát khép kín
python scripts/run_supervised_real_test.py --max-maps 1 --map-duration 25

# Chạy kiểm tra từng đoạn độc lập (Stage 1-3)
python scripts/run_supervised_real_test.py --stage-stop 3
```
Mọi hành vi đều tuân thủ nghiêm ngặt 8 quy chuẩn SSoT tại `AGENTS.md` và 15 mã bất biến kiến trúc.
