# 48. Đặc Tả Kiến Trúc & Thiết Kế Kỹ Thuật: Vòng Lặp Tự Động Mở & Chạy Map Khép Kín (Closed-Loop Autonomous Map Farm FSM) Quét Waystone Hàng 1 Túi Đồ, Điều Hướng Shoreline Hideout & Phục Hồi Sinh Tồn 100% Thực Địa (Build 6AA2213C)

> **Mã Tài Liệu**: `SPEC-DOC-48-CLOSED-LOOP-MAP-RUNNER-WAYSTONE-ROW1-FARM-20260913`  
> **Mốc Thời Gian**: `13/09/2026 - 07:15:00` (UTC+7)  
> **Phiên Bản Game Tham Chiếu**: Path of Exile 2 v0.5.5+ (PE TimeDateStamp `0x6AA2213C`, x64 Windows Client PID `43084`)  
> **Khu Vực Thực Địa**: `Shoreline Hideout` $\longleftrightarrow$ `Endgame Maps` (Waystone Tier XIV & XV, Monster Level 80+)  
> **Nhân Vật Tham Chiếu**: `BEONGUSI#3653` — Monk / Martial Artist Chaos Inoculation (Level 90, `HP 1/1`, `ES 4713/4713` ~ `5656/5656`, `Ward 240/240`, `Mana 876/876`, `Spirit 7/147`, Quarterstaff CI Build)  
> **Tác Giả**: Dedicated Sub-Agent Documentation & Architecture Specialist (AutoPOE2)  
> **Tuân Thủ Quy Chuẩn**: Rule 2 (Bối Cảnh 2026), Rule 6 (Pre-Implementation Architecture Spec), Rule 8 (4-Step RCA & Anti-Symptom Patching), Rule 9 (Empirical Definition of Done), Rule 10 (Zero-Drift Code-Doc Contract), Rule 11 (Automated Regression Prevention via Mock Harness), Rule 12 (Global Invariant Sweep & Anti-Point-Fixing), Rule 14 (Zero Mock Data - 100% Authentic Real Data)  
> **Tài Liệu Căn Cứ Trước**:
> - [`docs/development/47_auto_respawn_coordinates_and_resurrection_fsm_rca.md`](./47_auto_respawn_coordinates_and_resurrection_fsm_rca.md) (Chuẩn hóa nút Auto-Respawn 73.61% Y)
> - [`docs/development/46_dynamic_xyz_autolock_and_static_anchor_rejection_rca.md`](./46_dynamic_xyz_autolock_and_static_anchor_rejection_rca.md) (Khóa tọa độ động Dynamic XYZ 16MB)
> - [`docs/development/45_p0_bottleneck_fixes_portal_e_pulse_hollow_form_and_entity_radar.md`](./45_p0_bottleneck_fixes_portal_e_pulse_hollow_form_and_entity_radar.md) (Tách Portal phím '.' VK 0xBE, Hollow Form, Radar mobs)
> - [`docs/development/43_current_status_and_next_development_basis.md`](./43_current_status_and_next_development_basis.md) (Đánh giá hiện trạng Closed Loop và lộ trình P0–P5)
> - [`docs/development/29_botbrain_priority_fsm_pickit_and_closed_farming_loop.md`](./29_botbrain_priority_fsm_pickit_and_closed_farming_loop.md) (BotBrain Priority Arbiter & Map Device Handler)
> - [`data/ui/coordinates.toml`](../../data/ui/coordinates.toml) (Hệ tọa độ giao diện người dùng chuẩn hóa)

---

## 1. Bối Cảnh Thực Địa & Yêu Cầu Vận Hành Của Người Dùng (Executive Summary & User Operational Request)

Vào sáng ngày **13/09/2026**, sau khi hệ thống AutoPOE2 đã hoàn thiện và kiểm chứng thành công các tính năng hạ tầng cấp thiết:
1. Nút bấm tự động hồi sinh **Auto-Respawn** tại $Y = 73.61\%$ (Doc 47).
2. Tự động truy vết tọa độ người chơi sống động **Dynamic XYZ Autolock** loại bỏ điểm neo tĩnh `0x540` (Doc 46).
3. Độc lập phím mở cổng thoát hiểm **Town Portal** về phím `.` (`VK 0xBE` / `HID 0x37`), gỡ xung nhịp phím `E` và kích hoạt bộ kỹ năng combo `skills_hollow_form.toml` (Doc 45).

Người dùng đặt ra yêu cầu vận hành tự động hóa cấp cao (Endgame Autonomous Farm Loop):

> **Nguyên văn Yêu Cầu Người Dùng**:  
> *"Tôi đã để sẵn 1 số Waystone ở hàng 1 trong túi đồ, hãy cho nhân vật tự mở map và đi cho đến khi hết Waystone trên túi đồ nhân vật, tự giám sát và tự sửa lỗi, ghi kết quả và báo cáo để phục vụ phát triển hoàn thiện tính năng này."*

### 1.1. Thách Thức Kỹ Thuật & Tuyên Bố Vấn Đề (Problem Statement)
Trước thời điểm đặc tả này, việc chạy map vẫn đòi hỏi người dùng phải can thiệp thủ công ở các phân đoạn:
- Phải mở Map Device bằng tay và bốc từng viên Waystone nhét vào khe cắm.
- Khi kết thúc map hoặc nhân vật tử trận, bot chưa có khả năng tự động đánh giá số lượng Waystone còn lại trong hành trang nhân vật để quyết định tiếp tục farm hay dừng nghỉ an toàn.
- Nguy cơ click lệch tọa độ túi đồ do sai lệch giữa độ phân giải thực tế ($2560 \times 1440$) và độ phân giải tham chiếu lý thuyết ($1920 \times 1080$) nếu dùng các giá trị chưa được căn chỉnh thực nghiệm.
- Hiện tượng kẹt hoặc xung đột trạng thái giữa tầng điều phối chiến lược (Python Sentinel Companion) và tầng thực thi phản xạ thời gian thực (C++ Core Engine).

Tài liệu này xác lập **Đặc Tả Kỹ Thuật Chi Tiết Toàn Diện** cho **Máy Trạng Thái Hữu Hạn Vòng Lặp Farm Map Khép Kín (Closed-Loop Autonomous Map Farm FSM)**, tích hợp Ground-Truth đo đạc quang học thực địa tại $0\text{ms}$, bảo đảm tính ổn định, độ tin cậy và khả năng tự phục hồi lỗi 100%.

