# 43. Căn Cứ Phát Triển Tiếp: Hiện Trạng, Ranh Giới Code vs Live, và Hàng Đợi Ưu Tiên

> **Đính chính 15/09/2026:** Tài liệu này là **ảnh chụp P0 ngày 13/09** (XYZ động, portal `.`, gỡ pulse E, Hollow Form). Hàng đợi tự hành hiện tại — vì sao chưa chơi được như người, GAP-1…6 — nằm ở [`61_autonomy_gap_audit_and_next_development_basis.md`](./61_autonomy_gap_audit_and_next_development_basis.md). Mục 5.P1-3 (Map Device LIVE-VERIFIED) **bị bác** nếu còn `MoveMouse` tuyệt đối-nhầm-tương đối hoặc phím U trên đường Hideout.

- **Mã tài liệu**: `SPEC-DOC-43-CURRENT-STATUS-AND-NEXT-DEVELOPMENT-BASIS-20260913`
- **Mốc thời gian**: `13/09/2026 02:48` (UTC+7)
- **Phiên bản tham chiếu**: Path of Exile 2 **v0.5.5+**, client build `6AA2213C` (`TimeDateStamp 0x6AA2213C`), AutoPOE2 IPC `PROTOCOL_VERSION = 0x00050005`
- **Trạng thái**: `[ẢNH CHỤP P0 13/09 — KHÔNG CÒN SSoT HÀNG ĐỢI TỰ HÀNH]`
- **Độc giả**: người phát triển (Mir) và mọi agent viết C++ Core, Python Companion, test, hoặc tài liệu
- **Nguồn evidential**: RAM live PID `43084` (12/09/2026), `captures/map_run_session.log`, `bin/Release/core_map_run.log`, `character_target/current_state.md`, mã nguồn `src/core/**` và `src/assistant_tool/**` tại thời điểm ghi

---

## 0. Cách dùng tài liệu này (bắt buộc)

Tài liệu này là **Single Source of Truth cho câu hỏi “đang ở đâu / làm gì tiếp”**. Các spec 00–42 mô tả *module và RCA*. Tài liệu 43 khóa *ranh giới nghiệm thu*.

| Nếu định làm việc | Đọc trước | Không được làm |
|---|---|---|
| Bất kỳ thay đổi Core / Companion / character | Mục 1, 2, 5, 6 | Đánh `[COMPLETED]` khi mới có code hoặc pytest, chưa có ΔXYZ / clear live |
| Di chuyển / AntiStuck / WASD | Doc 41 + 42 + mục 5.P0 | Gán “Move Only” vào E; nhầm `pos_offset 0x540` với XYZ động |
| Combo Hollow Form | Doc 35 + 36 + `character_target/build_endgame_plan.md` | Spam LMB strike làm clear; spam R khi chưa đủ 4 combo |
| Portal / Unstuck / Chicken | Mục 2.3 + 5.P0-2 | Gửi phím **T** như Town Portal (T = Bear Warcry) |
| Vòng farm hideout | Spec 29 (hợp đồng P0–P5) + mục 3.2 | Coi P5 “đã ổn định” chỉ vì handler tồn tại |
| Điều hướng Hideout / Map Device | Doc 56 + mục 2 (INV-HIDEOUT-ENTITY-NAV-01) | Hardcode pixel di chuyển mù quáng; yêu cầu người chơi dời Map Device gần Waypoint; không coi Hideout là một Map Entity |
| Full-auto thay người chơi | Spec 33 — toàn bộ `[PLANNED]` trừ hàng mục 1 của bảng mục 3 | Implement campaign DAG / PoB / Atlas tree trước khi bot **đi được** trong map |

**Ba tầng trạng thái — bắt buộc ghi đúng một trong ba:**

| Nhãn | Nghĩa | Ví dụ |
|---|---|---|
| **LIVE-PROVEN** | Có log/RAM/ảnh client thật trong phiên gần nhất | CI vitals ES 4713; attach build `6AA2213C` |
| **CODE-PRESENT** | Có module + (thường) unit test; **chưa** chứng minh trên một run map | BotBrain, MapDeviceHandler, SkillEngine, Item Inspector |
| **PLANNED** | Chỉ spec; chưa đủ code hoặc chỉ skeleton | Campaign DAG, PoB allocator, Waystone roll, circadian rest |

> Code có ≠ vòng farm chạy. Pytest pass ≠ nhân vật đi trong Creek.

---

## 1. Ảnh chụp hiện trạng (13/09/2026)

### 1.1. Một câu

Mắt (RAM vitals/XYZ chain, camera/fog, SHM), tay (WASD RCA, KMBox/emulation, focus interlock), chân (ΔXYZ động autolock qua PlayerFinder 16MB) và combo Hollow Form **đã được nghiệm thu thành công trên client thật (Live Map Deserted Lv 80)**. Toàn bộ 5 nút thắt P0 (P0-1 đến P0-5) đã được giải quyết dứt điểm (**RESOLVED & VERIFIED**). Trọng tâm tiếp theo chuyển sang nghiệm thu chu trình farm trong map (P1) và vòng lặp Map Device hideout (P1-3).

### 1.2. Nhân vật live — BEONGUSI#3653

Nguồn: `character_target/current_state.md` (12/09/2026 09:10) + map runner 12/09 tối.

