3.D Real JMAP HTTP client + camelCase fix #180

Closed
opened 2026-07-27 13:11:55 +00:00 by KofTwentyTwo · 1 comment
KofTwentyTwo commented 2026-07-27 13:11:55 +00:00 (Migrated from github.com)

Phase 3 — Feature completeness (behind the API). Crate: nuncio-mail (JMAP).

The IMAP/SMTP spine is real (Phase 1); JMAP needs a real HTTP client and the
camelCase serialization fix from the assessment.

Scope / acceptance criteria

  • Real JMAP HTTP client — session + Email/query/Email/get/Email/set
    over HTTP(S), wired so the daemon can drive a JMAP account through the same
    fetch→store path as IMAP; wiremock-mocked in tests.
  • camelCase fix — JMAP request/response structs serialize with the
    JMAP-correct field names (camelCase) so real servers accept/return data.
    Regression test on the wire JSON.
  • Reuses the existing MailBackend/sync seam so no new proto is required if the
    mail surface already covers it; add proto/CLI only if a gap exists.
  • Offline E2E: JMAP fetch → store → list against a mock server. cargo verify green.
**Phase 3 — Feature completeness (behind the API).** Crate: `nuncio-mail` (JMAP). The IMAP/SMTP spine is real (Phase 1); JMAP needs a real HTTP client and the camelCase serialization fix from the assessment. ### Scope / acceptance criteria - [ ] **Real JMAP HTTP client** — session + `Email/query`/`Email/get`/`Email/set` over HTTP(S), wired so the daemon can drive a JMAP account through the same fetch→store path as IMAP; `wiremock`-mocked in tests. - [ ] **camelCase fix** — JMAP request/response structs serialize with the JMAP-correct field names (camelCase) so real servers accept/return data. Regression test on the wire JSON. - [ ] Reuses the existing `MailBackend`/sync seam so no new proto is required if the mail surface already covers it; add proto/CLI only if a gap exists. - [ ] Offline E2E: JMAP `fetch → store → list` against a mock server. `cargo verify` green.
KofTwentyTwo commented 2026-07-28 14:06:03 +00:00 (Migrated from github.com)

Superseded by #189 (M3) in the roadmap restructuring (milestones M1–M7). The replacement story carries the full, self-contained spec for a remote implementer. See docs/ROADMAP.md, docs/STORY-WORKFLOW.md, docs/HANDOFF.md.

Superseded by #189 (M3) in the roadmap restructuring (milestones M1–M7). The replacement story carries the full, self-contained spec for a remote implementer. See docs/ROADMAP.md, docs/STORY-WORKFLOW.md, docs/HANDOFF.md.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KofTwentyTwo/nuncio#180