9.0.1 (2026-09-10)
Bug Fixes
- authenticate native notification messages #114 (3dd2758)
- classify malformed notification generations permanently (f484ddf)
- complete native notification authentication #114 (9b45884)
- improve UserMetadataHandler initialization by ensuring directory creation for persistent store (ad84b61)
- ios: check the JSON token type for NSE challenge timestamps instead of Decimal (#342) (cac29a6)
- ios: drop the NSE log fetch size cap; keep the auth endpoint caps (#342) (e40e17f)
- ios: reject fractional timestamp literals in NSE challenges; fix test server body read (#342) (c8d407f)
- ios: scan NSE challenge JSON strictly; reject duplicate members and bound responses (#342) (d3b322f)
- mobile: bound missing notification key retries (#114) (9bb41f6)
- mobile: disable Android native heap pointer tagging to stop JSC crash (95ce188), closes #325
- mobile: point dev QSS_ENDPOINT at localhost instead of a LAN IP (b04bbbe), closes #318
- mobile: reconcile Android background lifecycle and socket recovery (c6cd5d1)
- mobile: suppress self and unknown-user notifications on Android and iOS (#339) (e98e974)
- mobile: update Android libtor.so to Tor 0.4.9.11 and re-enable Android in update script (9bc4027)
- push: store native push prerequisites after a fresh join; stop duplicate websocket start from cancelling the join (#346, #347) (#348) (2abea2f)
- reject malformed notifications before key retry (6a22aa4)
- security: bind native NSE auth to QSS identity #115 (cc0a6d7)
- security: close NSE proof validation gaps #115 (5e29b4c)
- security: harden QPS notification envelopes #135 (5a51027)
- validate notification scopes before key lookup (04bdb7d)
- validate NSE message shape after decoding #114 (3798775)