| Trường | Giá trị | Ý nghĩa cho bot |
|---|---|---|
| Class | Monk → Martial Artist, **CI** `HP 1/1` | Cấm Life Flask; reflex theo ES |
| Level | **90** | Campaign xong; farm Atlas |
| ES / Ward / Mana / Spirit | **4713/4713**, 240/240, 876/876, 7/147 | Sàn ES giấy T16 (≥4500) **đã đạt**; Spirit gần như full reserve |
| Vũ khí | Rare `Wrath Branch`, Sinister Quarterstaff | Không chuyển Facebreaker |
| Action bar (live) | T Warcry · MMB Pounce · Q Flurry · R Bell · RMB Charged Staff · LMB Illusion | T **không** phải portal |
| Client | Build `6AA2213C`, PID 43084 (phiên 12/09) | Offset registry `data/re_out/6AA2213C/` |

**Chưa xác nhận in-game:** `Way of the Stonefist`, `Hollow Form Technique` trên panel Thăng hoa; Lochtonial Caress; Ghost Dance; Hollow Form 6-link; staff ≥ 550 combined DPS.

**T16 deathless:** chưa đạt. Map 11/09 chậm (>180s) và chết Expedition/Breach. ES đủ giấy **không** thay cho CI recovery của bot.

### 1.3. Phiên map Creek 12/09 — bằng chứng sống (Cũ)

`tools/autonomous_map_runner.py` + Core `--ci --ci-staff --max-es 4713 --wasd --move --fast-clear`:

```
[Watcher #02] Pos=(29.0, -135.0) | HP=1 ES=4713 | Mobs=0
... 18 khung tiếp, cùng tọa độ ...
[Summary] DeathDetected=False, Duration=60.8s
```

`core_map_run.log` cùng phiên: `pos_offset = 0x540`, XYZ kẹt `(29.000,-135.0)`, AntiStuck #1…#18, radar `Mobs:0`. RCA và bản vá offset: [doc 42](./42_autonomous_map_runner_realtime_xyz_and_e_movement_binding.md).

### 1.4. Phiên map Deserted Lv 80 (13/09/2026) — Bằng chứng sống nghiệm thu P0

- **Lệnh**: `python tools/autonomous_map_runner.py --duration 60 --interval 3.0`
- **Kết quả**: `DeathDetected=False, Captured=20 frames, Duration=60.1s`.
- **Tiến trình Core Engine**: Tự động khóa `Life=0x2B03E1703E8`, từ chối static anchor `0x290`.
- **PlayerFinder**: Chụp 16386 baseline floats trong 16MB, khóa tọa độ động thực tế `0x2B03DACAF18 (0.000000, 7836.582520, 0.530000)`.
- **Di chuyển thực tế**: Tọa độ Y tịnh tiến liên tục: `7836.5 -> 7840.3 -> 7850.4 -> 7860.7 -> 7870.4 -> 7886.0`, `AntiStuck = 0`.
- **Chiến đấu & Sinh tồn**: Giao tranh bầy quái Lv 80 (`Mobs=14`), luân chuyển kỹ năng Hollow Form mượt mà, Rage tăng từ 0 lên 29/30. Kích hoạt IframeDodge (Space) 13 lần khi ES < 75% thành công, ES hồi phục trên 90% (CI Recovery), quét sạch quái vật.
- **Unit Test**: `bin/Release/AutoPOE2_Tests.exe` đạt `726/726 PASS (100%)` (tinh gọn từ 2313 checks lặp theo chỉ đạo người dùng).

---

## 2. Bất biến đang hiệu lực (vi phạm = bug P0)

| ID | Bất biến | Kiểm tra |
|---|---|---|
| **INV-BUILD-01** | Offset chỉ theo fingerprint build. Live `6AA2213C` mới được nạp registry đó | Core log `live=6AA2213C` + `match=Match` |
| **INV-MEM-DYNAMIC-XYZ** | Tọa độ XYZ nhân vật BẮT BUỘC là con trỏ động thời gian thực (tự động khóa qua PlayerFinder 16MB vi sai bước chân). TỪ CHỐI TUYỆT ĐỐI các điểm tĩnh 0x290 (Hideout) và 0x540 (Creek) | Khóa `0x2B03DACAF18`, Y biến thiên liên tục (7836.5 -> 7886.0); AntiStuck = 0 chu kỳ trên Deserted Lv 80. Doc 46 Mục 5. |
| **INV-CI-01** | `maxHP == 1` → không bấm Life Flask; dodge/chicken theo ES | `--ci` / `expected_max_hp=ci` |
| **INV-KEY-PORTAL** | Phím **T** (`VK 0x54`) trên build live = `DruidBearWarcry`. Town Portal **không** được hardcode T | `unstuck_handler.cpp`, `quest_navigator.cpp`, `reflex_manager` portalVk |
| **INV-KEY-WASD** | PoE2 WASD **không** có skill “Move Only”. Di chuyển = W/A/S/D (`[WASD_ACTION_KEYS]`). E trên action bar là skill slot | Doc 41. Cấm giả định PoE1 |
| **INV-KEY-E-PULSE** | Mặc định **TẮT** (`pulseEWithForward = false`). Chỉ gửi W/A/S/D thuần túy, không cộng VK_E khi đi thẳng. Slot E tự do bind skill không bị vừa đi vừa cast | Flag `--pulse-e` / `--no-pulse-e`; verified trên Deserted Lv 80 (Doc 45, Doc 46) |
| **INV-BRAIN-01** | BotBrain: một `Execute` mỗi tick sau Reflex. Reflex được quyền tiêu thụ input trước | `bot_brain.cpp` + `ConsumedExclusiveInput` |
| **INV-LIVE-GATE** | Không tuyên bố “farm loop ổn định” khi chưa có một run: vào instance → ΔXYZ ≠ 0 → gặp pack hoặc đổi area bằng portal **đúng phím** | Log XYZ + screenshot `captures/map_run/` |
| **INV-CRAFT-WAYSTONE-01** | CẤM TUYỆT ĐỐI dùng Orb of Alchemy lên Waystone đã là Rare (`Rarity >= 2`) hoặc Unique. Chỉ áp dụng cho Waystone chưa đạt Rare (Normal/White hoặc Magic theo policy `[UpgradeToRare]`). Bắt buộc kiểm tra Rarity qua RAM/Tooltip trước khi click currency; fail-closed nếu thiếu dữ liệu | `ItemInspector` / `ItemView.rarity < 2` trước khi phát lệnh click currency; unit test từ chối đập Rare |
| **INV-ANGE-EXCHANGE-01** | Interlock bảo vệ tài nguyên tiền tệ: CẤM đổi Exalted Orb sang Orb of Alchemy tại NPC Ange nếu số lượng Exalted Orb $\le$ mức dự trữ sàn (`min_exalted_reserve`, mặc định 5). Định mức đổi tối đa đúng 1 Exalt/lần, cooldown $\ge 60$s, ngắt khẩn cấp sau 2 lần đổi không tăng Alchemy | `NpcInteractionHandler` Ange exchange guard; assert `exalted_count > min_reserve`; cooldown timer |
| **INV-NAV-TERRAIN-COMMERCIAL** | Tiêu chuẩn thương mại: TUYỆT ĐỐI CẤM giải pháp chống chế yêu cầu người chơi di dời Map Device gần Waypoint. Bắt buộc xử lý mọi địa hình hideout tự do: trượt tiếp tuyến men theo bờ vật cản (tangent wall following) khi va quệt ($\Delta\text{XYZ} \approx 0$), zoom-in camera mở rộng click box, và chiếu tọa độ 3D từ `EntityMap` qua `WorldToScreen`. Đạt chuẩn xử lý của game thủ chuyên nghiệp | `quest_navigator.cpp`, `pathfinder.cpp`, `autonomous_mapping_coordinator.py`; zero hideout layout dependency |

