diff --git a/changelog.mdx b/changelog.mdx
index c28fe9f..8826734 100644
--- a/changelog.mdx
+++ b/changelog.mdx
@@ -14,6 +14,38 @@ This page tracks releases of SenderKit's developer libraries — the
documents. New entries land here as each library ships a version.
+
+ ## `blockedReason` removed from the SDK type
+
+ **`@senderkit/sdk@0.11.0` / `@senderkit/cli@0.6.4`**
+
+ The [June 19 entry](#june-19-2026) below noted that `blockedReason` was retained on
+ the `Message` type but never populated by the customer API. As of this release the
+ property is removed from the type entirely — referencing `message.blockedReason` in
+ TypeScript is now a compile error rather than an always-`undefined` runtime value.
+
+ Nothing else changes: `blocked` remains a valid `Message.status` value, and
+ `messages.list({ status: "blocked" })` / `--status blocked` /
+ `senderkit_messages_list` still accept it as a filter. If you already branch on
+ `status === "blocked"` you're unaffected; if you referenced `blockedReason`
+ anywhere, remove that reference.
+
+
+
+ ## Inbound webhook retries are now deduplicated
+
+ Sources that deliver to a SenderKit inbound hook endpoint — including the
+ [Supabase auth email hook](/guides/supabase-auth-emails) — retry a delivery
+ whenever they don't receive a prompt `2xx`, including after transient network
+ errors. Previously, a retried delivery could enqueue the underlying email a
+ second time, so a recipient occasionally received a duplicate confirmation,
+ magic-link, or recovery email.
+
+ Retried deliveries of the same event are now recognized and deduplicated
+ automatically — a retry resolves without sending again. No configuration changes
+ are needed.
+
+
## Message preview in Logs
@@ -47,6 +79,8 @@ This page tracks releases of SenderKit's developer libraries — the
The `Message.blockedReason` property in the SDK type (`string | null | undefined`)
is retained as an optional field but is never populated in customer API responses.
+ (Update: as of the [July 6, 2026 entry](#july-6-2026) above, the property has been
+ removed from the SDK type entirely.)
The earlier June 17 changelog entry described `blockedReason` as containing
human-readable detail (e.g. `"High-confidence phishing content detected"`) — that
description was incorrect and has been superseded by this entry.
diff --git a/guides/supabase-auth-emails.mdx b/guides/supabase-auth-emails.mdx
index ecc0d56..2adf4e6 100644
--- a/guides/supabase-auth-emails.mdx
+++ b/guides/supabase-auth-emails.mdx
@@ -116,6 +116,8 @@ display OTP codes.
triggering a retry storm. Only unexpected transient failures return 5xx.
- **Unsupported actions are silently accepted.** Any `email_action_type` outside the
six above returns `200` with no send.
+- **Retries are deduplicated.** If Supabase retries a delivery (or a network blip
+ means it never sees SenderKit's response), the retry won't send the email again.
- **One endpoint per mode.** The Integrations page creates a live-mode endpoint. To
test before going live, use a `sk_test_` key connection with draft templates — sends
are recorded but not dispatched to a provider.