From cb95876f7360ce33a88066ce338e8f6c0fc92ecd Mon Sep 17 00:00:00 2001 From: VinPropane Date: Sun, 26 Apr 2026 00:00:12 -0400 Subject: [PATCH] NEO-29: expand manual QA with client-driven checks Add explicit client-side validation steps to the NEO-29 manual QA checklist and include the generated Godot uid file created during client test runs. --- client/test/hotbar_loadout_client_test.gd.uid | 1 + docs/manual-qa/NEO-29.md | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 client/test/hotbar_loadout_client_test.gd.uid diff --git a/client/test/hotbar_loadout_client_test.gd.uid b/client/test/hotbar_loadout_client_test.gd.uid new file mode 100644 index 0000000..3bf1fd5 --- /dev/null +++ b/client/test/hotbar_loadout_client_test.gd.uid @@ -0,0 +1 @@ +uid://1r1d8lt00lmr diff --git a/docs/manual-qa/NEO-29.md b/docs/manual-qa/NEO-29.md index 0e200a6..e258aa6 100644 --- a/docs/manual-qa/NEO-29.md +++ b/docs/manual-qa/NEO-29.md @@ -36,3 +36,15 @@ - [ ] Run `client/scenes/main.tscn` in Godot after slot bindings exist on server. - [ ] Confirm no startup warnings from `HotbarLoadoutClient` and verify `HotbarState` node exists under the scene root with 8-slot mirror populated from server response. + +## 6) Client-driven update sanity (no curl) + +- [ ] With `main.tscn` running, open the remote SceneTree and select `HotbarLoadoutClient` under the scene root. +- [ ] Execute `request_bind_slot(2, "prototype_guard")` on that node (Editor script console or remote call). +- [ ] Confirm no client warning log from `HotbarLoadoutClient` and verify `HotbarState.slots_snapshot()` now contains `"prototype_guard"` at index `2`. +- [ ] Restart the client scene and verify hydration still reflects slot `2` from server (proves client fetch + apply path, not just local mutation). + +## 7) Client deny-path signal sanity + +- [ ] With `main.tscn` running, execute `request_bind_slot(2, "not_real")` on `HotbarLoadoutClient`. +- [ ] Confirm the client logs/handles a deny response (server `updated=false`, `reasonCode="unknown_ability"`), and `HotbarState` remains unchanged from the last valid loadout.