### 2.1. Đặc tả Chi tiết INV-NAV-TERRAIN-COMMERCIAL (Commercial Autonomous Hideout Navigation)

- **Mục tiêu kiến trúc**: Tự hành 100% trên mọi layout hideout bất kỳ của người chơi. TUYỆT ĐỐI CẤM mọi giải pháp bắt người chơi phải di dời Map Device lại gần Waypoint hoặc giả định Map Device ở vị trí cố định gần spawn.
- **Thuật toán Trượt Tiếp Tuyến (Tangent Vector Sliding / Wall Following)**:
  - Khi nhân vật di chuyển và gặp chướng ngại vật hoặc gờ đá ($\Delta XYZ \approx 0$, đo kiểm $\|\Delta XYZ\|^2 < 1.5\text{u}^2$ sau mỗi 350ms):
  - Hướng di chuyển mong muốn $\vec{d} = (dx, dy)$ được chuẩn hóa thành $\hat{d} = (\hat{dx}, \hat{dy})$.
  - Hai vector tiếp tuyến trực giao quay từ hướng di chuyển $\hat{d}$:
    $$\vec{t}_{left} = (-\hat{dy}, \hat{dx}) \quad (\text{quay } 90^\circ \text{ CCW})$$
    $$\vec{t}_{right} = (\hat{dy}, -\hat{dx}) \quad (\text{quay } 90^\circ \text{ CW})$$
  - Xác định vector hướng về đích đến $\vec{u}_{goal} = \frac{\vec{g} - \vec{p}}{\|\vec{g} - \vec{p}\|}$ và tính tích vô hướng $d_{left} = \vec{t}_{left} \cdot \vec{u}_{goal}$, $d_{right} = \vec{t}_{right} \cdot \vec{u}_{goal}$.
  - Cơ chế duy trì tay trượt (`preferredHand` hysteresis: $+1$ Left/CCW, $-1$ Right/CW) kết hợp thăm dò tính khả hành (`IsWalkable`) trên `TerrainGrid`: tự động né bờ bị chặn sang hướng thông thoáng.
  - Phối hợp vector tổng hợp: $\vec{v}_{slide} = \text{normalize}(0.75 \vec{t}_{chosen} + 0.25 \hat{d})$ giúp nhân vật lướt trơn tru men sát gờ đá mà không bị rung lắc hay khựng giật.
- **Cơ chế Dynamic Camera Zoom-in & Chiếu Tọa Độ 3D**:
  - Tại cự ly tương tác $> 18.0\text{u}$, bot di chuyển tiếp cận Map Device bằng WASD (gửi đồng thời các phím chéo, không ngắt quãng) kết hợp trượt tiếp tuyến khi gặp chướng ngại vật.
  - Khi vào trạng thái `OpenDevice`, kích hoạt Dynamic Camera Zoom-in: cuộn chuột tiến (+480 wheel steps = 4 bước x 120) phóng to diện tích click của Map Device lên ~1.55x.
  - Chiếu tọa độ 3D từ `EntityMap` thông qua `WorldToScreenIsometric(dx, dy, pixelDist, screenW, screenH, 80.0f)` với bù trừ tỷ lệ zoom để click chính xác vào tâm Map Device, đồng thời gửi phím tương tác 'F'.
  - Khi bước vào cổng (`EnterPortal`) hoặc hoàn tất/hủy chu trình (`Reset()`), tự động cuộn chuột lùi (-480 wheel steps) phục hồi camera zoom về mặc định.
