diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,12 @@
 
 ## Unreleased
 
+## 0.2.1.1 — 2026-10-05
+
+### Changed
+
+- Move the dependency on `mori://shinzui/okf/packages/okf-core` from `^>=0.5.0.0` to `^>=0.9.0.0`. The 0.6–0.9 breaking changes touch profile-schema records this package does not construct, so no source changed; the strict `profile/shikumi.dhall` conformance tests still pass.
+
 ## 0.2.1.0 — 2026-09-08
 
 ### Changed
diff --git a/example/Main.hs b/example/Main.hs
--- a/example/Main.hs
+++ b/example/Main.hs
@@ -4,7 +4,7 @@
 -- fixture. It builds a small two-program manifest — one typed @Predict@ program and
 -- one opaque @Embed@ program (the shape an agent runtime such as shikigami produces)
 -- — and writes the bundle to the directory given as the first argument (default
--- @./out@, i.e. @shikumi-okf/example/out@ when run from the package directory).
+-- @.\/out@, i.e. @shikumi-okf\/example\/out@ when run from the package directory).
 --
 -- Run it with:
 --
diff --git a/shikumi-okf.cabal b/shikumi-okf.cabal
--- a/shikumi-okf.cabal
+++ b/shikumi-okf.cabal
@@ -1,10 +1,10 @@
-cabal-version:   3.4
-name:            shikumi-okf
-version:         0.2.1.0
+cabal-version: 3.4
+name: shikumi-okf
+version: 0.2.1.1
 synopsis:
   Generate OKF documentation bundles from shikumi programs (EP-31)
 
-category:        AI
+category: AI
 description:
   An opt-in generator that documents shikumi @Program@ values as an Open
   Knowledge Format (OKF) bundle: one @Shikumi App@ concept that links to one
@@ -18,25 +18,30 @@
   @shikumi-trace-otel@ quarantines the OpenTelemetry tree — so shikumi users who
   do not care about OKF never depend on it.
 
-license:         BSD-3-Clause
-author:          Nadeem Bitar
-maintainer:      nadeem@gmail.com
-build-type:      Simple
+license: BSD-3-Clause
+author: Nadeem Bitar
+maintainer: nadeem@gmail.com
+build-type: Simple
 extra-doc-files: CHANGELOG.md
-
 -- Shipped so consumers get the profile their bundles are checked against, and so
 -- the test suite can locate it via Paths_shikumi_okf.getDataFileName regardless
 -- of the directory cabal was invoked from.
-data-files:      profile/shikumi.dhall
+data-files: profile/shikumi.dhall
 
 common common-options
   ghc-options:
-    -Wall -Wcompat -Widentities -Wincomplete-uni-patterns
-    -Wincomplete-record-updates -Wredundant-constraints
-    -fhide-source-paths -Wmissing-export-lists -Wpartial-fields
+    -Wall
+    -Wcompat
+    -Widentities
+    -Wincomplete-uni-patterns
+    -Wincomplete-record-updates
+    -Wredundant-constraints
+    -fhide-source-paths
+    -Wmissing-export-lists
+    -Wpartial-fields
     -Wmissing-deriving-strategies
 
-  default-language:   GHC2024
+  default-language: GHC2024
   default-extensions:
     DeriveAnyClass
     DuplicateRecordFields
@@ -44,45 +49,48 @@
     OverloadedStrings
 
 library
-  import:          common-options
-  hs-source-dirs:  src
+  import: common-options
+  hs-source-dirs: src
   exposed-modules:
     Shikumi.Okf.Generate
     Shikumi.Okf.Render
     Shikumi.Okf.Types
 
   build-depends:
-    , base      >=4.20     && <5
-    , okf-core  ^>=0.5.0.0
-    , shikumi   ^>=0.4.0.0
-    , text      ^>=2.1
+    base >=4.20 && <5,
+    okf-core ^>=0.9.0.0,
+    shikumi ^>=0.4.0.0,
+    text ^>=2.1,
 
 executable shikumi-okf-example
-  import:         common-options
+  import: common-options
   hs-source-dirs: example
-  main-is:        Main.hs
+  main-is: Main.hs
   build-depends:
-    , base
-    , shikumi      ^>=0.4.0.0
-    , shikumi-okf  ^>=0.2.1.0
-    , text
+    base,
+    shikumi ^>=0.4.0.0,
+    shikumi-okf ^>=0.2.1.1,
+    text,
 
 test-suite shikumi-okf-test
-  import:          common-options
-  type:            exitcode-stdio-1.0
-  hs-source-dirs:  test
-  main-is:         Main.hs
-  other-modules:   Paths_shikumi_okf
+  import: common-options
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test
+  main-is: Main.hs
+  other-modules: Paths_shikumi_okf
   autogen-modules: Paths_shikumi_okf
-  ghc-options:     -threaded -with-rtsopts=-N
+  ghc-options:
+    -threaded
+    -with-rtsopts=-N
+
   build-depends:
