The bind guard (0.7.1). With no bearer token a served wallet answers any
caller that can reach it, and its two BEEF doors take a body of any size
(0.7.0), so an address beyond loopback needs a token or the operator’s
explicit allow_no_token. An empty token counts as none. Loopback is
unchanged. Run at startup, before the wallet is opened or a socket bound.
Browser wallets accept JSON whose strings carry lone UTF-16 surrogate escapes
("\ud83d" without its pair); serde does not, so a page whose keyID or data
happened to contain one got 400 Failed to parse the request body as JSON: keyID: lone leading surrogate from this wallet while MetaNet Desktop served
the same call (beta soak, 2026-09-02, two logins lost). A browser’s encoder
turns such a code unit into U+FFFD when it hashes the string, so the same
substitution here yields the same bytes the JS wallet would derive from.