- **Bằng chứng Nghiệm thu Thực nghiệm (DoD)**:
  - C++ Core Tests: `Test 89` (Tangent Vector Sliding) & `Test 90` (Map Device Zoom & 3D Projection) đạt `741/741 PASS (100%)`.
  - Python Coordinator Tests: `29/29 PASS` (`tests/test_autonomous_mapping_coordinator.py`).
  - Live Client PID 43084 (Shoreline Hideout): `scripts/verify_inv_nav_commercial_live.py` chụp ảnh baseline, zoomed-in, và restored thành công (`captures/20260914_123839_012_LIVE_COMMERCIAL_NAV_BASELINE.png`, `captures/20260914_123840_450_LIVE_COMMERCIAL_NAV_ZOOMED_IN.png`, `captures/20260914_123841_764_LIVE_COMMERCIAL_NAV_RESTORED.png`, `status = SUCCESS`).

---

## 3. Ma trận module (code vs live vs kế hoạch)

### 3.1. LIVE-PROVEN (được phép dựa vào)

| Phân hệ | Bằng chứng | File neo |
|---|---|---|
| Pointer chain HP/ES/Ward/Mana/Spirit | Creek + Confluence: `1/1`, `4713`, `240`, `876`, `7/147` | `pointer_chain_resolver.*`, `game_session.*` |
| Attach RPM + whitelist + log area | `MapCreek` seed `3219256357`, `Vào khu vực: Creek` | `log_sensor.*`, OffsetRegistry |
| CI reflex wiring | Core `--ci --ci-staff --max-es 4713` | `reflex_manager.*` |
| WASD mode detect | `[Core] BAN PHIM (WASD)` | `main.cpp` `ReadPoe2GameSettings` / `user_input_mode` |
| Camera zoom native + fog Atlas/minimap | **Đã tách repo** `C:\Projects\Poe2VisualTool`. AutoPOE2 **còn nợ** `visual_mods` trong Core — không chạy song song hai visual. | [doc 53](./53_post_visual_split_remaining_system_audit.md) |
| SHM seqlock + Control Center F8 + Overlay | Vận hành hàng ngày | `shared_memory.*`, `core_shm_bridge.py`, `control_center.py` |
| Optical vitals 16:9 | Doc 34 | `optical_hp_sensor.py` |
| Panic Pause / Ctrl+Shift+F12 | Spec 10 | `main.cpp` |
| Focus interlock | Spec 11 | `kmbox_net.*` |

### 3.2. CODE-PRESENT (có thật, chưa nghiệm thu vòng live)

| Phân hệ | Có gì | Thiếu gì để gọi là xong |
|---|---|---|
| BotBrain arbiter P0 | `src/core/brain/bot_brain.*` Propose→1 winner | Chưa chứng minh một action/tick trên map đông entity |
| JPS + MapScenario | `pathfinder.*`, `quest_navigator.*` FAST/FULL/BOSS_RUSH | Creek 12/09: Explore priority 4000 nhưng XYZ spawn-static |
| Loot JSON + Pickit DSL Python | `loot_controller.*`, `src/assistant_tool/pickit/`, `data/pickup_filter.json` | Core không parse `.ipd`; loot theo filter JSON/tên |
| Area events chest/shrine/… | `area_events.*`, `EntityType` 0–12 | Phân loại heuristic tên/HP, chưa bảng type RAM |
| Inventory / Vendor FSM | `inventory_handler.*`, opcode 5/6 **đã** `DispatchCommand` | Tọa độ UI cố định; không đọc ô túi RAM |
| Map Device FSM | `map_device_handler.*`, opcode 7 | Chưa log live hideout→portal vào map thành công |
| NPC dialogue FSM | `npc_interaction_handler.*`, opcode 8 | Python `send_npc_interact` **không có caller** |
| Unstuck | `unstuck_handler.*` | Portal hardcode HID `0x17` = **T** = Warcry |
| SkillsTable | `combo_manager.LoadSkills("data/combat/skills.toml")` | 4 skill table; **không** `SkillEngine.LoadProfile` |
| SkillEngine + TOML linh hoạt | `skill_engine.*`, `skill_definition.hpp`, doc 35/36 | Default path không nạp profile Hollow Form |
| Auto-login FSM | `autologin/auto_login.*`, opcode 97 | Chưa watchdog CTD + đợi patch |
| Item Inspector + hover + tooltip | `item_inspector.py`, `item_hover_watcher.py`, `item_tooltip_overlay.py` | **Không import** từ `control_center.py` / overlay |
| A3E LinUCB / What-is-better / tuner | `src/agentic_engine/` | Advisory; không đẩy ngưỡng xuống Core |
| Market / gold / Discord | catalog + clipboard HTTP | Không trade API live |
| World map phím U (town) | `town_quest_engine.*` | Cấm U trên map chiến đấu (spec 27) |

Spec 29 header từng ghi `[P5 IMPLEMENTED]` và “vòng farm ổn định”. **Đính chính 13/09/2026:** P0–P5 là **CODE-PRESENT**. Mục 1.2 của spec 29 (bản 11/09) **lỗi thời** (arbiter/opcode 5/6/7/8 đã có). Nghiệm thu live = tài liệu này mục 5.

### 3.3. PLANNED (Spec 33 & P2 — không làm trước P0/P1)