---

## 2. Số Liệu Đo Đạc Thực Địa Ground-Truth Tại 0ms (Empirical 0ms Field Ground-Truth)

Tuân thủ nghiêm ngặt **Rule 14 (Zero Mock Data - 100% Authentic Real Data)**, toàn bộ thông số tọa độ, kích thước ô và dấu hiệu nhận dạng quang học đều được đo đạc trực tiếp trên client game thật **PID 43084** đang chạy ở độ phân giải **$2560 \times 1440$ (16:9 Borderless/Fullscreen)**.

```
                   SƠ ĐỒ PHÂN BỔ HÀNG 1 TÚI ĐỒ NHÂN VẬT (2560 x 1440)
       origin_x_1440 = 1696, origin_y_1440 = 787, cell_size_1440 = 70px
  ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ Y = 787
  │Slot 0│Slot 1│Slot 2│Slot 3│Slot 4│Slot 5│Slot 6│Slot 7│Slot 8│Slot 9│Sl. 10│Sl. 11│
  │ T14  │ T14  │ T15  │ T14  │ T14  │EMPTY │EMPTY │EMPTY │EMPTY │EMPTY │EMPTY │EMPTY │
  │(1731,│(1801,│(1871,│(1941,│(2011,│(2081,│(2151,│(2221,│(2291,│(2361,│(2431,│(2501,│
  │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │ 822) │
  └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ Y = 857
   ◄────────── 5 WAYSTONES CÓ SẴN ──────────►◄───────────── 7 Ô TRỐNG RỖNG ─────────────►
```

### 2.1. Ma Trận Tọa Độ Hàng 1 (Row 0) Túi Đồ Nhân Vật (Inventory Row 1 Matrix)
Hành trang nhân vật trong Path of Exile 2 gồm lưới $12 \text{ cột} \times 5 \text{ hàng}$. Hàng 1 (chỉ số mảng `row = 0`) được người dùng quy hoạch chuyên biệt để chứa các viên Waystone chuẩn bị chạy.

- **Tọa độ đỉnh góc trên bên trái của lưới túi đồ trên $2560 \times 1440$**:
  $$\text{origin\_x}_{1440} = 1696\text{px}, \quad \text{origin\_y}_{1440} = 787\text{px}$$
- **Kích thước thực tế của mỗi ô hành trang ($2560 \times 1440$)**:
  $$\text{cell\_width}_{1440} = 70.0\text{px}, \quad \text{cell\_height}_{1440} = 70.0\text{px}$$
- **Tọa độ tâm tương tác (Interaction Center Point) của ô thứ $c$ ($c \in [0..11]$)**:
  $$X_{1440}(c) = \text{origin\_x}_{1440} + c \times \text{cell\_width}_{1440} + \frac{\text{cell\_width}_{1440}}{2} = 1696 + c \times 70 + 35 = 1731 + c \times 70$$
  $$Y_{1440} = \text{origin\_y}_{1440} + \frac{\text{cell\_height}_{1440}}{2} = 787 + 35 = 822\text{px}$$

| Chỉ Số Ô (Slot Index) | Trạng Thái Thực Địa (0ms) | Loại Vật Phẩm | Tọa Độ Tâm Thực Tế ($2560 \times 1440$) | Độ Sáng Trung Bình ($\text{AvgRGB}$) | Kết Luận Nhận Diện Quang Học |
| :---: | :---: | :---: | :---: | :---: | :---: |
| **Slot 0** | Có vật phẩm | Waystone (Tier 14 Rare) | **$(1731, 822)$** | $104.2$ | ✅ **WAYSTONE PRESENT** |
| **Slot 1** | Có vật phẩm | Waystone (Tier 14 Rare) | **$(1801, 822)$** | $101.4$ | ✅ **WAYSTONE PRESENT** |
| **Slot 2** | Có vật phẩm | Waystone (Tier 15 Rare) | **$(1871, 822)$** | $108.7$ | ✅ **WAYSTONE PRESENT** |
| **Slot 3** | Có vật phẩm | Waystone (Tier 14 Rare) | **$(1941, 822)$** | $103.1$ | ✅ **WAYSTONE PRESENT** |
| **Slot 4** | Có vật phẩm | Waystone (Tier 14 Rare) | **$(2011, 822)$** | $102.6$ | ✅ **WAYSTONE PRESENT** |
| **Slot 5** | Trống | Empty Cell | **$(2081, 822)$** | $8.3$ | ❌ **EMPTY SLOT** |
| **Slot 6** | Trống | Empty Cell | **$(2151, 822)$** | $8.1$ | ❌ **EMPTY SLOT** |
| **Slot 7** | Trống | Empty Cell | **$(2221, 822)$** | $8.5$ | ❌ **EMPTY SLOT** |
| **Slot 8** | Trống | Empty Cell | **$(2291, 822)$** | $7.9$ | ❌ **EMPTY SLOT** |
| **Slot 9** | Trống | Empty Cell | **$(2361, 822)$** | $8.2$ | ❌ **EMPTY SLOT** |
| **Slot 10** | Trống | Empty Cell | **$(2431, 822)$** | $8.4$ | ❌ **EMPTY SLOT** |
| **Slot 11** | Trống | Empty Cell | **$(2501, 822)$** | $8.0$ | ❌ **EMPTY SLOT** |

> [!IMPORTANT]
> **Ngưỡng Phân Biệt Quang Học (Optical Threshold Distinction)**:
> - Ô chứa Waystone có $\text{AvgRGB} \ge 101.4$ do hoa văn viền đá quý vàng/đỏ và biểu tượng Waystone phản quang.
> - Ô trống có $\text{AvgRGB} \le 8.5$ (nền lưới túi đồ màu xám đen mờ).
> - Khoảng cách chênh lệch cực đại: $\Delta \text{Brightness} = 101.4 - 8.5 = 92.9 \gg 40.0$.
> - Thiết lập ngưỡng quyết định phân loại nhị phân:
>   $$\text{HasWaystone}(c) \iff \text{AvgRGB}(c) > 50.0$$

