RecoveryNo proven backup and rebuild routine yet
The bind mount survives containers, but hardware loss is different. Add encrypted versioned backup plus an automated EML index rebuild and restoration drill.
Delivery semanticsNo idempotency or dead-letter queue
A storage error can currently produce 200 / ok:false. Production intake needs a stable message key, transactional acknowledgement, retries, and a dead-letter path.
AuthenticationOne shared viewer token
All delivered roles share one inbox and one viewer credential. Add real identities, per-recipient scopes, session rotation, expiry, and CSRF protection.
Cookie hardeningThe viewer cookie lacks an explicit Secure flag
The public route is HTTPS, but production code should still declare Secure, shorten the lifetime, rotate tokens, and invalidate sessions server-side.
At-rest privacyRaw EML is not encrypted by the app
Local disk controls are the present boundary. Add volume/file encryption and an encrypted backup strategy for stronger inbox-data protection.
Message experienceThe viewer is intentionally minimal
HTML is reduced to text, attachment filenames are listed but not downloadable, threads are not grouped, and search is not yet exposed.
Domain policyDMARC remains monitoring-only
Move from p=none toward quarantine or reject after confirming every legitimate sender aligns; add aggregate reporting.
Privacy surfaceHealth reveals the inbox count
The endpoint contains no mail content, but the count is unnecessary public metadata. A boolean-only health response would be tighter.
Agent integrationThe live MailCat adapter is not wired
Phase 1 runs against the provider-neutral contracts and deterministic corpus. Build the adapter that tails new MailCat messages into the canonical ingest path.
Product surfaceThe conversational interface is not built
Recall is a service, not yet the polished ask-and-correct experience. The UI must expose evidence, ambiguity, edits, consent, reversibility, and action history.
Personal memoryLearning has a contract, not a durable backend
ResolutionMemory defines the seam, but persistent account-scoped bindings, inspection, correction, expiry, and export still need implementation.
Hero coverageCompose and Tend remain designs
Draft persistence exists, but contextual composing, voice memory, consented noise rules, and the reversible muted lane are not complete services yet.