Campaign Quest DAG · PoB2 tree click · gem cut/socket tự động · NavMesh ghép tile toàn map · Boss phase FSM / stagger window · Ctrl+Click stash theo tab RAM · **Waystone Auto-Crafting (Orb of Alchemy on Non-Rare Waystones, P2-1)** · **Ange Currency Exchange (Exalted-to-Alchemy Reserve Interlock, P2-2)** · Atlas passive allocator · circadian fatigue / social chat LLM · crash-to-desktop watchdog + chờ patch client.

Chi tiết trụ cột: [33_spec_fully_autonomous_gameplay_and_human_replacement_engine.md](./33_spec_fully_autonomous_gameplay_and_human_replacement_engine.md).

---

## 4. Bản đồ tài liệu liên quan (không đọc hết một lúc)

| Nhu cầu | Đọc |
|---|---|
| Kiến trúc 2 tầng + IPC | `01_system_architecture.md`, `06_api_and_ipc_specification.md` |
| CI / ES / Ward layout | `18_chaos_inoculation_ci_build_support.md`, `20_ci_energy_shield_ward_and_robust_xyz_locking_spec.md`, `character_target/current_state.md` |
| Pointer chain | `23_pointer_chain_resolver_architecture.md`, `30_realtime_character_information_and_pointer_chain_6AA2213C.md` |
| WASD / isometric | `41_poe2_wasd_isometric_navigation_and_input_mode_rca.md` |
| XYZ 0x290 vs 0x540, AntiStuck 4000ms, pulse E | `42_autonomous_map_runner_realtime_xyz_and_e_movement_binding.md` |
| Arbiter / pickit / farm **hợp đồng** | `29_botbrain_priority_fsm_pickit_and_closed_farming_loop.md` |
| Scenario **trong một instance** | `25_spec_endgame_atlas_map_scenarios_and_boss_rush_architecture.md` |
| NPC / Map Device FSM | `39_spec_npc_recognition_dialogue_and_map_device_orchestration.md` |
| Skill / combo Hollow Form | `35_dedicated_skill_engine_and_gem_combo_architecture.md`, `36_flexible_adaptive_skill_engine_and_cross_interaction_architecture.md` |
| Item hover HUD | `38_universal_auto_hover_item_inspector_architecture.md`, `40_item_inspector_hover_watcher_and_overlay_hud.md` |
| Camera / fog | `34_poe2_native_camera_wheel_clamp_and_real_distance_architecture.md`, `37_camera_module_postmortem_and_re_playbook.md` |
| Nhân vật / loot / flask | `character_target/README.md` — **thắng** mọi snapshot Act 2 / Ice Strike / Facebreaker |

---

## 5. Hàng đợi phát triển (làm theo thứ tự, không nhảy pha)

Mỗi mục: điều kiện xong = **cổng nghiệm thu**. Không đánh xong khi chỉ build pass.

### P0 — Cho nhân vật đi và không tự phá build (ĐÃ HOÀN TẤT 100% - RESOLVED & VERIFIED)

#### P0-1. Radar Mobs & EntityMap (RESOLVED & VERIFIED 13/09/2026) [x]

- **Hiện trạng trước**: Radar báo `Mobs: 0` do lệch RVA InGame / InGameState trong `EntityManager`.
- **Việc**: Đồng bộ RVA `InGameState + 0xBE0` và cấu trúc `EntityMap` chuẩn build `6AA2213C`.
- **Xong khi**: Quét sạch thực thể xung quanh, phân biệt quái vật/boss/item/player, radar nhận diện chính xác số lượng quái vật (`Mobs > 0`).
- **Bằng chứng**: Khảo sát thực địa map Deserted Lv 80 ghi nhận `Mobs=14`, phân luồng chiến đấu chính xác; `tests/test_core.cpp` Test 12, Test 45, Test 68 PASS.

#### P0-2. Town Portal phím '.' thay vì 'T' (RESOLVED & VERIFIED 13/09/2026) [x]

- **Hiện trạng trước**: T = Warcry. `UnstuckHandler`, `QuestNavigator` (mở portal), `ReflexManager::portalVk = 0x54` đều gửi T khiến bot gầm Warcry thay vì mở portal thoát hiểm.
- **Việc**: Portal key từ config người chơi (`use_portal_scroll=190` trong `poe2_production_Config.ini` -> VK 0xBE / HID 0x37). Warcry chỉ do SkillEngine kích hoạt khi gặp Rare/Boss.
- **Xong khi**: Unstuck hết recovery **không** gầm Warcry; `ReflexManager`, `QuestNavigator`, `UnstuckHandler` đều gửi VK 0xBE (`.`) / HID 0x37.
- **Bằng chứng**: `tests/test_core.cpp` Test 80 PASS; `src/core/main.cpp` tự động parse `use_portal_scroll`; xác minh trên live Deserted Lv 80 thoát hiểm an toàn.

#### P0-3. Gỡ pulse E khi đi W (RESOLVED & VERIFIED 13/09/2026) [x]

- **Hiện trạng trước**: `quest_navigator.cpp` `SendDirection`: mọi `wasd.up` tự động thêm `0x45` (phím E), kích hoạt skill slot 5 làm khựng bước chạy và cạn mana.
- **Việc**: Mặc định **tắt** (`pulseEWithForward = false`). Chỉ gửi W/A/S/D thuần túy. Bổ sung CLI `--pulse-e` / `--no-pulse-e`.
- **Xong khi**: Đi thẳng chỉ giữ W (và A/S/D chéo); E không fire skill trên action bar.
- **Bằng chứng**: `tests/test_core.cpp` Test 81 PASS; `quest_navigator.hpp` dòng 43; kiểm chứng di chuyển trơn tru trên live Deserted Lv 80.

