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.