## 2026-10-01T02:18:24Z
You are worker_m1_2_gen3.
Your working directory is: c:\Projects\FreeExile\.agents\teamwork\worker_m1_2_gen3
You must read ORIGINAL_REQUEST.md at: c:\Projects\FreeExile\.agents\teamwork\ORIGINAL_REQUEST.md (under section ## 2026-10-01T00:31:10Z).

MANDATORY INTEGRITY WARNING:
DO NOT CHEAT. All implementations must be genuine. DO NOT hardcode test results, create dummy/facade implementations, or circumvent the intended task. A auditor will independently verify your work. Integrity violations WILL be detected and your work WILL be rejected.

Scope & Task:
Remediate Milestone 1 (Modern ARPG UX/UI & Controls) issues by applying the verified solutions authored by the 3 Fix Explorers:
1. Explorer 1: `c:\Projects\FreeExile\.agents\teamwork\explorer_m1_fix_1\proposed_patch.diff` and `handoff.md`
   - Remove duplicate click listeners in `client/webapp/js/engine/combat_skills.js:352-361`.
   - Remove redundant `window.skillBarController.triggerCooldown(...)` calls in `combat_skills.js` actions.
   - Streamline `handleKey` in `combat_skills.js`.
   - In `client/webapp/js/ui/skill_bar_controller.js`: deduplicate cooldown triggering in `activateSlot()`, disassociate 'W' from Skill 2 (bind slot '2' to key '2'), guard `_bindKeyboardListener` against 'W', sync `window.dodgeCharges`.
   - In `client/webapp/index.html`: update `data-key="2"`, `data-tooltip-hotkey="2"`, and badge text `"2"` on `#skill-slot-w`.
2. Explorer 2: `c:\Projects\FreeExile\.agents\teamwork\explorer_m1_fix_2\proposed_TEST_INFRA.md` and `proposed_skill_bar_controller.js`
   - Update `TEST_INFRA.md` from `proposed_TEST_INFRA.md` for `test_f03_f04_cooldown_sweep_and_flash_spec`.
   - Update `registerSlot(slotIndex, skillDef, keybinding)` in `client/webapp/js/ui/skill_bar_controller.js` to accept 3 arguments matching `PROJECT.md:65` while maintaining 2-argument backward compatibility.
3. Explorer 3: `c:\Projects\FreeExile\.agents\teamwork\explorer_m1_fix_3\remediation_m1_fix_3.patch`, `proposed_hud_orbs.js`, `proposed_skill_bar_controller.js`
   - In `client/webapp/js/ui/hud_orbs.js`: add `!Number.isFinite(...)` guards to prevent NaN/Infinity poisoning of `displayedHp` and `displayedMana`.
   - Cache static gradients (`cavityGrad`, `depthGrad`, `sheenGrad`, `rimGrad`) per canvas context in `HudOrbs` to eliminate GC in 120 FPS hot path.
   - In `client/webapp/js/ui/skill_bar_controller.js`: handle `triggerCooldown(slotId, 0)` by clearing cooldown immediately; remove `.is-on-cooldown` class when charges recover from 0 to 1; avoid allocating `new Set()` in `_updateAllCooldowns`.

Write Ownership:
You exclusively own and modify:
- `client/webapp/index.html` (Must remain <= 200 lines soft / <= 400 lines hard)
- `client/webapp/js/ui/hud_orbs.js` (Must remain <= 350 lines soft / <= 500 lines hard)
- `client/webapp/js/ui/skill_bar_controller.js` (Must remain <= 350 lines soft / <= 500 lines hard)
- `client/webapp/js/engine/combat_skills.js` (Must remain <= 500 lines hard)
- `TEST_INFRA.md`

Verification Requirements:
Run and document exact outputs in your handoff report:
1. `pytest tests/unit/test_hud_orbs_and_skill_bar.py tests/unit/test_challenger_m1_edge_cases.py -v` (expect 25/25 PASS)
2. `pytest tests/e2e/test_poe2_ui_animation_vfx_e2e.py -v` (expect 0 FAILED, all M1 tests PASS / XPASS)
3. `python tools/lint/check_code_and_doc_hygiene.py --strict` (0 Hard Cap violations)

Write your completion report in `c:\Projects\FreeExile\.agents\teamwork\worker_m1_2_gen3\handoff.md` and send a message when done.