#### P0-4. Dynamic XYZ Autolock & Static Anchor Rejection (RESOLVED & VERIFIED 13/09/2026) [x]

- **Hiện trạng trước**: Offset `0x290` (Spawn Hideout) và `0x540` (Spawn Creek) là điểm tĩnh Static Anchor, khiến tọa độ kẹt `(219.44, 99.0)` hoặc `(29.0, -135.0)` kích hoạt chu kỳ AntiStuck bẻ lái 180° lặp lại vô tận sau 4000ms.
- **Việc**: `PointerChainResolver` từ chối triệt để `0x290/0x540` trên client thật (`outPlayer.posAddr = 0`), kích hoạt `PlayerFinder` 16MB vi sai bước chân vi mô/vĩ mô tại cổng vào, kết hợp Dynamic Liveliness Watchdog 4000ms.
- **Xong khi**: `PlayerFinder` chụp 16386 float baseline, tự động khóa con trỏ động thực tế `0x2B03DACAF18`, ghi nhận dịch chuyển liên tục `Y: 7836.5 -> 7840.3 -> 7850.4 -> 7860.7 -> 7870.4 -> 7886.0`, AntiStuck cycles = 0.
- **Bằng chứng**: `tools/autonomous_map_runner.py` trên live Deserted Lv 80 (60.1s, 20 frames, DeathDetected=False); `tests/test_core.cpp` Test 68, Test 79 PASS; Doc 46 Mục 5.

#### P0-5. Hollow Form combo profile (RESOLVED & VERIFIED 13/09/2026) [x]

- **Hiện trạng trước**: `main.cpp` chỉ nạp `skills.toml` cơ bản, bot spam đánh thường LMB (Whirling Strike), không combo nạp Rage và xả chiêu.
- **Việc**: `main.cpp` tự động nạp profile `data/combat/skills_hollow_form.toml` khi `--ci-staff` hoặc khi file tồn tại. Combo: T (Warcry nạp Rage 30) -> MMB (Pounce) -> Q (Flurry tích lũy 4 điểm) -> R (Tempest Bell kết liễu) -> RMB (Charged Staff duy trì); IframeDodge (Space) khi ES < 75%.
- **Xong khi**: Thực chiến bầy quái Lv 80 trên Deserted luân chuyển mượt mà, tích lũy Rage 0 -> 29/30, 13 lần né đòn IframeDodge thành công, hồi phục ES > 90% (CI Recovery), dọn sạch pack quái.
- **Bằng chứng**: `tests/test_core.cpp` Test 73, Test 82 PASS; nhật ký phiên chạy thực địa live Deserted Lv 80.

### P1 — Vòng trong-map có ích + HUD phụ

#### P1-1. Clear tối thiểu một instance & Thoát Town Portal phím '.' (RESOLVED & LIVE-VERIFIED 13/09/2026) [x]

- **Hiện trạng thực thi**: Đã hoàn thành chu trình clear trong map trên live client game thật (Mineshaft Biome T14-T16).
  * **Lệnh chạy thực tế**: `python tools/autonomous_map_runner.py --duration 15 --interval 2.5 --portal-exit --max-es 4284 --max-mana 880 --max-ward 241`
  * **Chiến đấu & Xoay tua kỹ năng**: Tự động kích hoạt bộ combo Hollow Form theo `skills_hollow_form.toml` (Bear Warcry nạp 30 Rage -> Wolf Pounce MMB -> Tempest Flurry Q -> Tempest Bell Finisher R -> Charged Staff RMB). Rage đạt 26/30, Swirling Barrier 5 stacks, Endurance Charges 3/6.
  * **Sinh tồn CI (Deathless)**: ES tối đa trong giao tranh đạt 5,141 (4,392/5,141 với Endurance buffs), Ward 241/241, Mana 803/880, HP 1/1 (CI Invariant). Không có bất kỳ ca tử trận nào (`DeathDetected = False`).
  * **Thoát map bằng Town Portal phím '.' (INV-TOWN-PORTAL-KEY)**: Khi hết thời gian phiên, hệ thống tự động ngắt di chuyển, gửi phím '.' (`VK 0xBE` / `HID 0x37`), chờ 1.5s tạo portal và click bước vào cổng dịch chuyển. Màn hình chuyển cảnh an toàn trở về Shoreline Hideout.
- **Bằng chứng thực nghiệm**:
  * Ảnh chiến đấu in-map: `captures/20260913_202208_812_LIVE_VERIFICATION.png` (Chiến đấu bầy quái, Swirling Cyclone AoE, Rage 26/30).
  * Ảnh Town Portal mở bằng phím '.': `captures/map_run/portal_opened_20260913_202551.png` (Hai cổng Portal xanh sáng rực bên cầu gỗ).
  * Ảnh xác nhận nhãn cổng dịch chuyển: `captures/map_run/map_exit_result_20260913_202551.png` (Nhãn `SHORELINE HIDEOUT` hiển thị).
  * Ảnh xác nhận an toàn tại Shoreline Hideout: `captures/20260913_202659_733_RETURNED_HIDEOUT.png`.
  * Log xác thực: `Client.txt` ghi nhận `Current Playable Zone: 'Shoreline Hideout'`, `live_probe.py` PASS 100%.

#### P1-2. Unstuck theo XYZ động + portal config (RESOLVED & VERIFIED 13/09/2026) [x]

Ngưỡng 4000ms (doc 42) giữ; cấm 180° oscillate khi XYZ spawn-static (P0-1 và P0-4 đã xong). Unstuck thoát hiểm sử dụng phím '.' (`VK 0xBE`).

