diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Changelog
 
+## 0.1.0.4 - 2026-08-21
+
+- Documentation: correct the README selectors for the public `syntax`,
+  `automata`, and `egraph-program` sublibraries and the `tests` component;
+  align the facade metadata assertion with those canonical names.
+- Publish a complete user-uploaded Haddock archive for the current release.
+
 ## 0.1.0.3 - 2026-08-20
 
 - Compatibility: the `Moonlight.Core` main-library closure now supports GHC
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -15,9 +15,9 @@
 | Cabal dependency | Import | What you get |
 | --- | --- | --- |
 | `moonlight-core` | `Moonlight.Core` | The ordinary total vocabulary. This is the default. |
-| `moonlight-core:moonlight-core-syntax` | `Moonlight.Core.Pattern.AntiUnify` | Patterns and term anti-unification without the full umbrella. |
-| `moonlight-core:moonlight-core-automata` | `Moonlight.Core.Pattern.Automata` or `.Kernel` | The bottom-up automata substrate and compiled matcher. Depend on syntax too when naming its types directly. |
-| `moonlight-core:moonlight-core-egraph-program` | `Moonlight.Core.EGraph.Program` | The host-neutral e-graph program algebra without the rest of the foundation. |
+| `moonlight-core:syntax` | `Moonlight.Core.Pattern.AntiUnify` | Patterns and term anti-unification without the full umbrella. |
+| `moonlight-core:automata` | `Moonlight.Core.Pattern.Automata` or `.Kernel` | The bottom-up automata substrate and compiled matcher. Depend on syntax too when naming its types directly. |
+| `moonlight-core:egraph-program` | `Moonlight.Core.EGraph.Program` | The host-neutral e-graph program algebra without the rest of the foundation. |
 | `moonlight-core` | `Moonlight.Core.Unsound` | The explicit trust boundary. |
 
 The private implementation slices remain **basis**, **numeric**, **solver**, and
@@ -28,7 +28,7 @@
 ## Test
 
 ```bash
-cabal test moonlight-core:moonlight-core-test
+cabal test moonlight-core:tests
 ```
 
 ## Benchmarks
diff --git a/moonlight-core.cabal b/moonlight-core.cabal
--- a/moonlight-core.cabal
+++ b/moonlight-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:       3.0
 name:                moonlight-core
-version:             0.1.0.3
+version:             0.1.0.4
 synopsis:            Mathematical basis for Pale Meridian.
 description:         A total vocabulary of numeric classes, structural identity, orders, patterns, fixpoints, union-find, finite registries, and host-neutral e-graph programs.
 license:             MIT
@@ -25,7 +25,7 @@
 source-repository this
   type:     git
   location: https://github.com/PaleRoses/moonlight.git
-  tag:      moonlight-core-0.1.0.3
+  tag:      moonlight-core-0.1.0.4
   subdir:   moonlight-core
 
 common shared-properties
diff --git a/test/facade/PublicSurfaceSpec.hs b/test/facade/PublicSurfaceSpec.hs
--- a/test/facade/PublicSurfaceSpec.hs
+++ b/test/facade/PublicSurfaceSpec.hs
@@ -112,11 +112,11 @@
 testEGraphProgramSublibrarySurface :: IO ()
 testEGraphProgramSublibrarySurface = do
   cabalText <- readFile (packageRootFromTestModule __FILE__ </> "moonlight-core.cabal")
-  namedLibraryFieldValues "moonlight-core-egraph-program" "visibility" cabalText
+  namedLibraryFieldValues "egraph-program" "visibility" cabalText
     @?= Right ["public"]
-  namedLibraryFieldValues "moonlight-core-egraph-program" "hs-source-dirs" cabalText
+  namedLibraryFieldValues "egraph-program" "hs-source-dirs" cabalText
     @?= Right ["src-egraph-program"]
-  namedLibraryFieldValues "moonlight-core-egraph-program" "exposed-modules" cabalText
+  namedLibraryFieldValues "egraph-program" "exposed-modules" cabalText
     @?= Right ["Moonlight.Core.EGraph.Program"]
 
 packageRootFromTestModule :: FilePath -> FilePath
