test(drop): 打怪掉落全链路确定性单测与无头浏览器实机验证 (End-to-End Deterministic Drop Tests & Headless Browser Audit) #408

Closed
opened 2026-09-24 03:22:50 +00:00 by troytt · 1 comment
Owner

问题背景与目标

依据 AGENTS.md 第 5 节质量验证与门禁标准,打怪掉落物品涉及战斗结算、1.13c TC 掉落管线、地面等距渲染、Alt 标签交互以及 UI 背包/装备面板全链路协同,必须建立端到端确定性单测与无头浏览器实机走查验证,杜绝任何环节静默断层。


验证范围与规范

1. Vitest 确定性全链路单测 (tests/monster-drop-e2e.test.ts)

  • 全伤害源击杀掉落验证:分别通过近战普攻、飞行投射物(如火球/冰弹)、瞬发 AoE(如冰霜新星/新星)、持续光环脉冲(如神圣火焰)击杀怪物,断言 metrics.dropsRolled 递增且地面 engine.groundItems 生成对应战利品/金币实体。
  • 全阶级怪物 TC 准确性验证:
    • 普通怪(如 fallen1, zombie1, skeleton1)解析至 Act 1 H2H A 等真实 TreasureClass1。
    • 蓝色头目(Champion)与金色精英(Unique)解析至对应 TreasureClass2 / TreasureClass3(必掉魔法/稀有以上装备 + 药水)。
    • 固定暗金怪(如 Bishibosh, Rakanishu, Blood Raven, The Countess)解析至 SuperUniques.txt 专属 TC(如女伯爵掉落符文)。
  • Item → UiInventoryItem 拾取与穿戴验证:断言掉落物拾取进 InventoryPanel 后具备合法的 invFile(在 BAKED_UI_MANIFEST.itemRects 中存在)、非空中文 nameZh、格式化词条 stats 数组以及准确的 allowedSlots。

2. 无头浏览器实机走查验证 (acts.html)

  • 在无头浏览器中加载第一幕野外场景(如鲜血荒地 Blood Moor / 冰冷之原 Cold Plains),驱动角色击杀怪物群与固定暗金怪。
  • 验证地面生成可见掉落物图标与金币堆,按下 Alt 键渲染品质彩色中文标签,点击拾取后物品进入背包面板且 WebGL / Console 零报错。

验收标准

  1. 新增 tests/monster-drop-e2e.test.ts 全量断言 100% 通过。
  2. 无头浏览器实机击杀→掉落→Alt 标签→拾取入包走查通过。
  3. npm run typecheck 0 errors,全量 npx vitest run 100% 通过。
## 问题背景与目标 依据 `AGENTS.md` 第 5 节质量验证与门禁标准,打怪掉落物品涉及战斗结算、1.13c TC 掉落管线、地面等距渲染、Alt 标签交互以及 UI 背包/装备面板全链路协同,必须建立端到端确定性单测与无头浏览器实机走查验证,杜绝任何环节静默断层。 --- ## 验证范围与规范 ### 1. Vitest 确定性全链路单测 (`tests/monster-drop-e2e.test.ts`) - **全伤害源击杀掉落验证**:分别通过近战普攻、飞行投射物(如火球/冰弹)、瞬发 AoE(如冰霜新星/新星)、持续光环脉冲(如神圣火焰)击杀怪物,断言 `metrics.dropsRolled` 递增且地面 `engine.groundItems` 生成对应战利品/金币实体。 - **全阶级怪物 TC 准确性验证**: - 普通怪(如 `fallen1`, `zombie1`, `skeleton1`)解析至 `Act 1 H2H A` 等真实 `TreasureClass1`。 - 蓝色头目(Champion)与金色精英(Unique)解析至对应 `TreasureClass2` / `TreasureClass3`(必掉魔法/稀有以上装备 + 药水)。 - 固定暗金怪(如 `Bishibosh`, `Rakanishu`, `Blood Raven`, `The Countess`)解析至 `SuperUniques.txt` 专属 TC(如女伯爵掉落符文)。 - **`Item` → `UiInventoryItem` 拾取与穿戴验证**:断言掉落物拾取进 `InventoryPanel` 后具备合法的 `invFile`(在 `BAKED_UI_MANIFEST.itemRects` 中存在)、非空中文 `nameZh`、格式化词条 `stats` 数组以及准确的 `allowedSlots`。 ### 2. 无头浏览器实机走查验证 (`acts.html`) - 在无头浏览器中加载第一幕野外场景(如鲜血荒地 `Blood Moor` / 冰冷之原 `Cold Plains`),驱动角色击杀怪物群与固定暗金怪。 - 验证地面生成可见掉落物图标与金币堆,按下 `Alt` 键渲染品质彩色中文标签,点击拾取后物品进入背包面板且 WebGL / Console 零报错。 --- ## 验收标准 1. 新增 `tests/monster-drop-e2e.test.ts` 全量断言 100% 通过。 2. 无头浏览器实机击杀→掉落→Alt 标签→拾取入包走查通过。 3. `npm run typecheck` 0 errors,全量 `npx vitest run` 100% 通过。
troytt added this to the 实现打怪掉落物品 milestone 2026-09-24 03:22:50 +00:00
Author
Owner

Milestone M11.5 (Issue #408) Gate 1 Verification: 100% PASS

All 5 Gate subagents voted unanimously APPROVE / CLEAN:

  • Reviewer 1: APPROVE (4 damage sources, single-drop gate invariant, TC hierarchy, UI inventory loop, gold clamping, full inventory refusal verified)
  • Reviewer 2: APPROVE (8-stage headless browser audit on acts.html passed cleanly with zero console/WebGL/network errors)
  • Challenger 1: APPROVE (7/7 adversarial edge cases passed, visual screenshots verified)
  • Challenger 2: APPROVE (11/11 E2E tests, 176/176 Milestone #11 related tests passed, clean build, zero regressions)
  • Forensic Auditor: CLEAN (Strict worktree isolation, main repository 100% clean, zero leaks)

Merged to main at commit ef86fc5 and pushed to origin/main.
Worktree .worktrees/issue-408 pruned cleanly.

### Milestone M11.5 (Issue #408) Gate 1 Verification: 100% PASS All 5 Gate subagents voted unanimously **APPROVE** / **CLEAN**: - **Reviewer 1**: APPROVE (4 damage sources, single-drop gate invariant, TC hierarchy, UI inventory loop, gold clamping, full inventory refusal verified) - **Reviewer 2**: APPROVE (8-stage headless browser audit on acts.html passed cleanly with zero console/WebGL/network errors) - **Challenger 1**: APPROVE (7/7 adversarial edge cases passed, visual screenshots verified) - **Challenger 2**: APPROVE (11/11 E2E tests, 176/176 Milestone #11 related tests passed, clean build, zero regressions) - **Forensic Auditor**: CLEAN (Strict worktree isolation, main repository 100% clean, zero leaks) Merged to `main` at commit `ef86fc5` and pushed to `origin/main`. Worktree `.worktrees/issue-408` pruned cleanly.
Sign in to join this conversation.
No Label
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#408
No description provided.