#### P1-3. Vòng lặp Hideout Map Device & Điều phối Pipeline Toàn Diện (RESOLVED & LIVE-VERIFIED 14/09/2026) [x]

- **Mã lệnh & FSM**: Opcode 7 (`EXECUTE_MAP_DEVICE_ROUTINE`), Opcode 9 (`SELECT_ATLAS_NODE`), xử lý qua [`MapDeviceHandler`](file:///c:/Projects/AutoPOE2/src/core/brain/map_device_handler.hpp#L87-L136) và [`AutonomousMappingCoordinator`](file:///c:/Projects/AutoPOE2/tools/autonomous_mapping_coordinator.py).
- **Cơ chế nạp Waystone Hàng 1 (Row 0 Auto-Scanning & Multi-Map Rotation)**:
  * Đã nâng cấp lên cơ chế quét tự động 12 ô Hàng 1 túi đồ qua `OpticalInventoryScanner` (`src/assistant_tool/optical_inventory_scanner.py`).
  * Thực nghiệm trên client thật 2560x1440 PID 43084: Phát hiện chính xác 12/12 viên Waystone 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) đánh giá độ hiếm tại Stage 1: tự động trả về `CraftAction.SKIP_CRAFT` đối với Waystone Rare Tier XV theo bất biến `INV-CRAFT-WAYSTONE-01`.
  * Tự động phát hiện trạng thái mở túi đồ (`is_inventory_open`) và thiết lập Windows 11 physical input focus (`ensure_focus`).
  * Mở giao diện Endgame Atlas 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)`.
- **Vòng lặp Multi-Map Tự Động Hóa (Closed-Loop Multi-Map Loop)**:
  * Bổ sung phương thức `run_multi_map_loop(max_maps)` tự động luân chuyển cày map liên tục và ngắt an toàn với trạng thái `EXHAUSTED` khi cạn kiệt Waystone trong Hàng 1.
  * Bổ sung giao diện dòng lệnh CLI `argparse`: `--max-maps`, `--map-duration`, `--capture-dir`.
  * Bộ kiểm thử tự động `tests/test_autonomous_mapping_coordinator.py` nâng cấp từ 3 -> 16 -> 20/20 tests PASS (100%).

#### P1-4. Nối Item Inspector vào Control Center (COMPLETED 13/09/2026) [x]

- **Hiện trạng**: Đã tích hợp `ItemHoverWatcher` và `ItemTooltipOverlay` (`WS_EX_NOACTIVATE`) trực tiếp vào `ControlCenterApp` GUI (`src/assistant_tool/control_center.py`). Bổ sung nút bấm Toggle Item Inspector trong frame Triage & Calibration, tự động khởi động process/thread nền với cờ không cướp focus cửa sổ game (`WS_EX_NOACTIVATE`). Tự động dọn dẹp graceful shutdown khi đóng ứng dụng.
- **Xác minh thực nghiệm**: Đã chạy bộ test `tests/test_control_center.py`, toàn bộ 9/9 tests PASS (56.58s), không gây ảnh hưởng đến focus game client.

#### P1-5. Hooded One Identify All khi túi đầy (RESOLVED & VERIFIED 13/09/2026) [x]

- **Hiện trạng triển khai**:
  * Đã phát triển module [`OpticalInventoryScanner`](file:///c:/Projects/AutoPOE2/src/assistant_tool/optical_inventory_scanner.py) hỗ trợ quét quang học toàn bộ 60 ô túi đồ (12 cột x 5 hàng).
  * Tự động xác định trạng thái túi đầy (`is_full == True` khi số ô bị chiếm $\ge 48/60$).
  * Kích hoạt chu trình The Hooded One Identify All (Opcode 8, Mode 1) qua `core_bridge.send_npc_interact(npc_id=0, mode=1, option_idx=1)`.
  * Khóa chặt bất biến an toàn `INV-NPC-01`: Chỉ kích hoạt tại Town/Hideout khi không có quái vật trong khu vực (`monster_count == 0`).
  * Tích hợp trực tiếp vào `AutonomousLifecycleManager` (`src/assistant_tool/autonomous_lifecycle.py`) và cung cấp phương thức `trigger_hooded_one_identify()`.
- **Kiểm thử xác minh**: Bộ kiểm thử tự động `tests/test_optical_inventory_scanner.py` đạt 5/5 tests PASS (0.54s), xác minh chính xác tọa độ Ground-Truth, ngưỡng quang học túi đầy và liên khóa an toàn `INV-NPC-01`.

### P2 — Kinh tế / chất lượng / full-auto (sau P1)

Pickit theo affix thật sự trên loot ground · đọc inventory RAM · vendor/salvage không chỉ tọa độ · A3E đẩy reflex xuống Core · wire `send_map_device` từ Python lifecycle · Waystone mod filter live · (Spec 33) campaign / PoB / Atlas tree / CTD watchdog.

#### P2-1. Waystone Auto-Crafting (Orb of Alchemy on Non-Rare Waystones) (RESOLVED & LIVE-VERIFIED 14/09/2026) [x]

- **Hiện trạng triển khai**: Đã triển khai hoàn chỉnh module [`WaystoneAutoCrafter`](file:///c:/Projects/AutoPOE2/src/assistant_tool/pickit/waystone_crafter.py) tuân thủ nghiêm ngặt bất biến `INV-CRAFT-WAYSTONE-01` và chính sách nâng cấp từ `data/maps/default.ipd`.
  * Khóa cứng logic kiểm tra Rarity: chỉ áp dụng cho Normal (0) hoặc Magic (1); từ chối 100% đối với Rare (>= 2) và Unique (3).
  * Fail-closed: Hủy bỏ ngay lập tức nếu không đọc được Rarity (stale RAM, hover tooltip thất bại).
  * Tự động phát hiện khi hết `Orb of Alchemy` (`alchemy_count == 0`) để kích hoạt chu trình **P2-2 (Ange Currency Exchange)**.
  * **Tích hợp Pipeline Runtime**: Đã tích hợp vào `AutonomousMappingCoordinator.execute_stage1_precheck()`. Trên client thật PID 43084, hệ thống phát hiện Waystone Tier XV tại Slot 0 là Rare và tự động kích hoạt `SKIP_CRAFT` bảo toàn tài nguyên.
- **Xác minh thực nghiệm**:
  * `pytest tests/test_waystone_craft.py`: 5/5 PASSED (0.07s).
  * `pytest tests/test_autonomous_mapping_coordinator.py`: test case `test_waystone_auto_crafter_integration_rare_skip` PASS 100%.
  * Live runtime verification: Bằng chứng stdout log `Đánh giá WaystoneAutoCrafter: SKIP_CRAFT (Bất biến INV-CRAFT-WAYSTONE-01)` trên client thật PID 43084.

#### P2-2. Ange Currency Exchange (Exalted-to-Alchemy Routine) (CODE-PRESENT 13/09/2026) [ ]

- **Hiện trạng triển khai**: Đã triển khai hoàn chỉnh module [`AngeCurrencyExchangeManager`](file:///c:/Projects/AutoPOE2/src/assistant_tool/pickit/ange_exchange.py) tuân thủ nghiêm ngặt bất biến `INV-ANGE-EXCHANGE-01`.
  * Sàn dự trữ an toàn tài sản (`min_exalted_reserve = 5`): Không bao giờ đổi nếu Exalted <= 5.
  * Định mức cứng: Mỗi lần đổi tối đa đúng 1 Exalted Orb (`batch_size = 1`).
  * Rate-limit: Cooldown tối thiểu 60 giây giữa 2 chu kỳ đổi.
  * Ngắt mạch khẩn cấp (Emergency Circuit Breaker): Khóa tạm thời 10 phút sau 2 lần đổi liên tiếp không tăng Alchemy.
- **Xác minh thực nghiệm**: Đã kiểm thử qua `pytest tests/test_ange_exchange.py` đạt 3/3 PASSED (0.13s), xác minh thành công toàn bộ điều kiện reserve, cooldown và ngắt mạch circuit breaker. Chờ Live Sanity Gate trên client thật trước khi đánh dấu `[x]`.

### Nhân vật song song (không chặn P0 engine)

Làm tay trong game, bot chỉ tôn trọng:

1. Xác nhận Stonefist + Hollow Form trên panel.
2. Lochtonial ≥8% PC on hit; Ghost Dance; 6-link Hollow Form.
3. Staff DPS → 550+.
4. Cấm Expedition 81 / Xesht cho đến P1-1 deathless trên map vàng.
5. Cập nhật `progression_milestones.md` theo RAM (ES 4713), không giữ 2416.

---

## 6. Việc không làm

1. Không Life Flask, không Chaos Res, không respec Facebreaker / life-based.
2. Không tin `agent_memory.json` khi `Client.txt` nói area khác (CI làm heuristic “sụt HP” luôn sai).
3. Không copy `.ipd` / DLL ExiledBot 2; chỉ học kiến trúc (spec 29).
4. Không NOP `.rdata` float dùng chung (UI méo — doc 32).
5. Không inject DXGI proxy / ghi `Content.ggpk`.
6. Không spawn thread `keybd_event` vượt Focus Interlock.
7. Không fake telemetry / `|| true` để test xanh.
8. Không implement Spec 33 trụ 1–8 trước khi P0-4 pass.

---

## 7. Lệnh kiểm tra tối thiểu (khi làm P0)

Ghi stdout vào báo cáo phiên. Không dùng số PASS cũ.

```text
# 1) Offset registry khớp build
#    Core log: live=6AA2213C, pos_offset = 0x290

