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.
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.
Milestone-boundary promotion of
dev→main. Brings M5 (and the M5-complete docs) tomain;mainpreviously held M1–M4.M5 — Mail lifecycle + incremental sync (complete)
imap_tls_mode/smtp_tls_modenow 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.{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;SyncProgressevents.account_idselection 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.