diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,23 @@
 
 ## [Unreleased]
 
+## 0.12.0.0 — 2026-10-27
+
+### Breaking Changes
+
+- Require the released `mori://shinzui/keiro` 0.22.0.0,
+  `mori://shinzui/kiroku/packages/kiroku-store` 0.12.0.0 and
+  `mori://shinzui/shibuya` Core 0.12.0.0/adapter 0.7.0.0 cohort.
+  Rebuild embedded hosts together because public upstream types have changed.
+
+### Changed
+
+- Preserve native event encodings, exact-category subscriptions, catalog bindings,
+  host AI capabilities and application API behavior. Adapt the embedding worker
+  test envelope to the upstream delivery-status field.
+- Document worker quiescence, the 63-entry migration plan, isolated rehearsal and
+  cutover requirements in `docs/user/upgrading-to-keiro-0-22.md` in this repository.
+
 ## 0.11.0.0 — 2026-10-19
 
 ### Breaking Changes
diff --git a/kioku-core.cabal b/kioku-core.cabal
--- a/kioku-core.cabal
+++ b/kioku-core.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: kioku-core
-version: 0.11.0.0
+version: 0.12.0.0
 synopsis: Reusable agent memory runtime
 description:
   Core runtime for kioku. M1 establishes the application effect stack; later
@@ -134,16 +134,16 @@
     hasql-transaction >=1.0 && <1.3,
     hs-opentelemetry-api >=1.0 && <1.1,
     keiki ^>=0.9.1.0,
-    keiro ^>=0.21.0.0,
-    keiro-core ^>=0.21.0.0,
-    kioku-api ^>=0.11.0.0,
-    kiroku-store ^>=0.11.0.0,
+    keiro ^>=0.22.0.0,
+    keiro-core ^>=0.22.0.0,
+    kioku-api ^>=0.12.0.0,
+    kiroku-store ^>=0.12.0.0,
     lens >=5.2 && <5.4,
     mmzk-typeid >=0.7 && <0.8,
     relay-pagination ^>=0.1.1.2,
     relay-pagination-hasql ^>=0.1.1.2,
-    shibuya-core ^>=0.10.0.1,
-    shibuya-kiroku-adapter ^>=0.6.0.1,
+    shibuya-core ^>=0.12.0.0,
+    shibuya-kiroku-adapter ^>=0.7.0.0,
     shikumi ^>=0.4.0.0,
     shikumi-trace ^>=0.3.0.0,
     text >=2.1 && <2.2,
@@ -205,15 +205,15 @@
     generic-lens >=2.2 && <2.4,
     hasql >=1.6,
     hasql-transaction >=1.0,
-    keiro ^>=0.21.0.0,
-    keiro-core ^>=0.21.0.0,
-    kioku-api ^>=0.11.0.0,
-    kioku-core ^>=0.11.0.0,
-    kioku-migrations:test-support ^>=0.11.0.0,
-    kiroku-store ^>=0.11.0.0,
+    keiro ^>=0.22.0.0,
+    keiro-core ^>=0.22.0.0,
+    kioku-api ^>=0.12.0.0,
+    kioku-core ^>=0.12.0.0,
+    kioku-migrations:test-support ^>=0.12.0.0,
+    kiroku-store ^>=0.12.0.0,
     lens >=5.2,
     relay-pagination ^>=0.1.1.2,
-    shibuya-core ^>=0.10.0.1,
+    shibuya-core ^>=0.12.0.0,
     shikumi ^>=0.4.0.0,
     shikumi-trace ^>=0.3.0.0,
     tasty >=1.5,
diff --git a/test/Kioku/EmbeddingWorkerSpec.hs b/test/Kioku/EmbeddingWorkerSpec.hs
--- a/test/Kioku/EmbeddingWorkerSpec.hs
+++ b/test/Kioku/EmbeddingWorkerSpec.hs
@@ -69,7 +69,7 @@
 import Shibuya.App qualified as App
 import Shibuya.Core.Ack (AckDecision (..), DeadLetterReason (..), HaltReason (..), RetryDelay (..))
 import Shibuya.Core.AckHandle (AckHandle (..))
-import Shibuya.Core.Ingested (Ingested (..))
+import Shibuya.Core.Ingested (DeliveryStatus (DeliveryCurrent), Ingested (..))
 import Shibuya.Core.Types (Attempt (..), Envelope (..), MessageId (..))
 import System.Timeout (timeout)
 import Test.Tasty (TestTree, testGroup)
@@ -600,7 +600,8 @@
             payload = recorded
           },
       ack = AckHandle {finalize = \_ -> pure ()},
-      lease = Nothing
+      lease = Nothing,
+      deliveryStatus = pure DeliveryCurrent
     }
 
 -- | Run a database-backed case, skipping it when the ephemeral PostgreSQL has