# 2) Unit (máy local, không cần Admin/game)
python -m pytest tests/test_pickit_evaluator.py tests/test_item_inspector.py -q

# 3) Live (game foreground, Core elevated)
#    tools/autonomous_map_runner.py với --ci --max-es 4713 --wasd --move
#    Cổng: Pos đổi; không kẹt (29,-135); không Warcry-as-portal
```

C++ `AutoPOE2_Tests.exe` chỉ khi có quyền phù hợp; thiếu Admin thì pytest + log live như trên.

---

## 8. Ghi chú lệch tài liệu đã xử lý ở đợt 13/09/2026

Các file sau được chỉnh **trỏ về tài liệu này**, thôi tuyên bố mâu thuẫn:

- `00_overview_and_roadmap.md`, `03_combat_and_assist_system.md`, `25_spec_...boss_rush...`: Full-auto farm không còn `[SPEC — CHƯA IMPLEMENT]` kiểu 11/09, cũng không còn “ổn định live”.
- Spec 29: code P0–P5 **có**; live loop **chưa**.
- `docs/agent/README.md`: cùng đính chính.
- `character_target/progression_milestones.md`: ES live 4713.

Khi hoàn thành một mục P0/P1: đánh `[x]` tại mục 5 **và** ghi timestamp + đường dẫn log. Không sửa nhãn LIVE-PROVEN chỉ vì commit.
