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.
**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)
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.
Dependency gate for change enumeration and verified mutations. Decide fork vs hand-roll here.
async-imap0.11.3 cannot express any of the primitives the sync model needs:ENABLESELECT (QRESYNC …)select_qresyncVANISHEDimap-protobut dropped by async-imap'sselect()parserCOPYUIDuid_copy/uid_mvreturnResult<()>;check_status_okdiscards the response code[MODIFIED …]UNCHANGEDSINCEvariant; tagged code discardedrun_command/read_responseare public, so a hand-rolled tagged-response collector is viable (~80–150 LOC plus per-command parsers), subject to the workspace-D warnings/ no-unwrapregime. The alternative is forkingasync-imap.Do not freeze
nuncio.v1until this path is proven.Testable against the harness in #384.
Design: ADR 0002 · review evidence (PR #385)