Suggested drafts (do not send)
Duckbill™ generates a Suggested Draft for RESPOND threads. It does not send mail, does not replace Outlook, and does not open a compose/reply-all client.
See ADR 0021, ADR 0019, FR §29, UI draft safety, API DraftReply / Command SendDraft, 04_MVP §3 and §6, Lifecycle §30, and 01 AI §8.
Labels
The three states must stay visually distinct:
| Kind | Label | Meaning |
|---|---|---|
| suggested | Suggested Draft | Local recommendation. Copy it into an existing mail client. |
| saved | Saved Draft | Provider draft. Not created by the AI DraftReply tool. |
| sent | Sent Message | Mail that left the mailbox. Never produced here. |
Flow
Agent DraftReply
→ evaluatePolicy (ADR 0019; missing gateway fails closed on send)
→ persist Suggested Draft + optional AIInference / audit
→ return copyText
SendDraft, AI-authorized send, and AI-initiated CreateDraft-to-provider throw. ENABLE_SEND is recorded only; flipping it without an explicit future ticket still denies send. The module never calls a mail provider adapter. Graph scopes stay Mail.Read / Mail.ReadWrite — not Mail.Send.
Retrieve
Authenticated application API:
POSTDraftReply →{ data: SuggestedDraftView }GETsuggested draft by id → same view (copyText,clientHint)- Send HTTP handler always returns
403/SEND_DENIED
Prompt-injection in the source message cannot force send. Fixture RESPOND threads yield a draft; the send adapter counter stays zero.
