diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,25 @@
 # Changelog
 
+## 0.9.0.0 — 2026-08-10
+
+### Breaking Changes
+
+- Require `shibuya-core ^>=0.9.0.0`. The upstream major bump adds the
+  `DeadLetterReason.ApplicationFailure` constructor and the total
+  `deadLetterReasonCode`, `deadLetterReasonDetail`, and
+  `renderDeadLetterReason` projections. The adapter itself needed no code
+  change for the new constructor, but consumers are forced onto the new
+  `shibuya-core` major and must review their own `DeadLetterReason` matches.
+- The `AckDeadLetter` stderr warning now renders the reason with
+  `renderDeadLetterReason` instead of derived `Show`. Application failures now
+  log as `reason=my.app.code: detail` rather than
+  `reason=ApplicationFailure (DeadLetterCode "my.app.code") "detail"`, matching
+  the canonical rendering `shibuya-pgmq-adapter` writes to its DLQ payloads.
+  The `[shibuya-kafka-adapter] WARNING: dead-lettered message DROPPED` prefix
+  and the offset-acknowledgement semantics are unchanged.
+- Keep the example and benchmark packages on the same `shibuya-core` bound and
+  repo version line.
+
 ## 0.8.0.1 — 2026-07-05
 
 ### Other Changes
diff --git a/shibuya-kafka-adapter.cabal b/shibuya-kafka-adapter.cabal
--- a/shibuya-kafka-adapter.cabal
+++ b/shibuya-kafka-adapter.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.12
 name:            shibuya-kafka-adapter
-version:         0.8.0.1
+version:         0.9.0.0
 synopsis:        Kafka adapter for the Shibuya queue processing framework
 description:
   A Shibuya adapter that integrates with Apache Kafka via kafka-effectful
@@ -61,7 +61,7 @@
     , hw-kafka-client                        >=5.3       && <6
     , hw-kafka-streamly                      ^>=0.2
     , kafka-effectful                        ^>=0.3.0.0
-    , shibuya-core                           ^>=0.8.0.1
+    , shibuya-core                           ^>=0.9.0.0
     , stm                                    ^>=2.5
     , streamly                               ^>=0.11
     , streamly-core                          ^>=0.3
@@ -109,7 +109,7 @@
     , kafka-effectful
     , process
     , random
-    , shibuya-core                           ^>=0.8.0.1
+    , shibuya-core                           ^>=0.9.0.0
     , shibuya-kafka-adapter
     , stm
     , streamly
diff --git a/src/Shibuya/Adapter/Kafka/Internal.hs b/src/Shibuya/Adapter/Kafka/Internal.hs
--- a/src/Shibuya/Adapter/Kafka/Internal.hs
+++ b/src/Shibuya/Adapter/Kafka/Internal.hs
@@ -28,6 +28,7 @@
 import Data.IORef (IORef, atomicModifyIORef', newIORef, readIORef)
 import Data.Map.Strict (Map)
 import Data.Map.Strict qualified as Map
+import Data.Text qualified as Text
 import Data.Time.Clock (NominalDiffTime)
 import Effectful (Eff, IOE, (:>))
 import Effectful qualified
@@ -45,7 +46,7 @@
 import Kafka.Types (KafkaError, PartitionId, Timeout (..), TopicName)
 import Shibuya.Adapter.Kafka.Config (KafkaAdapterConfig (..))
 import Shibuya.Adapter.Kafka.Convert (consumerRecordToEnvelope)
-import Shibuya.Core.Ack (AckDecision (..), RetryDelay (..))
+import Shibuya.Core.Ack (AckDecision (..), RetryDelay (..), renderDeadLetterReason)
 import Shibuya.Core.AckHandle (AckHandle (..))
 import Shibuya.Core.Ingested (Ingested)
 import Shibuya.Core.Ingested qualified as Core
@@ -207,7 +208,7 @@
                 "[shibuya-kafka-adapter] WARNING: dead-lettered message DROPPED (no DLQ producer): "
                     <> show (cr.crTopic, cr.crPartition, cr.crOffset)
                     <> " reason="
-                    <> show reason
+                    <> Text.unpack (renderDeadLetterReason reason)
         ackAttempt state (storeGuarded state cr)
     AckHalt _ ->
         ackAttempt state (withConsumerLock state (pausePartitions [(cr.crTopic, cr.crPartition)]))