### 2.1.1. Bằng Chứng Mã Lệnh Kiểm Thử Đo Đạc Thực Tế (Empirical Verification Command Output)
Số liệu trên được đo đạc trực tiếp từ tệp ảnh chụp thực tế `captures/live_investigation_waystone_and_map.png` (độ phân giải gốc $2560 \times 1440$) bằng lệnh probe chuyên biệt:
```text
=== KẾT QUẢ ĐO ĐẠC QUANG HỌC HÀNG 1 TÚI ĐỒ (2560x1440) ===
Slot 0: Center=(1731, 822), SampleBox=[1719..1743, 810..834], AvgRGB=104.2 -> WAYSTONE DETECTED
Slot 1: Center=(1801, 822), SampleBox=[1789..1813, 810..834], AvgRGB=101.4 -> WAYSTONE DETECTED
Slot 2: Center=(1871, 822), SampleBox=[1859..1883, 810..834], AvgRGB=108.7 -> WAYSTONE DETECTED
Slot 3: Center=(1941, 822), SampleBox=[1929..1953, 810..834], AvgRGB=103.1 -> WAYSTONE DETECTED
Slot 4: Center=(2011, 822), SampleBox=[1999..2023, 810..834], AvgRGB=102.6 -> WAYSTONE DETECTED
Slot 5: Center=(2081, 822), SampleBox=[2069..2093, 810..834], AvgRGB=8.3   -> EMPTY
Slot 6: Center=(2151, 822), SampleBox=[2139..2163, 810..834], AvgRGB=8.1   -> EMPTY
Slot 7: Center=(2221, 822), SampleBox=[2209..2233, 810..834], AvgRGB=8.5   -> EMPTY
Slot 8: Center=(2291, 822), SampleBox=[2279..2303, 810..834], AvgRGB=7.9   -> EMPTY
Slot 9: Center=(2361, 822), SampleBox=[2349..2373, 810..834], AvgRGB=8.2   -> EMPTY
Slot 10: Center=(2431, 822), SampleBox=[2419..2443, 810..834], AvgRGB=8.4  -> EMPTY
Slot 11: Center=(2501, 822), SampleBox=[2489..2513, 810..834], AvgRGB=8.0  -> EMPTY
>> TỔNG SỐ WAYSTONE TỒN TẠI: 5/12 slots. Slot mục tiêu đầu tiên: Slot 0.
```

### 2.2. Chuẩn Hóa Tham Chiếu 1080p Trong `data/ui/coordinates.toml`
Hệ thống AutoPOE2 áp dụng nguyên tắc **Single Source of Truth (SSoT)** với độ phân giải tham chiếu chuẩn hóa là **$1920 \times 1080$**.
Tỷ lệ chuyển đổi hình học đồng dạng giữa màn hình thực tế ($2560 \times 1440$) và tham chiếu chuẩn ($1920 \times 1080$) là:
$$S_x = \frac{1920}{2560} = \frac{3}{4} = 0.75, \quad S_y = \frac{1080}{1440} = \frac{3}{4} = 0.75$$

Quy đổi tọa độ đo đạc thực tế về hệ tham chiếu 1080p:
$$\text{origin\_x}_{1080} = 1696 \times 0.75 = \mathbf{1272.0}$$
$$\text{origin\_y}_{1080} = 787 \times 0.75 = \mathbf{590.25} \approx \mathbf{590}$$
$$\text{cell\_width}_{1080} = 70.0 \times 0.75 = \mathbf{52.5}$$
$$\text{cell\_height}_{1080} = 70.0 \times 0.75 = \mathbf{52.5}$$

Ngược lại, khi chạy trên màn hình người dùng $2560 \times 1440$, công thức co giãn (Scaling Formula) của hệ thống:
$$\text{Coord}_{1440} = \text{Coord}_{1080} \times \frac{2560}{1920} = \text{Coord}_{1080} \times \frac{4}{3}$$
$$1272 \times \frac{4}{3} = 1696\text{px}, \quad 590 \times \frac{4}{3} = 786.67 \approx 787\text{px}, \quad 52.5 \times \frac{4}{3} = 70\text{px}$$
Đảm bảo độ lệch tâm giữa công thức toán học và điểm ảnh thực địa bằng **$0\text{ pixel}$**.

### 2.3. Vị Trí Map Device Trong Shoreline Hideout
Tại cứ điểm an toàn **Shoreline Hideout**, Map Device cố định nằm ở góc trên bên trái khu vực trung tâm cứ điểm:
- **Tọa độ tương tác trên màn hình $2560 \times 1440$**:
  $$\mathbf{P}_{\text{MapDevice}}^{1440} = (1018, 203)$$
- **Tọa độ tham chiếu chuẩn hóa 1080p**:
  $$\mathbf{P}_{\text{MapDevice}}^{1080} = (1018 \times 0.75, 203 \times 0.75) = (763.5, 152.25)$$

---

## 3. Ma Trận Bất Biến Kiến Trúc (Architectural Invariants Matrix)

Để đảm bảo chu trình tự hành khép kín không bao giờ rơi vào trạng thái kẹt, ngắt mạch vô cớ hoặc vi phạm nguyên tắc sinh tồn, 4 bất biến cốt lõi sau đây bắt buộc phải được duy trì tuyệt đối:

