mail: raw IMAP command layer for ENABLE, tagged response codes, and VANISHED #388

Open
opened 2026-08-10 19:27:50 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-08-10 19:27:50 +00:00 (Migrated from github.com)

Dependency gate for change enumeration and verified mutations. Decide fork vs hand-roll here.

async-imap 0.11.3 cannot express any of the primitives the sync model needs:

Needed Status
ENABLE no command at all — RFC 7162 §3.2.3 requires it before QRESYNC or the server MUST reply BAD
SELECT (QRESYNC …) no select_qresync
VANISHED parsed by imap-proto but dropped by async-imap's select() parser
COPYUID uid_copy/uid_mv return Result<()>; check_status_ok discards the response code
[MODIFIED …] no UNCHANGEDSINCE variant; tagged code discarded

run_command/read_response are public, so a hand-rolled tagged-response collector is viable (~80–150 LOC plus per-command parsers), subject to the workspace -D warnings / no-unwrap regime. The alternative is forking async-imap.

Do not freeze nuncio.v1 until this path is proven.

Testable against the harness in #384.

Design: ADR 0002 · review evidence (PR #385)

**Dependency gate for change enumeration and verified mutations. Decide fork vs hand-roll here.** `async-imap` 0.11.3 cannot express any of the primitives the sync model needs: | Needed | Status | | --- | --- | | `ENABLE` | no command at all — RFC 7162 §3.2.3 requires it before QRESYNC or the server MUST reply BAD | | `SELECT (QRESYNC …)` | no `select_qresync` | | `VANISHED` | parsed by `imap-proto` but dropped by async-imap's `select()` parser | | `COPYUID` | `uid_copy`/`uid_mv` return `Result<()>`; `check_status_ok` discards the response code | | `[MODIFIED …]` | no `UNCHANGEDSINCE` variant; tagged code discarded | `run_command`/`read_response` are public, so a hand-rolled tagged-response collector is viable (~80–150 LOC plus per-command parsers), subject to the workspace `-D warnings` / no-`unwrap` regime. The alternative is forking `async-imap`. **Do not freeze `nuncio.v1` until this path is proven.** Testable against the harness in #384. Design: [ADR 0002](https://github.com/KofTwentyTwo/nuncio/blob/dev/docs/adr/0002-multi-engine-sync-model.md) · [review evidence](https://github.com/KofTwentyTwo/nuncio/blob/dev/docs/reviews/2026-08-10-multi-engine-design-review.md) (PR #385)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KofTwentyTwo/nuncio#388