docs(email): record reply recovery evidence
This commit is contained in:
@@ -569,3 +569,13 @@
|
||||
- **Consequences:** one draft maps to one send attempt identity until the user explicitly starts a new attempt after a confirmed failure. A sent/restored draft can only replay the existing ledger result. The additive migration defaults only during the same pre-exposure rollout; no draft UI existed before it.
|
||||
- **User approval required:** No; this closes a local safety dependency before UI exposure and sends no email.
|
||||
- **Reversible:** Downgrade `20260810080858_AddEmailDraftClientRequestId` before reverting `80b5532`. Do not deploy draft UI without an equivalent persisted idempotency identity.
|
||||
|
||||
## DEC-058 — Make draft persistence explicit and conflict-visible in the hub
|
||||
|
||||
- **Date:** 2026-08-10
|
||||
- **Decision:** Keep reply editing local until the user chooses Save draft, then adopt the server draft/revision/client-request identity. Offer saved drafts for refresh recovery, require revisioned delete, and surface 409 conflicts without replacing local text.
|
||||
- **Reason/evidence:** silent autosave introduces navigation/race semantics that are not yet proven. Explicit save is predictable, supports incomplete drafts and preserves the existing final send confirmation. Focused conflict/recovery tests, full frontend and build pass.
|
||||
- **Alternatives considered:** browser storage; silent debounced autosave; last-write-wins; discard on refresh; auto-send after save. These expose private data, risk lost edits or weaken explicit send consent.
|
||||
- **Consequences:** unsaved edits are intentionally not refresh-durable; saved replies are. A successful send attempts revisioned draft cleanup, while the persisted client ID keeps any surviving copy duplicate-safe. Compose-new-message and durable failed-attempt identity rotation remain separate increments.
|
||||
- **User approval required:** No; this is approved local MAIL-001 UI work with mocked APIs and no email/provider action.
|
||||
- **Reversible:** Revert `d3d2b67`; stored drafts remain available through the API/export but no UI consumes them.
|
||||
|
||||
Reference in New Issue
Block a user