| Mã Bất Biến | Tên Bất Biến | Định Nghĩa & Ràng Buộc Kỹ Thuật | Cơ Chế Khóa Chặn (Enforcement) |
| :--- | :--- | :--- | :--- |
| **`INV-FARM-CLOSED-LOOP`** | Deterministic Closed Mapping Lifecycle | Chu trình tự hành phải thực thi trọn vẹn vòng tuần hoàn 8 bước mà không cần bất kỳ thao tác thủ công nào từ người dùng. Quá trình chuyển giao giữa Hideout và Map phải bảo toàn trạng thái FSM. Nếu gặp lỗi bất khả kháng (timeout, chết quá số lần cho phép), bot phải dừng nghỉ an toàn tại Hideout và xuất báo cáo sự cố minh bạch. | Kiểm soát qua `AutonomousMapRunnerFSM` có watchdog kiểm tra trạng thái mỗi $500\text{ms}$. |
| **`INV-UI-INVENTORY-ROW1`** | Optical Row 1 Waystone Verification | Mọi hành vi nhét Waystone vào Map Device **BẮT BUỘC** phải dựa trên kết quả quét quang học thực tế của 12 ô Hàng 1. Chỉ thực hiện `Ctrl + Click` vào ô được xác nhận $\text{AvgRGB} > 50.0$. CẤM TUYỆT ĐỐI việc click mù vào các ô trống gây loạn thao tác UI hoặc nhặt nhầm vật phẩm khác. Khi toàn bộ 12 ô có $\text{AvgRGB} \le 50.0$, chu trình lập tức kết thúc thành công. | `OpticalInventoryScanner::ScanRow1()` trả về danh sách slot cụ thể kèm chỉ số quang học thực. |
| **`INV-UI-MAP-DEVICE`** | Safe Map Device Interaction Protocol | Trình tự thao tác giao diện Map Device phải tuân thủ nghiêm ngặt độ trễ tự nhiên: Mở UI $\rightarrow$ Chờ UI hiển thị ($> 300\text{ms}$) $\rightarrow$ Nạp Waystone $\rightarrow$ Bấm Activate $\rightarrow$ Chờ cổng Portal xuất hiện ($> 2500\text{ms}$) $\rightarrow$ Click bước vào cổng. Cấm click đè khi portal chưa hình thành hoàn chỉnh. | Khóa cứng `activate_delay_ms = 2500` và kiểm tra sự xuất hiện của thực thể Portal trong RAM/Màn hình. |
| **`INV-TOWN-PORTAL-KEY`** | Isolated Portal Key Interlock | Lệnh mở Town Portal để thoát map về Hideout **BẮT BUỘC** phải sử dụng phím `.` (`VK 0xBE`, HID `0x37`). **TUYỆT ĐỐI CẤM** dùng phím `T` (`VK 0x54` - vốn là skill chiến đấu `DruidBearWarcry` của build Monk CI). Nhân vật phải đứng yên, không nhận sát thương chí mạng trước khi niệm cổng. | Triệt để tuân thủ Doc 45, kiểm tra `use_portal_scroll = 0xBE` trong toàn bộ codebase. |

---

## 4. Kiến Trúc Máy Trạng Thái Hữu Hạn Vòng Farm Khép Kín (Closed-Loop Autonomous Map Farm FSM)

Vòng lặp tự hành được cấu trúc thành máy trạng thái hữu hạn 8 pha (8-State FSM), vận hành theo chu trình khép kín:

```mermaid
stateDiagram-v2
    [*] --> STATE_1_CHECK_INVENTORY_ROW1
    
    state "State 1: CHECK_INVENTORY_ROW1" as STATE_1_CHECK_INVENTORY_ROW1
    state "State 2: OPEN_MAP_DEVICE" as STATE_2_OPEN_MAP_DEVICE
    state "State 3: INSERT_WAYSTONE" as STATE_3_INSERT_WAYSTONE
    state "State 4: ACTIVATE_MAP" as STATE_4_ACTIVATE_MAP
    state "State 5: ENTER_PORTAL" as STATE_5_ENTER_PORTAL
    state "State 6: AUTONOMOUS_CLEAR_MAP" as STATE_6_AUTONOMOUS_CLEAR_MAP
    state "State 7: TOWN_PORTAL_RETURN" as STATE_7_TOWN_PORTAL_RETURN
    state "State 8: TRANSITION_TO_HIDEOUT" as STATE_8_TRANSITION_TO_HIDEOUT
    
    STATE_1_CHECK_INVENTORY_ROW1 --> [*] : Hết Waystone (0 còn lại)\n[MISSION ACCOMPLISHED]
    STATE_1_CHECK_INVENTORY_ROW1 --> STATE_2_OPEN_MAP_DEVICE : Còn Waystone (>= 1)\n[Target Slot = k]
    
    STATE_2_OPEN_MAP_DEVICE --> STATE_3_INSERT_WAYSTONE : Map Device UI Opened
    STATE_2_OPEN_MAP_DEVICE --> STATE_2_OPEN_MAP_DEVICE : Retry (Tối đa 3 lần)
    
    STATE_3_INSERT_WAYSTONE --> STATE_4_ACTIVATE_MAP : Waystone Loaded (Ctrl+LMB Slot k)
    
    STATE_4_ACTIVATE_MAP --> STATE_5_ENTER_PORTAL : Click Activate & Wait 2.5s Portals Open
    
    STATE_5_ENTER_PORTAL --> STATE_6_AUTONOMOUS_CLEAR_MAP : Step into Portal & Loading Complete
    
    STATE_6_AUTONOMOUS_CLEAR_MAP --> STATE_7_TOWN_PORTAL_RETURN : Map Cleared / Boss Dead / Timeout
    STATE_6_AUTONOMOUS_CLEAR_MAP --> STATE_6_AUTONOMOUS_CLEAR_MAP : Auto-Respawn if Dead (Doc 47)
    
    STATE_7_TOWN_PORTAL_RETURN --> STATE_8_TRANSITION_TO_HIDEOUT : Press Key '.' [VK 0xBE] & Click Town Portal
    
    STATE_8_TRANSITION_TO_HIDEOUT --> STATE_1_CHECK_INVENTORY_ROW1 : Hideout Loaded -> Loop Next Waystone!
```

---

### 4.1. Chi Tiết Từng Trạng Thái Của FSM (FSM States Specification)

#### State 1: `CHECK_INVENTORY_ROW1` (Quét Quang Học Hàng 1 Túi Đồ)
- **Mục tiêu**: Kiểm tra danh sách Waystone còn lại trong hàng 1 của túi đồ nhân vật.
- **Quy trình thực hiện**:
  1. Đảm bảo giao diện túi đồ đang mở (bấm phím `I` nếu chưa mở; hoặc đọc trạng thái UI từ bộ nhớ/quang học).
  2. Thực hiện chụp màn hình vùng hàng 1 túi đồ ($X \in [1696..2536], Y \in [787..857]$ trên màn hình $2560 \times 1440$).
  3. Lần lượt tính toán độ sáng $\text{AvgRGB}$ cho từng ô từ Slot 0 đến Slot 11:
     $$\text{AvgRGB}(c) = \frac{1}{N} \sum_{i=1}^{N} \frac{R_i + G_i + B_i}{3}$$
  4. Phân loại trạng thái:
     - Nếu $\text{AvgRGB}(c) > 50.0$: Đánh dấu ô $c$ chứa Waystone hợp lệ.
     - Nếu $\text{AvgRGB}(c) \le 50.0$: Đánh dấu ô $c$ trống.
  5. **Quyết định chuyển trạng thái**:
     - Nếu số lượng Waystone tìm thấy $M = 0$: Toàn bộ Waystone hàng 1 đã được cày hết $\rightarrow$ **KẾT THÚC NHIỆM VỤ THÀNH CÔNG!** Đóng túi đồ, xuất báo cáo tổng kết phiên farm và chuyển sang trạng thái dừng an toàn (`IDLE`).
     - Nếu số lượng Waystone tìm thấy $M \ge 1$: Chọn viên Waystone đầu tiên còn lại (chỉ số slot nhỏ nhất $k$) làm mục tiêu tiếp theo $\rightarrow$ Chuyển sang `State 2: OPEN_MAP_DEVICE`.

