Fixes from the 2026-10-15 audit, with no change to any shape the apps read.
Block list hides unlisted accounts that are not the caller's buddies (shows User #id, empty slug).
No vouch for a suspended account.
Federation outbound calls run the outbound address guard.
Control characters in email addresses refused; mailer strips them from headers.
Key log proof, device and subject reads metered at 3600 per address per hour.
Left as is: email_taken (both apps depend on it), strict account tokens (needs the account service change first), credential expiry and current-password checks (need an app update first).
Fixes from the 2026-10-15 audit, with no change to any shape the apps read.
- Block list hides unlisted accounts that are not the caller's buddies (shows User #id, empty slug).
- No vouch for a suspended account.
- Federation outbound calls run the outbound address guard.
- Control characters in email addresses refused; mailer strips them from headers.
- Key log proof, device and subject reads metered at 3600 per address per hour.
Left as is: email_taken (both apps depend on it), strict account tokens (needs the account service change first), credential expiry and current-password checks (need an app update first).
swift test: 1015 of 1015, 6 new.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Block list: a blocked account that is unlisted and not on the caller's
buddy list comes back as "User #<id>" with an empty slug. Rows and shape
are unchanged, so unblock still works in both apps.
- Vouching: a suspended account can no longer be issued a vouch (403
account_suspended).
- Federation: outbound deposit, get and fetch run the outbound address
guard, with allowlisted peers exempt as in PeerDirectory.
- Email: control characters in an address are refused as bad_email, and
the mailer refuses such a recipient and strips them from headers.
- Key log: inclusion, consistency, device and subject reads are metered at
3600 per address per hour each, like the head.
Not changed: email_taken stays (both apps map it), strict account tokens
stay off until the account service stamps iss, aud and jti, and the
credential and current-password hardening needs an app update first.
swift test: 1015 of 1015 pass, 6 new.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes from the 2026-10-15 audit, with no change to any shape the apps read.
Left as is: email_taken (both apps depend on it), strict account tokens (needs the account service change first), credential expiry and current-password checks (need an app update first).
swift test: 1015 of 1015, 6 new.
🤖 Generated with Claude Code