# NEO-27 — Manual QA checklist Story: [NEO-27](https://linear.app/neon-sprawl/issue/NEO-27/e1m3-slice-3-telemetry-hook-sites-target-changed) Plan: [`docs/plans/NEO-27-implementation-plan.md`](../plans/NEO-27-implementation-plan.md) ## Preconditions - Game server running (`server/NeonSprawl.Server`). - Godot client opens `client/project.godot` and runs `scenes/main.tscn`. - In the scene, `TargetSelectionClient.log_selection_events` is enabled (`true`). ## Checks - [ ] **`target_changed` dev token appears on lock transition** - Press `Tab` to acquire a target lock or switch lock ids. - Verify Godot Output prints a line prefixed with `[TargetSelectionClient] target_changed`. - Confirm payload includes `previous`, `next`, `cause`, and `sequence`. - [ ] **No `target_changed` log on validity-only updates** - Hold a lock, move to force `validity` changes (`ok` ↔ `out_of_range`) without lock-id change. - Verify `target_state_changed` behavior remains, and no new `target_changed` log is printed for id-unchanged refreshes. - [ ] **Ability telemetry reserves are documented (not implemented)** - Confirm comment block exists in `client/scripts/main.gd` naming `ability_cast_requested` and `ability_cast_denied`. - Confirm comments include `TODO(E9.M1)` and reference E1.M4/E5.M1 as future wiring points. ## Expected outcome - Slice 3 telemetry hook names are explicitly present in code/docs: - Active hook mapping: `target_changed`. - Reserved hook names: `ability_cast_requested`, `ability_cast_denied`. - No production telemetry pipeline is introduced in this story.