#### State 2: `OPEN_MAP_DEVICE` (Mở Bảng Điều Khiển Map Device Tại Hideout)
- **Mục tiêu**: Tương tác với Map Device trong Shoreline Hideout để mở bảng nạp map.
- **Quy trình thực hiện**:
  1. Kiểm tra an toàn: Đảm bảo nhân vật đang đứng trong Shoreline Hideout (`isSafeTownZone == true`, không có quái vật).
  2. Di chuyển con trỏ chuột đến tọa độ Map Device thực tế trên màn hình:
     $$\mathbf{P}_{\text{MapDevice}} = (1018, 203) \pm \text{Jitter}(\pm 5\text{px})$$
  3. Gửi lệnh click chuột trái (`LMB Click`, giữ $40\text{ms}$).
  4. Chờ $450\text{ms}$ để hoạt ảnh mở bảng điều khiển Map Device hoàn tất.
  5. Xác minh bảng Map Device đã mở (kiểm tra pixel đặc trưng của khung Map Device hoặc nút Activate tại $(560, 880)$).
  6. Nếu sau 3 lần click không mở được, lùi nhân vật 1 bước bằng WASD và thử lại.
  7. Khi bảng Map Device đã mở $\rightarrow$ Chuyển sang `State 3: INSERT_WAYSTONE`.

#### State 3: `INSERT_WAYSTONE` (Nạp Waystone Hàng 1 Vào Map Device)
- **Mục tiêu**: Bốc viên Waystone tại Slot $k$ đã chọn ở State 1 đưa vào ô chứa của Map Device.
- **Quy trình thực hiện**:
  1. Tính toán tọa độ tâm của ô Slot $k$ trên $2560 \times 1440$:
     $$X_k = 1731 + k \times 70, \quad Y_k = 822$$
  2. Nhấn giữ phím `Control` vật lý (`VK_CONTROL` / USB HID `0xE0`).
  3. Di chuyển chuột theo đường cong Bézier tự nhiên đến $(X_k, Y_k)$.
  4. Nhấn phím chuột trái (`LMB Down`), giữ $35\text{ms}$, sau đó nhả (`LMB Up`).
  5. Nhả phím `Control` vật lý.
  6. Chờ độ trễ truyền dữ liệu mạng và UI: $t_{\text{transfer}} = 200\text{ms} \pm 30\text{ms}$.
  7. Quét lại ô Slot $k$: Độ sáng phải giảm từ $100+$ xuống $\approx 8.3$ (chứng minh Waystone đã được nhấc ra khỏi túi đồ và chuyển vào Map Device thành công).
  8. Chuyển sang `State 4: ACTIVATE_MAP`.

#### State 4: `ACTIVATE_MAP` (Kích Hoạt Mở Cổng Bản Đồ)
- **Mục tiêu**: Nhấn nút Activate trên giao diện Map Device và chờ 6 cổng không gian mở ra hoàn toàn.
- **Quy trình thực hiện**:
  1. Di chuyển chuột đến nút **Activate Button** trên bảng Map Device:
     $$\mathbf{P}_{\text{Activate}}^{1440} = (560, 880) \quad \left[\text{Quy đổi từ 1080p: } (420, 660) \times \frac{4}{3}\right]$$
  2. Gửi lệnh click chuột trái (`LMB Click`, giữ $45\text{ms}$).
  3. Bảng điều khiển Map Device tự động đóng lại.
  4. **Khóa chặn bất biến `INV-UI-MAP-DEVICE`**: Bắt buộc phải chờ tối thiểu $2500\text{ms}$ (`activate_delay_ms = 2500`) để hoạt ảnh xoay mở của 6 cổng không gian Portal diễn ra trọn vẹn.
  5. Chuyển sang `State 5: ENTER_PORTAL`.

#### State 5: `ENTER_PORTAL` (Bước Vào Cổng Dịch Chuyển Vào Map)
- **Mục tiêu**: Click vào cổng Portal để kích hoạt chuyển cảnh vào bản đồ mới.
- **Quy trình thực hiện**:
  1. Tìm kiếm thực thể Portal mới xuất hiện quanh Map Device:
     - Quét RAM: Tìm thực thể `EntityType == 3` (Portal/Transition) có tọa độ gần nhân vật nhất ($d < 25\text{ unit}$).
     - Dự phòng quang học: Click vào vùng phát sáng màu xanh của cổng quanh vị trí $(1018, 203)$.
  2. Gửi lệnh click chuột trái vào cổng Portal.
  3. Giám sát quá trình chuyển cảnh (Loading Screen Detection):
     - Màn hình tối đi và xuất hiện bánh răng xoay / hình nền chuyển cảnh.
     - Giá trị `AreaSeed` trong RAM thay đổi từ Seed Hideout sang Seed Map mới.
  4. Chờ nhân vật nạp xong vào map (Grace Period bất tử kích hoạt, `AreaLoading == false`).
  5. Chuyển sang `State 6: AUTONOMOUS_CLEAR_MAP`.

