- upgrade redb 2.6.2 -> 2.6.3 to fix the range() iterator hang that froze
the whole process during stale-envelope cleanup
- add runtime watchdog: independent OS thread aborts the process (exit 1)
when the tokio heartbeat stalls, so orchestrators can restart it
- make find_impl async via spawn_blocking so a stuck DB lock cannot pin
API workers (configurable via RUSTMAILER_WATCHDOG_TIMEOUT_SECS)
- oauth2: soft-disable token refresh when the OAuth2 config is disabled
(keep token, stop refreshing) instead of failing with
SecondaryKeyConstraintMismatch; remove delete_by_oauth2_id
- allow local-cache reads for disabled accounts (mailboxes, message list,
content, attachments); keep remote operations blocked
- include disabled accounts in minimal_list; keepalive and gRPC still
filter by enabled
- frontend: 403 no longer navigates to /403 or retries in a loop; show a
"account disabled" toast and stop loading content
- Add two new APIs to list email threads and fetch all messages within a thread
- Create a new email thread table to store thread information
- Implement method to extract thread_id from emails to support thread association queries
- Added unified search interface to query messages by email address
- Implemented both OpenAPI and gRPC endpoints
- Introduced new index table to optimize email-based lookups