diff --git a/docs/evidence/main-windows-denied-post-2026-10-28.md b/docs/evidence/main-windows-denied-post-2026-10-28.md new file mode 100644 index 0000000..0f3e383 --- /dev/null +++ b/docs/evidence/main-windows-denied-post-2026-10-28.md @@ -0,0 +1,18 @@ +# Main Windows test gate, 28 October 2026 + +Exact main commit `b5bbcec1a0cc3f8b3d25ef2686fd8315e209f167` +([checks run 40723931638](https://github.com/saphid/frame-control/actions/runs/40723931638)) +failed in `server-tests (windows-latest, 3.12)`. Its server test step had one +error: `test_settings_need_and_accept_the_ui_key` received Windows +`ConnectionAbortedError [WinError 10053]` while reading an unauthorized +POST response. The test sent a JSON body, but the missing-key guard rejects +the request before reading it. Closing a connection with an unread body can +reset it on Windows; that is the likely cause, rather than a settings write +failure. The other Windows tests completed, and the exact-main native Decky +runtime run passed. + +The test now sends an empty POST when checking that a missing key is refused. +Its subsequent authorized POST still sends a settings body and verifies the +saved value. The local `tests/test_server.py` module passed 45 tests after +this change. Hosted Windows CI on the repair commit and green exact-main CI +remain required before further merges. diff --git a/tests/test_server.py b/tests/test_server.py index fde9435..df6202c 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -497,7 +497,10 @@ class ArtworkSettings(unittest.TestCase): time.sleep(0.05) key = {"X-Frame-UI": "1", "Content-Type": "application/json"} self.assertEqual(request("GET", "/api/settings/artwork")[0], 403) - self.assertEqual(request("POST", "/api/settings/artwork", {"steamgriddb_api_key": "abc"})[0], 403) + # The missing-key guard runs before reading a body. Leaving an + # unread body on Windows can reset this test connection before + # http.client receives the 403 response. + self.assertEqual(request("POST", "/api/settings/artwork")[0], 403) status, payload = request("GET", "/api/settings/artwork", headers=key) self.assertEqual((status, json.loads(payload)["steamgriddb_configured"]), (200, False)) status, payload = request("POST", "/api/settings/artwork", {"steamgriddb_api_key": "abc_1"}, key)