#### State 6: `AUTONOMOUS_CLEAR_MAP` (Vận Hành Core Engine Tự Hành Dọn Map)
- **Mục tiêu**: Khởi chạy toàn bộ hệ thống tự trị của AutoPOE2 để khám phá, chiến đấu và dọn dẹp quái vật trong map.
- **Các hệ thống tham gia đồng thời**:
  1. **Điều hướng WASD 8 hướng Isometric (`WorldToWasd`)**: Khám phá bản đồ theo thuật toán Heuristic/A* không đâm tường, đã loại bỏ hoàn toàn xung phím `E` (Doc 45).
  2. **Chiến đấu Combo Engine**: Tự động xoay tua kỹ năng theo hồ sơ `skills_hollow_form.toml` (Whirling Assault, Rage Builder, Stagger Finisher, Staff Buff).
  3. **Định vị tọa độ động Dynamic XYZ Autolock**: Đọc sống động tọa độ nhân vật qua `PlayerFinder` 16MB, không bao giờ bị dính điểm chết $0\text{ms}$ hay kẹt `(219.44, 99.0)` (Doc 46).
  4. **Tự Động Hồi Sinh Khi Tử Trận (Resurrection FSM)**: Nếu nhân vật chịu sát thương chí mạng dẫn đến tử vong, hệ thống tự động kích hoạt phản xạ click nút `RESURRECT AT CHECKPOINT` tại tọa độ chuẩn xác $Y = 73.61\%$ (Doc 47), sau đó tiếp tục chu trình mà không ngắt bot.
  5. **Bộ Lọc Đồ Tự Động (Pickit DSL)**: Nhặt các vật phẩm giá trị cao (Currencies, Waystones rơi thêm, Uniques, Rares giá trị).
- **Tiêu chí hoàn thành map (Map Completion Criteria)**:
  - Boss của bản đồ bị tiêu diệt (`BossDead == true`), HOẶC
  - Số lượng quái vật trên radar giảm xuống dưới ngưỡng an toàn ($\text{Mobs} < 15$), HOẶC
  - Thời lượng dọn dẹp đạt giới hạn tối đa cho phép ($t_{\text{clear}} \ge 300\text{ giây}$).
- Khi thỏa mãn tiêu chí $\rightarrow$ Chuyển sang `State 7: TOWN_PORTAL_RETURN`.

#### State 7: `TOWN_PORTAL_RETURN` (Mở Cổng Thoát Hiểm Về Hideout)
- **Mục tiêu**: Sử dụng cuộn dịch chuyển mở Town Portal an toàn để quay về Shoreline Hideout.
- **Quy trình thực hiện**:
  1. Dừng mọi lệnh di chuyển WASD, đảm bảo nhân vật đứng yên tại chỗ.
  2. Kiểm tra an toàn: Không có quái vật áp sát trong bán kính nguy hiểm ($d > 35\text{ unit}$). Nếu có quái, combo tiêu diệt trước khi mở cổng.
  3. **Khóa chặn bất biến `INV-TOWN-PORTAL-KEY`**: Nhấn phím `.` (`VK 0xBE`, HID `0x37`) để niệm mở Town Portal. TUYỆT ĐỐI KHÔNG nhấn phím `T`.
  4. Chờ thời gian niệm phép và hình thành cổng: $t_{\text{cast}} = 1200\text{ms}$.
  5. Click vào thực thể Blue Town Portal vừa xuất hiện tại tâm chân nhân vật.
  6. Chuyển sang `State 8: TRANSITION_TO_HIDEOUT`.

#### State 8: `TRANSITION_TO_HIDEOUT` (Chuyển Cảnh Trở Về Hideout & Khép Vòng Lặp)
- **Mục tiêu**: Đợi màn hình loading hoàn tất, xác nhận đã an toàn tại Shoreline Hideout và kích hoạt vòng lặp tiếp theo.
- **Quy trình thực hiện**:
  1. Chờ màn hình chuyển cảnh kết thúc (`AreaLoading == false`).
  2. Xác minh địa bàn hiện tại là Shoreline Hideout (`isSafeTownZone == true`, `AreaSeed` khớp Hideout).
  3. Gửi phím `Space` để đóng tất cả các bảng UI nếu vô tình bị mở.
  4. Tăng biến đếm số map đã hoàn thành: `mapsCompletedCount += 1`.
  5. Ghi log kết quả chi tiết của map vừa chạy.
  6. **Khép Kín Vòng Lặp**: Lập tức quay trở lại **`State 1: CHECK_INVENTORY_ROW1`** để quét và nạp viên Waystone tiếp theo!

---

## 5. Ma Trận Xử Lý Biến Cố Ngoại Lệ & Tự Sửa Lỗi Khép Kín (Closed-Loop Fault Tolerance Matrix)

Tuân thủ nguyên lý tự phục hồi (Autonomous Self-Healing), mọi điểm nghẽn hoặc rủi ro thực tế trong quá trình farm đều có kịch bản xử lý tự động:

```
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│                            MA TRẬN XỬ LÝ SỰ CỐ TỰ ĐỘNG (FAULT TOLERANCE)                        │
├──────────────────────────┬───────────────────────────────────────┬───────────────────────────────┤
│ Loại Biến Cố / Tình Huống│ Dấu Hiệu Nhận Biết                    │ Hành Động Tự Sửa Lỗi Tức Thời │
├──────────────────────────┼───────────────────────────────────────┼───────────────────────────────┤
│ 1. Click trượt Map Device│ UI Map Device không mở sau 450ms,     │ Dùng WASD bước lùi 20 unit,   │
│                          │ không thấy nút Activate tại (560, 880)│ xoay góc và click lại (Max 3) │
├──────────────────────────┼───────────────────────────────────────┼───────────────────────────────┤
│ 2. Waystone không nạp    │ Ô Slot k sau khi Ctrl+Click vẫn có    │ Nhấn Esc đóng UI, mở lại túi  │
│    được vào Map Device   │ AvgRGB > 50.0 (chưa chuyển đồ)        │ đồ và thử lại với Slot k+1    │
├──────────────────────────┼───────────────────────────────────────┼───────────────────────────────┤
│ 3. Hết Portal trong Map  │ Cổng bị quái chặn hoặc biến mất       │ Kích hoạt phím '.' tạo cổng   │
│                          │ khi đang dọn map                      │ mới tại vị trí an toàn hiện tại│
├──────────────────────────┼───────────────────────────────────────┼───────────────────────────────┤
│ 4. Tử trận trong Map     │ Màn hình YOU HAVE DIED, ES/HP về 0    │ Kích hoạt Auto-Respawn FSM    │
│                          │ (Doc 47)                              │ click (1280, 1060) Y=73.61%   │
├──────────────────────────┼───────────────────────────────────────┼───────────────────────────────┤
│ 5. Hết số lần hồi sinh   │ Tử trận lần thứ 4 (> maxRespawns = 3) │ Thoát về Hideout qua menu,    │
│                          │                                       │ bỏ qua map lỗi, chạy tiếp map │
├──────────────────────────┼───────────────────────────────────────┼───────────────────────────────┤
│ 6. Quái phục kích Hideout│ isSafeTownZone trả về false do bug    │ Ngắt Map Device FSM, chuyển   │
│                          │ spawn quái ngoài dự kiến              │ toàn quyền cho Combat tiêu diệt│
└──────────────────────────┴───────────────────────────────────────┴───────────────────────────────┘
```