-    , base
-    , directory
-    , effectful
-    , filepath
-    , okf-core     ^>=0.5.0.0
-    , shikumi      ^>=0.4.0.0
-    , shikumi-okf  ^>=0.2.1.0
-    , tasty
-    , tasty-hunit
-    , text
+    base,
+    directory,
+    effectful,
+    filepath,
+    okf-core ^>=0.9.0.0,
+    shikumi ^>=0.4.0.0,
+    shikumi-okf ^>=0.2.1.1,
+    tasty,
+    tasty-hunit,
+    text,
diff --git a/src/Shikumi/Okf/Generate.hs b/src/Shikumi/Okf/Generate.hs
--- a/src/Shikumi/Okf/Generate.hs
+++ b/src/Shikumi/Okf/Generate.hs
@@ -1,4 +1,4 @@
--- | Turn a 'ProgramManifest' into OKF concepts and write them to disk.
+-- | Turn a t'ProgramManifest' into OKF concepts and write them to disk.
 --
 -- The bundle is one @Shikumi App@ concept that links to one @Shikumi Program@
 -- concept per manifest entry. Those Markdown links are the app→program edges the
@@ -10,7 +10,7 @@
 -- The bundles target __OKF v0.2__: the root @index.md@ declares
 -- @okf_version: "0.2"@ and every concept records its producer in the v0.2
 -- @generated@ family, which is what strict validation now asks for. Both come
--- from 'GenerateOptions'; start from 'defaultGenerateOptions' and override,
+-- from t'GenerateOptions'; start from 'defaultGenerateOptions' and override,
 -- rather than building the record literally, so a later field with a default
 -- leaves your call site working.
 --
@@ -57,7 +57,7 @@
 -- | Why bundle generation failed.
 data GenerateError
   = -- | A manifest name did not form a valid OKF concept id (carries the raw
-    -- @apps/<app>@ or @programs/<name>@ text and the underlying parse error).
+    -- @apps\/\<app\>@ or @programs\/\<name\>@ text and the underlying parse error).
     InvalidConceptName Text ConceptIdError
   | -- | Writing the bundle's @index.md@ files failed.
     IndexWriteError BundleError
@@ -111,11 +111,11 @@
 okfVersion02 :: OkfVersion
 okfVersion02 = OkfVersion {okfVersionMajor = 0, okfVersionMinor = 2}
 
--- | The concept id of a program: @programs/<name>@.
+-- | The concept id of a program: @programs/\<name\>@.
 programConceptId :: ProgramDoc -> Either GenerateError ConceptId
 programConceptId doc = mkConceptId ("programs/" <> name doc)
 
--- | The concept id of the application: @apps/<app>@.
+-- | The concept id of the application: @apps/\<app\>@.
 appConceptId :: AppInfo -> Either GenerateError ConceptId
 appConceptId app = mkConceptId ("apps/" <> appName app)
 
@@ -176,7 +176,7 @@
   pure (appC : programCs)
 
 -- | Generate the bundle and write it to @root@, then write its @index.md@ files
--- with the OKF version declaration from 'GenerateOptions'. Returns the first
+-- with the OKF version declaration from t'GenerateOptions'. Returns the first
 -- error encountered (an invalid name before any IO, or an index write failure
 -- after the concept files are written).
 writeProgramBundle ::
diff --git a/src/Shikumi/Okf/Types.hs b/src/Shikumi/Okf/Types.hs
--- a/src/Shikumi/Okf/Types.hs
+++ b/src/Shikumi/Okf/Types.hs
@@ -5,9 +5,9 @@
 --
 -- A shikumi @Program i o@ is a typed value with no name of its own, so the
 -- generator cannot discover programs by itself. Instead an application supplies a
--- 'ProgramManifest': a list of 'ProgramDoc' entries, each naming a program and
+-- t'ProgramManifest': a list of t'ProgramDoc' entries, each naming a program and
 -- carrying the human-authored metadata that documents it. The program itself is
--- held behind the constraint-free existential 'SomeProgram' — every function the
+-- held behind the constraint-free existential t'SomeProgram' — every function the
 -- generator runs on it ('Shikumi.Program.programShape',
 -- 'Shikumi.Program.nodeFieldsIndexed') is fully polymorphic in @i@/@o@, so no
 -- class dictionaries are needed. That is what lets the manifest hold both a typed
@@ -62,7 +62,7 @@
   }
 
 -- | The owning application's identity. Used to build the @Shikumi App@ concept and
--- the @shikumi://\<namespace\>/\<app\>@ resource URIs that tie every program
+-- the @shikumi:\/\/\<namespace\>\/\<app\>@ resource URIs that tie every program
 -- concept back to its application.
 data AppInfo = AppInfo
   { appNamespace :: !Text,
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -257,7 +257,7 @@
 -- when the fix is released upstream.
 --
 -- The defect is in the @cmark-gfm@ bindings, not in okf or shikumi. Full
--- mechanism: @mori://kivikakk/cmark-gfm-hs@, upstream-issues entry
+-- mechanism: @mori:\/\/kivikakk\/cmark-gfm-hs@, upstream-issues entry
 -- @cmark-gfm-hs-unsafe-concurrent-extension-registration@.
 warmUpMarkdown :: IO ()
 warmUpMarkdown = do
@@ -369,7 +369,7 @@
         -- generator actually emits.
         --
         -- This replaces a former "Conformance" group that re-asserted the
-        -- profile's conventions (concept types, `shikumi://` resource scheme)
+        -- profile's conventions (concept types, `shikumi:\/\/` resource scheme)
         -- in-process against a Haskell copy of them, and so could never notice
         -- the descriptor itself going stale. Every convention it checked is now
         -- expressed by the descriptor and enforced here against the real file.
