Exposure is not operation
Treat XMLHttpRequest, WebSocket and localStorage independently: exposing them does not establish working transport or durable storage. Do not assume desktop APIs such as fetch, Worker or indexedDB are available.
Operational results
| Capability | Observed behavior | Limit or design consequence |
|---|---|---|
| Packaged coui XHR | One fixed packaged payload was read successfully. | Does not establish network transport. |
| Loopback HTTP | Two documents received status 200 and the expected fixed JSON from a local endpoint with permissive CORS. | Internet/TLS/authentication, cookies and general cross-origin policy. |
| WebSocket | Two bounded five-second attempts remained CONNECTING; no game request reached the peer, which passed independent host controls. | Exact host cause and other integrations. Constructor exposure is insufficient. |
| Owned storage operations | A dedicated absent key passed set/get/remove. | Quota and isolation contracts; no other keys were inspected. |
| Document recreation | An owned marker survived one destruction/recreation for the tested layout/origin. | Other origins and longer lifetimes. |
| Full client restart | A clean write launch followed by a fresh read launch did not recover the expected marker. | Backend, partition or flush cause. Restart durability was not established. |
Choose the data owner
Use verified Python persistence for durable settings. Keep network and file work off the game thread in an owned worker, validate and bound the response, then publish a small model update on the client thread only if the owner generation still matches. Define timeouts, response limits and cancellation or stale-result handling.
Frontend HTTP can be useful where the actual endpoint and policy have been verified, but a local test is not a guarantee for a remote service. A JavaScript library cannot supply missing native socket integration. Preserve the bounded negative result rather than adding speculative protocol fallbacks.
Gameface HTML also does not recreate WoT's separately owned embedded browser, browser controller or native web-to-client handler collection. For a web surface, follow Embedded Browser & Native Bridge; for a local companion, use Local Tools & Bridges.
Cleanup and verification
Retain pending request/socket handles, timers, event listeners and model callback IDs. End or abort owned work where supported, detach listeners, and reject late responses after teardown. Test document recreation and full process restart separately; a value retained in the same document cannot prove disk persistence.
A controlled test should use one mod-owned key and a fixed nonsensitive payload, with independent endpoint controls and an explicit cleanup result. Do not enumerate unrelated storage to diagnose a missing marker. Record the tested origin, client build and lifetime boundary so future readers can judge applicability.
See settings ownership and schema migration, asynchronous work, and capability diagnostics.