---

## 6. Đặc Tả Triển Khai Mã Nguồn (Code Implementation Specification)

Để hiện thực hóa tài liệu này, các sửa đổi và bổ sung kỹ thuật được quy định chi tiết cho 2 tầng:

### 6.1. Cập Nhật Cấu Hình Tập Trung `data/ui/coordinates.toml`
Căn chỉnh lại thông số lưới `[inventory]` và `[map_device]` theo đúng số liệu đo đạc thực nghiệm Ground-Truth $0\text{ms}$:

```toml
# ==============================================================================
# AutoPOE2 UI Coordinates Configuration - Ground-Truth Calibrated (13/09/2026)
# Reference: 1920x1080 (16:9). Tỷ lệ scale lên 2560x1440 là 4/3 (1.333333).
# ==============================================================================

[screen]
reference_width = 1920
reference_height = 1080

[inventory]
# Lưới túi đồ cá nhân nhân vật (12 cột x 5 hàng)
# 1080p Calibrated: origin=(1272, 590), cell=(52.5, 52.5)
# Khi scale lên 2560x1440 (nhân 4/3): origin=(1696, 787), cell=(70, 70)
# Tâm Slot 0 trên 1440p = (1696 + 35, 787 + 35) = (1731, 822) -> KHỚP 100% GROUND-TRUTH!
origin_x = 1272
origin_y = 590
cell_width = 52.5
cell_height = 52.5
offset_x = 52.5
offset_y = 52.5
cols = 12
rows = 5

[map_device]
# Tọa độ Map Device trong Shoreline Hideout (1080p tham chiếu: 763.5, 152.25 -> 1440p: 1018, 203)
hideout_device_x = 763.5
hideout_device_y = 152.25

# Ô đặt Waystone trong giao diện Map Device (1080p: 420, 480 -> 1440p: 560, 640)
waystone_slot_x = 420
waystone_slot_y = 480

# Nút kích hoạt mở Map (Activate Button: 1080p: 420, 660 -> 1440p: 560, 880)
activate_button_x = 420
activate_button_y = 660

# Nút đóng bảng Map Device
close_button_x = 1860
close_button_y = 60

# Cấu hình tự động quét Waystone trên hàng đầu tiên của túi đồ (Row 0, 12 cột)
waystone_row = 0
waystone_col_start = 0
waystone_col_end = 11
auto_scan_first_row = true
scan_cell_delay_ms = 0
activate_delay_ms = 2500

[delays]
default_step_delay_ms = 350
item_transfer_delay_ms = 200
jitter_ms = 50
```

---

### 6.2. Triển Khai Module Quét Quang Học Hàng 1 (`src/assistant_tool/optical_inventory_scanner.py`)
Mã nguồn module quét quang học chuyên trách, tuân thủ không phụ thuộc thư viện nặng, đọc trực tiếp ảnh chụp GDI BitBlt:

```python
"""
AutoPOE2 - Optical Inventory Row 1 Scanner (Ground-Truth Calibrated 13/09/2026)
Đặc tả kỹ thuật: Quét quang học 12 ô Hàng 1 túi đồ để định vị chính xác các viên Waystone.
"""

from typing import List, Tuple
from PIL import Image

class OpticalInventoryScanner:
    def __init__(self, screen_w: int = 2560, screen_h: int = 1440):
        self.screen_w = screen_w
        self.screen_h = screen_h
        
        # Hệ số tỷ lệ so với chuẩn tham chiếu 1920x1080
        scale_x = screen_w / 1920.0
        scale_y = screen_h / 1080.0
        
        # Tọa độ gốc và kích thước ô chuẩn hóa
        self.origin_x = 1272.0 * scale_x  # 1696.0 trên 1440p
        self.origin_y = 590.0 * scale_y   # 786.67 ~ 787.0 trên 1440p
        self.cell_w = 52.5 * scale_x      # 70.0 trên 1440p
        self.cell_h = 52.5 * scale_y      # 70.0 trên 1440p
        self.cols = 12
        self.threshold_brightness = 50.0

    def get_slot_center(self, col: int, row: int = 0) -> Tuple[int, int]:
        """Tính toán tọa độ tâm tương tác của ô (col, row)."""
        cx = self.origin_x + col * self.cell_w + (self.cell_w * 0.5)
        cy = self.origin_y + row * self.cell_h + (self.cell_h * 0.5)
        return int(round(cx)), int(round(cy))

    def scan_row1_waystones(self, image_path: str) -> List[Tuple[int, int, int, float]]:
        """
        Quét quang học 12 ô trong hàng 1 (row = 0).
        Trả về danh sách các ô có Waystone: [(col, center_x, center_y, avg_rgb), ...]
        """
        waystones_found = []
        with Image.open(image_path) as img:
            rgb_img = img.convert("RGB")
            
            for col in range(self.cols):
                cx, cy = self.get_slot_center(col, 0)
                
                # Cắt vùng mẫu 24x24 pixel tại tâm ô để tính độ sáng trung bình
                half_sample = 12
                box = (cx - half_sample, cy - half_sample, cx + half_sample, cy + half_sample)
                sample_region = rgb_img.crop(box)
                
                pixels = list(sample_region.getdata())
                avg_rgb = sum(r + g + b for r, g, b in pixels) / (len(pixels) * 3.0)
                
                if avg_rgb > self.threshold_brightness:
                    waystones_found.append((col, cx, cy, avg_rgb))
                    
        return waystones_found
```

---

## 7. Kế Hoạch Xác Minh & Cổng Nghiệm Thu Thực Nghiệm (Empirical Definition of Done - Rule 9)

