Promote to main: M5 (Mail lifecycle + incremental sync) #235

Merged
KofTwentyTwo merged 5 commits from dev into main 2026-07-30 03:00:46 +00:00
KofTwentyTwo commented 2026-07-30 02:51:46 +00:00 (Migrated from github.com)

Milestone-boundary promotion of dev → main. Brings M5 (and the M5-complete docs) to main; main previously held M1–M4.

M5 — Mail lifecycle + incremental sync (complete)

  • #197 — AddAccount rolls back an orphaned keyring secret if persistence fails (restores the 'no credential without a matching account' invariant).
  • #194 — Account lifecycle over gRPC (UpdateAccount/RemoveAccount/TestAccountConnection); imap_tls_mode/smtp_tls_mode now persist and actually drive the real IMAP (implicit/STARTTLS/plain) and SMTP connection; CLI account show/edit/delete/test are real gRPC clients (were fabricated). STARTTLS is a verified upgrade (no downgrade), genuine cert validation, no live network in tests.
  • #195 — genuinely incremental IMAP sync: a real {uidvalidity}:{uidnext} per-folder checkpoint narrows the FETCH; a UIDVALIDITY change forces a safe full re-fetch (no silent mail loss); per-item FETCH timeout replaces the indefinite hang; SyncProgress events.
  • #196 — SendMessage explicit account_id selection with an honest AccountNotFound error (no silent wrong-account fallback).

Every story reviewed (3 via opus adversarial passes; two caught and fixed genuine defects before merge — a credential-loss rollback and a silent-mail-loss UIDVALIDITY gap). Feature surface M1–M5 complete; remaining: M6 (security), M7 (API freeze). Open non-blocking follow-ups: #216, #219, #225, #233. Releases remain tag-only.

Milestone-boundary promotion of `dev` → `main`. Brings **M5** (and the M5-complete docs) to `main`; `main` previously held M1–M4. ## M5 — Mail lifecycle + incremental sync (complete) - **#197** — AddAccount rolls back an orphaned keyring secret if persistence fails (restores the 'no credential without a matching account' invariant). - **#194** — Account lifecycle over gRPC (UpdateAccount/RemoveAccount/TestAccountConnection); `imap_tls_mode`/`smtp_tls_mode` now persist and actually drive the real IMAP (implicit/STARTTLS/plain) and SMTP connection; CLI account show/edit/delete/test are real gRPC clients (were fabricated). STARTTLS is a verified upgrade (no downgrade), genuine cert validation, no live network in tests. - **#195** — genuinely incremental IMAP sync: a real `{uidvalidity}:{uidnext}` per-folder checkpoint narrows the FETCH; a UIDVALIDITY change forces a safe full re-fetch (no silent mail loss); per-item FETCH timeout replaces the indefinite hang; `SyncProgress` events. - **#196** — SendMessage explicit `account_id` selection with an honest AccountNotFound error (no silent wrong-account fallback). Every story reviewed (3 via opus adversarial passes; two caught and fixed genuine defects before merge — a credential-loss rollback and a silent-mail-loss UIDVALIDITY gap). Feature surface **M1–M5 complete**; remaining: M6 (security), M7 (API freeze). Open non-blocking follow-ups: #216, #219, #225, #233. Releases remain tag-only.
Sign in to join this conversation.