# AOV 連續首抽使用說明

## 開始與停止

在 Terminal 執行：

```bash
/Users/longmountain/Documents/Codex/2026-07-25/bluestack-work/outputs/run_aov_batch.command
```

預設會持續執行，直到你在該 Terminal 按 `Control-C`。本機程式不需要 Codex，也不會消耗 token。

自適應雙開使用：

```bash
/Users/longmountain/Documents/Codex/2026-07-25/bluestack-work/outputs/run_aov_batch_dual.command
```

雙開預設每台 3 vCPU／3072 MB，第二台至少延遲 120 秒。依目前設定，系統負載只會顯示於 Dashboard，不會單獨阻止補第二台；磁碟、記憶體、溫度與引擎生命週期安全門檻仍會生效。資源不足時會自動維持單開，不會強制關閉正在跑的帳號。正式上限固定為兩台。

新引擎會關閉 BlueStacks 的宿主端鍵鼠映射教學，並把傳說對決的提示旗標標成已顯示。若 `使用鍵盤和滑鼠進行遊戲` 仍偶發出現，程式只會在精確的引擎視窗內，同時 OCR 到完整標題及唯一一個 `繼續` 按鈕時才點擊；這個提示不屬於 Android 畫面，因此不由遊戲 workflow 的 ADB 座標處理。

在 M2 MacBook Air／16 GB 上，建議夜間只保留 Terminal、BlueStacks 與儀表板。預期實際產量約 4.5–5.2 輪／小時；若 Dashboard 長期顯示降級為單開，先看 memory pressure、swap、磁碟與 thermal，而不要提高到三開。系統負載太高仍可能讓 ADB、OCR、配對確認與模擬器啟動變慢，但不再直接降為單開。

只測試一輪可加上：

```bash
/Users/longmountain/Documents/Codex/2026-07-25/bluestack-work/outputs/run_aov_batch.command --max-rounds 1
```

開始後會開啟本機 HTML 儀表板。固定位置：

```text
/Users/longmountain/Documents/Codex/2026-07-25/bluestack-work/outputs/aov-reroll-batch/dashboard.html
```

## 每輪會怎麼處理

1. 記錄啟動時所有既有 BlueStacks 引擎，為每輪取得永久編號，再建立全新空白引擎。雙開時每個 worker 都有獨立引擎、ADB port、log 與 run 目錄。
2. 安裝 XAPK，完成遊客登入、新手流程、獎勵與 41 抽，保留三張截圖。
3. 中獎條件採 OR：
   - 第一張圖的物品名稱不再只是「次元徽章、賞金牌、LSR雙倍卡包」；圖示尚未下載不算中獎。
   - 第三張圖「稀有獎勵包含」左上角與普通頭像／下載箭頭都明顯不同。
4. 任一條件成立：關閉並保留該引擎。
5. 普通結果、遊戲閃退、逾時或單輪失敗：保留截圖與 log，刪除該輪新建引擎，再開始下一輪。

影像會先正規化到相同比例與尺寸、校正小幅亮度差、容許少量位移；不是逐像素 1:1 比對。

## 防止佔滿硬碟

- 刪除只允許作用於「本輪開始前不存在」且引擎名稱與顯示名稱都吻合的唯一項目。
- 如果 BlueStacks 刪除失敗，程式不會繼續建立更多引擎；它會原地重試並在儀表板顯示錯誤。另一個已在遊戲中的 worker 可繼續，但不補新 worker。
- 剩餘空間低於 20 GiB 時暫停建立新引擎，每 60 秒重新檢查。
- 截圖、`decision.json`、逐輪 log 和儀表板不會隨引擎刪除。

## 紀錄位置

- 截圖與單輪 manifest：`outputs/aov-reroll-runs/<時間>_<引擎>/`
- 判定依據：每輪資料夾內的 `decision.json` 與 `jackpot-evidence/`
- 逐輪 log：`outputs/aov-reroll-batch/logs/`
- 總事件：`outputs/aov-reroll-batch/events.jsonl`
- 儀表板：`outputs/aov-reroll-batch/dashboard.html`

若電腦或監督程式意外中斷，下一次執行會先依序處理 `active_rounds.json` 中每個未完成輪次（已有截圖就先判定），完成保留／刪除後才建立下一個引擎。舊版 `active_round.json` 會自動遷移。