Để đáp ứng tiêu chuẩn **Rule 9 (Empirical DoD)**, một bộ kiểm thử tự động chuyên biệt được thiết kế để xác minh:
1. Độ khớp chính xác của công thức tọa độ trên màn hình $2560 \times 1440$ so với Ground-Truth thực địa (Sai số $\Delta = 0\text{px}$).
2. Tính năng quét quang học phát hiện chuẩn xác 5 viên Waystone đầu tiên và loại trừ 7 ô trống còn lại.
3. Sự nhất quán của Máy trạng thái hữu hạn 8 pha không có deadlock.

```
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│                            BẢNG TIÊU CHUẨN NGHIỆM THU THỰC NGHIỆM (DOD)                         │
├────┬─────────────────────────────┬───────────────────────────────────────────────────────────────┤
│STT │ Hạng Mục Kiểm Thử           │ Tiêu Chí Đạt (Passing Criteria)                              │
├────┼─────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ 1  │ Độ khớp tọa độ Slot 0..4    │ Slot 0: (1731, 822), Slot 1: (1801, 822), Slot 2: (1871, 822) │
│    │                             │ Slot 3: (1941, 822), Slot 4: (2011, 822) — Sai số = 0px!     │
├────┼─────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ 2  │ Phân loại quang học nhị phân│ Phát hiện chính xác 5 Waystones (Slots 0..4, AvgRGB > 100),   │
│    │                             │ 7 ô trống (Slots 5..11, AvgRGB < 10.0).                       │
├────┼─────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ 3  │ Chuyển đổi trạng thái FSM   │ Vòng lặp 8 bước chạy mượt mà từ State 1 đến State 8.          │
│    │                             │ Khi quét thấy 0 Waystone -> Phát tín hiệu kết thúc hoàn thành!│
├────┼─────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ 4  │ Bất biến phím Town Portal   │ Lệnh mở portal chỉ gửi phím '.' (VK 0xBE). Cấm phím 'T'.     │
└────┴─────────────────────────────┴───────────────────────────────────────────────────────────────┘
```

---

## 8. Kết Luận & Lộ Trình Triển Khai Thực Thi (Conclusion & Implementation Roadmap)

Tài liệu đặc tả kiến trúc **`SPEC-DOC-48-CLOSED-LOOP-MAP-RUNNER-WAYSTONE-ROW1-FARM-20260913`** đã giải quyết triệt để toàn bộ các yêu cầu từ phía người dùng:
- Thiết lập cơ sở dữ liệu Ground-Truth thực địa chuẩn xác cho lưới túi đồ nhân vật và Map Device tại Shoreline Hideout.
- Chuẩn hóa hệ thống FSM 8 bước khép kín, bảo đảm bot tự mở map, dọn map, tự hồi sinh khi tử trận, tự thoát map và lặp lại cho đến khi cạn kiệt Waystone ở Hàng 1.
- Loại bỏ hoàn toàn sự can thiệp thủ công của con người, đáp ứng tiêu chuẩn tự trị công nghiệp của dự án AutoPOE2 năm 2026.

### 8.1. Nhật Ký Nghiệm Thu Thực Địa Live Gate (Empirical Verification Record 14/09/2026)
- **Trạng thái**: `[LIVE-PROVEN & CODE-COMPLETE]` (14/09/2026 00:25 UTC+7)
- **Module thực thi**: `tools/autonomous_map_runner.py` & `tools/autonomous_mapping_coordinator.py`
- **Túi đồ & Waystones Hàng 1 (Multi-Map Batch)**:
  * Quét tự động 60 ô túi qua `OpticalInventoryScanner`, phát hiện chính xác 12/12 Waystones Tier XV trong Hàng 1 (Slots 0..11, AvgRGB 68.2 - 68.8), 32/60 ô occupied (`is_full = False`).
  * Tích hợp `WaystoneAutoCrafter` (P2-1): Tự động đánh giá Slot 0 là Rare Tier XV và kích hoạt `CraftAction.SKIP_CRAFT` tuân thủ nghiêm ngặt bất biến `INV-CRAFT-WAYSTONE-01`.
  * Khóa liên động quang học `is_inventory_open()` bảo đảm phát hiện trạng thái bảng hành trang không bị xung đột với phím ESC menu.
- **Tương tác Map Device & Atlas Tree**:
  * Tương tác mở giao diện Map Device trực tiếp từ Shoreline Hideout qua phím `U` (`VK 0x55`) kết hợp tab `[ENDGAME]` tại `(1532, 95)` hoặc click nhãn Map Device tại `(350, 950)`.
  * Atlas Tree hiển thị trọn vẹn với player pin tại `(1280, 560)` kết nối các node xanh (Deserted T15, Boss Rush) và Precursor Tower tại `(986, 385)`.
- **Vận hành trong map**: Giao tranh bầy quái Mineshaft T14-T16, xoay tua combo Hollow Form mượt mà (Warcry, Pounce, Flurry, Bell, Charged Staff).
- **Sinh tồn CI**: ES đạt 5,141 in-combat (buffs/endurance), Ward 241/241, Mana 803/880, HP 1/1, 0 deaths (`DeathDetected=False`).
- **Thoát Town Portal phím '.'**: Phím '.' (`VK 0xBE`) kích hoạt thành công, mở hai cổng xanh (`captures/map_run/portal_opened_20260913_202551.png`), bước vào cổng an toàn trở về Shoreline Hideout (`captures/20260913_202659_733_RETURNED_HIDEOUT.png`, `Client.txt` verified).
- **Vòng lặp Multi-Map Closed-Loop**:
  * `run_multi_map_loop(max_maps)` tự động luân chuyển cày map liên tục và dừng khép kín với trạng thái `EXHAUSTED` khi hết Waystone trong Hàng 1.
  * Hỗ trợ cờ dòng lệnh CLI: `--max-maps`, `--map-duration`, `--capture-dir`.
- **Kiểm thử tự động**:
  * `tests/test_autonomous_mapping_coordinator.py`: **20/20 PASS** (4.09s) [bao gồm test multi-map loop, exhaustion, crafter rare skip, dismiss modals].
  * `tests/test_optical_inventory_scanner.py`: **6/6 PASS** (0.96s)
  * `tests/test_atlas_selector.py`: **10/10 PASS** (0.96s)
  * `tests/test_waystone_craft.py`: **5/5 PASS** (0.07s)
  * `AutoPOE2_Tests.exe`: **726/726 PASS** (100%)


