diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,46 @@
 
 ---
 
+## [0.17.3] - 2026-08-01
+
+Point release on the 0.17.x line, focused on **release-artifact integrity**. The 0.17.2 release shipped
+two defects that every existing check missed because they validated only the generated `dist/` tree, never
+the packaged artifact: the `hydra-build` sdist shipped 3 of 8 modules, and the published Java `hydra-kernel`
+jar was a whole [#417](https://github.com/CategoricalData/hydra/issues/417) rename behind. This release adds
+an artifact-level publish-completeness gate that inspects the actual uploaded archive, closing that class of
+defect across all five registries.
+
+### Highlights
+
+- **Artifact-content completeness gate** ([#621](https://github.com/CategoricalData/hydra/issues/621)):
+  every publish path (Hackage sdist, Maven-Java jar, Maven-Scala jar, PyPI wheel, npm tarball) now inspects
+  the *packaged* archive and hard-fails if any module a package's manifest declares is missing. The gate also
+  asserts the post-#417 class names are present in the Java kernel jar.
+
+### Bug fixes
+
+- **PyPI wheels dropped non-`hydra.*` roots** ([#621](https://github.com/CategoricalData/hydra/issues/621)):
+  the wheel packaging hardcoded `packages = ["src/main/python/hydra"]`, silently omitting `hydra-pg`'s
+  `com.gdblab.*` and `openGql.*` modules. The generator now ships every emitted top-level root.
+
+### Improvements
+
+- **CI guard for dist-tree completeness** ([#524](https://github.com/CategoricalData/hydra/issues/524)):
+  asserts every manifest `mainModules` namespace is emitted into `dist/haskell`, catching the 0.17.2
+  `hydra-build` truncation at the tree level (the artifact gate is the packaged-archive counterpart).
+- **Manifest generation extracted** into `Hydra.ManifestGeneration`, and the structurally-unneeded #607
+  sed shims dropped ([#622](https://github.com/CategoricalData/hydra/issues/622)).
+- **Release-verification signing fix** ([#441](https://github.com/CategoricalData/hydra/issues/441)):
+  sign the reproducible uncompressed `.tar` and verify the `.asc` against the GitHub Release asset.
+- **Java CI signing gate** ([#591](https://github.com/CategoricalData/hydra/issues/591)): `publishToMavenLocal`
+  skips gpg signing when no key is present.
+
+### Internal
+
+- Version bump to 0.17.3; `hostVersion` advanced to 0.17.2 and the temporary #417 Java/Python local-host
+  shims removed now that 0.17.2 is published on the registries
+  ([#417](https://github.com/CategoricalData/hydra/issues/417)).
+
 ## [0.17.2] - 2026-07-28
 
 Point release on the 0.17.x line. Themes: promotion of the generator's routing and manifest
diff --git a/hydra-java.cabal b/hydra-java.cabal
--- a/hydra-java.cabal
+++ b/hydra-java.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hydra-java
-version:        0.17.3
+version:        0.17.4
 synopsis:       Hydra's Java coder: emit Java source from Hydra modules
 description:    Hydra is an implementation of the LambdaGraph data model, which takes advantage of an isomorphism between labeled hypergraphs and typed lambda calculus: in Hydra, "graphs are programs, and programs are graphs". Java support for Hydra
 category:       Data
@@ -27,11 +27,9 @@
 
 library
   exposed-modules:
-      Hydra.Decode.Gradle
       Hydra.Dsl.Java.Environment
       Hydra.Dsl.Java.Language
       Hydra.Dsl.Java.Syntax
-      Hydra.Encode.Gradle
       Hydra.Gradle
       Hydra.Java.Coder
       Hydra.Java.Environment
@@ -48,7 +46,7 @@
   build-depends:
       base >=4.19.0 && <4.22
     , containers >=0.6.7 && <0.8
-    , hydra-jvm ==0.17.3
-    , hydra-kernel ==0.17.3
+    , hydra-jvm ==0.17.4
+    , hydra-kernel ==0.17.4
     , scientific >=0.3.7 && <0.4
   default-language: Haskell2010
diff --git a/src/main/haskell/Hydra/Decode/Gradle.hs b/src/main/haskell/Hydra/Decode/Gradle.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Decode/Gradle.hs
+++ /dev/null
@@ -1,56 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | Term decoders for hydra.gradle
-
-module Hydra.Decode.Gradle where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.Decode.File as File
-import qualified Hydra.Decode.Packaging as Packaging
-import qualified Hydra.Errors as Errors
-import qualified Hydra.Extract.Core as ExtractCore
-import qualified Hydra.Gradle as Gradle
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Lexical as Lexical
-import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers
-import qualified Hydra.Rewriting as Rewriting
-import qualified Hydra.Util as Util
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
-import qualified Data.Scientific as Sci
-
--- | Decoder for hydra.gradle.AntlrConfig
-antlrConfig :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Gradle.AntlrConfig
-antlrConfig cx raw =
-    Eithers.either (\err -> Left err) (\stripped -> case stripped of
-      Core.TermRecord v0 ->
-        let fieldMap = ExtractCore.toFieldMap v0
-        in (Eithers.bind (ExtractCore.requireField "arguments" (ExtractCore.decodeList (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of
-          Core.TermLiteral v1 -> case v1 of
-            Core.LiteralString v2 -> Right v2
-            _ -> Left (Errors.DecodingError "expected string literal")
-          _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2))) fieldMap cx) (\field_arguments -> Eithers.bind (ExtractCore.requireField "outputDirectory" File.filePath fieldMap cx) (\field_outputDirectory -> Right (Gradle.AntlrConfig {
-          Gradle.antlrConfigArguments = field_arguments,
-          Gradle.antlrConfigOutputDirectory = field_outputDirectory}))))
-      _ -> Left (Errors.DecodingError "expected a record of type hydra.gradle.AntlrConfig")) (ExtractCore.stripWithDecodingError cx raw)
-
--- | Decoder for hydra.gradle.GradleBuildConfiguration
-gradleBuildConfiguration :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Gradle.GradleBuildConfiguration
-gradleBuildConfiguration cx raw =
-    Eithers.either (\err -> Left err) (\stripped -> case stripped of
-      Core.TermRecord v0 ->
-        let fieldMap = ExtractCore.toFieldMap v0
-        in (Eithers.bind (ExtractCore.requireField "dependencies" (ExtractCore.decodeList Packaging.packageDependency) fieldMap cx) (\field_dependencies -> Eithers.bind (ExtractCore.requireField "excludes" (ExtractCore.decodeList (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of
-          Core.TermLiteral v1 -> case v1 of
-            Core.LiteralString v2 -> Right v2
-            _ -> Left (Errors.DecodingError "expected string literal")
-          _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2))) fieldMap cx) (\field_excludes -> Eithers.bind (ExtractCore.requireField "extraSourceDirs" (ExtractCore.decodeList File.filePath) fieldMap cx) (\field_extraSourceDirs -> Eithers.bind (ExtractCore.requireField "plugins" (ExtractCore.decodeList (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of
-          Core.TermLiteral v1 -> case v1 of
-            Core.LiteralString v2 -> Right v2
-            _ -> Left (Errors.DecodingError "expected string literal")
-          _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2))) fieldMap cx) (\field_plugins -> Eithers.bind (ExtractCore.requireField "antlr" (ExtractCore.decodeMaybe antlrConfig) fieldMap cx) (\field_antlr -> Right (Gradle.GradleBuildConfiguration {
-          Gradle.gradleBuildConfigurationDependencies = field_dependencies,
-          Gradle.gradleBuildConfigurationExcludes = field_excludes,
-          Gradle.gradleBuildConfigurationExtraSourceDirs = field_extraSourceDirs,
-          Gradle.gradleBuildConfigurationPlugins = field_plugins,
-          Gradle.gradleBuildConfigurationAntlr = field_antlr})))))))
-      _ -> Left (Errors.DecodingError "expected a record of type hydra.gradle.GradleBuildConfiguration")) (ExtractCore.stripWithDecodingError cx raw)
diff --git a/src/main/haskell/Hydra/Dsl/Java/Environment.hs b/src/main/haskell/Hydra/Dsl/Java/Environment.hs
--- a/src/main/haskell/Hydra/Dsl/Java/Environment.hs
+++ b/src/main/haskell/Hydra/Dsl/Java/Environment.hs
@@ -5,11 +5,7 @@
 module Hydra.Dsl.Java.Environment where
 
 import qualified Hydra.Core as Core
-import qualified Hydra.Dsl.Core as DslCore
-import qualified Hydra.Dsl.Graph as DslGraph
 import qualified Hydra.Dsl.Java.Syntax as JavaSyntax
-import qualified Hydra.Dsl.Packaging as DslPackaging
-import qualified Hydra.Dsl.Typing as DslTyping
 import qualified Hydra.Graph as Graph
 import qualified Hydra.Java.Environment as Environment
 import qualified Hydra.Java.Syntax as Syntax
diff --git a/src/main/haskell/Hydra/Dsl/Java/Language.hs b/src/main/haskell/Hydra/Dsl/Java/Language.hs
--- a/src/main/haskell/Hydra/Dsl/Java/Language.hs
+++ b/src/main/haskell/Hydra/Dsl/Java/Language.hs
@@ -8,28 +8,6 @@
 import qualified Hydra.Classes as Classes
 import qualified Hydra.Coders as Coders
 import qualified Hydra.Core as Core
-import qualified Hydra.Dsl.Ast as DslAst
-import qualified Hydra.Dsl.Coders as DslCoders
-import qualified Hydra.Dsl.Core as DslCore
-import qualified Hydra.Dsl.Error.Checking as ErrorChecking
-import qualified Hydra.Dsl.Error.Core as DslErrorCore
-import qualified Hydra.Dsl.Error.Packaging as DslErrorPackaging
-import qualified Hydra.Dsl.Errors as DslErrors
-import qualified Hydra.Dsl.Graph as DslGraph
-import qualified Hydra.Dsl.Json.Model as JsonModel
-import qualified Hydra.Dsl.Lexical as DslLexical
-import qualified Hydra.Dsl.Packaging as DslPackaging
-import qualified Hydra.Dsl.Parsing as DslParsing
-import qualified Hydra.Dsl.Paths as DslPaths
-import qualified Hydra.Dsl.Query as DslQuery
-import qualified Hydra.Dsl.Relational as DslRelational
-import qualified Hydra.Dsl.Tabular as DslTabular
-import qualified Hydra.Dsl.Testing as DslTesting
-import qualified Hydra.Dsl.Topology as DslTopology
-import qualified Hydra.Dsl.Typing as DslTyping
-import qualified Hydra.Dsl.Util as DslUtil
-import qualified Hydra.Dsl.Validation as DslValidation
-import qualified Hydra.Dsl.Variants as DslVariants
 import qualified Hydra.Error.Checking as Checking
 import qualified Hydra.Error.Core as ErrorCore
 import qualified Hydra.Error.Packaging as ErrorPackaging
diff --git a/src/main/haskell/Hydra/Dsl/Java/Syntax.hs b/src/main/haskell/Hydra/Dsl/Java/Syntax.hs
--- a/src/main/haskell/Hydra/Dsl/Java/Syntax.hs
+++ b/src/main/haskell/Hydra/Dsl/Java/Syntax.hs
@@ -5,7 +5,6 @@
 module Hydra.Dsl.Java.Syntax where
 
 import qualified Hydra.Core as Core
-import qualified Hydra.Dsl.Core as DslCore
 import qualified Hydra.Java.Syntax as Syntax
 import qualified Hydra.Typed as Typed
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
diff --git a/src/main/haskell/Hydra/Encode/Gradle.hs b/src/main/haskell/Hydra/Encode/Gradle.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Encode/Gradle.hs
+++ /dev/null
@@ -1,49 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | Term encoders for hydra.gradle
-
-module Hydra.Encode.Gradle where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.Encode.File as File
-import qualified Hydra.Encode.Packaging as Packaging
-import qualified Hydra.Gradle as Gradle
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
-import qualified Data.Scientific as Sci
-
--- | Encoder for hydra.gradle.AntlrConfig
-antlrConfig :: Gradle.AntlrConfig -> Core.Term
-antlrConfig x =
-    Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.gradle.AntlrConfig"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\x2 -> Core.TermLiteral (Core.LiteralString x2)) xs)) (Gradle.antlrConfigArguments x))},
-        Core.Field {
-          Core.fieldName = (Core.Name "outputDirectory"),
-          Core.fieldTerm = (File.filePath (Gradle.antlrConfigOutputDirectory x))}]})
-
--- | Encoder for hydra.gradle.GradleBuildConfiguration
-gradleBuildConfiguration :: Gradle.GradleBuildConfiguration -> Core.Term
-gradleBuildConfiguration x =
-    Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.gradle.GradleBuildConfiguration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "dependencies"),
-          Core.fieldTerm = ((\xs -> Core.TermList (Lists.map Packaging.packageDependency xs)) (Gradle.gradleBuildConfigurationDependencies x))},
-        Core.Field {
-          Core.fieldName = (Core.Name "excludes"),
-          Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\x2 -> Core.TermLiteral (Core.LiteralString x2)) xs)) (Gradle.gradleBuildConfigurationExcludes x))},
-        Core.Field {
-          Core.fieldName = (Core.Name "extraSourceDirs"),
-          Core.fieldTerm = ((\xs -> Core.TermList (Lists.map File.filePath xs)) (Gradle.gradleBuildConfigurationExtraSourceDirs x))},
-        Core.Field {
-          Core.fieldName = (Core.Name "plugins"),
-          Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\x2 -> Core.TermLiteral (Core.LiteralString x2)) xs)) (Gradle.gradleBuildConfigurationPlugins x))},
-        Core.Field {
-          Core.fieldName = (Core.Name "antlr"),
-          Core.fieldTerm = ((\opt -> Core.TermOptional (Optionals.map antlrConfig opt)) (Gradle.gradleBuildConfigurationAntlr x))}]})
diff --git a/src/main/haskell/Hydra/Java/Coder.hs b/src/main/haskell/Hydra/Java/Coder.hs
--- a/src/main/haskell/Hydra/Java/Coder.hs
+++ b/src/main/haskell/Hydra/Java/Coder.hs
@@ -1162,10 +1162,10 @@
           _ -> defaultExpr ()
       _ -> Eithers.bind (encodeTerm env lhs cx g) (\jfun -> Eithers.bind (encodeTerm env rhs cx g) (\jarg -> Right (applyJavaArg jfun jarg)))))
 
-encodeDefinitions :: Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map Core.Name Syntax.CompilationUnit)
-encodeDefinitions mod defs cx g =
+encodeDefinitions :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map Core.Name Syntax.CompilationUnit)
+encodeDefinitions overlaySubs mod defs cx g =
 
-      let aliases = Utils.importAliasesForModule mod
+      let aliases = Utils.importAliasesForModule overlaySubs mod
           env =
                   JavaEnvironment.JavaEnvironment {
                     JavaEnvironment.javaEnvironmentAliases = aliases,
@@ -2438,9 +2438,9 @@
 lazyFlagsForPrimitive g name =
     Optionals.cases (Maps.lookup name (Graph.graphPrimitives g)) [] (\prim -> Lists.map (\p -> Typing.parameterIsLazy p) (Typing.termSignatureParameters (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))))
 
-moduleToJava :: Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)
-moduleToJava mod defs cx g =
-    Eithers.bind (encodeDefinitions mod defs cx g) (\units -> Right (Maps.fromList (Lists.map (\entry ->
+moduleToJava :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)
+moduleToJava overlaySubs mod defs cx g =
+    Eithers.bind (encodeDefinitions overlaySubs mod defs cx g) (\units -> Right (Maps.fromList (Lists.map (\entry ->
       let name = Pairs.first entry
           unit = Pairs.second entry
       in (bindingNameToFilePath name, (Serialization.printExpr (Serialization.parenthesize (Serde.compilationUnitToExpr unit))))) (Maps.toList units))))
diff --git a/src/main/haskell/Hydra/Java/Utils.hs b/src/main/haskell/Hydra/Java/Utils.hs
--- a/src/main/haskell/Hydra/Java/Utils.hs
+++ b/src/main/haskell/Hydra/Java/Utils.hs
@@ -49,6 +49,7 @@
 import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
 import qualified Data.Scientific as Sci
 import qualified Data.Map as M
+import qualified Data.Set as S
 
 addExpressions :: [Syntax.MultiplicativeExpression] -> Syntax.AdditiveExpression
 addExpressions exprs =
@@ -151,11 +152,11 @@
       Syntax.localVariableDeclarationDeclarators = [
         javaVariableDeclarator id (Just (Syntax.VariableInitializerExpression rhs))]}))
 
-importAliasesForModule :: Packaging.Module -> Environment.Aliases
-importAliasesForModule mod =
+importAliasesForModule :: S.Set String -> Packaging.Module -> Environment.Aliases
+importAliasesForModule overlaySubs mod =
     Environment.Aliases {
       Environment.aliasesCurrentNamespace = (Packaging.moduleName mod),
-      Environment.aliasesPackages = overlayJavaLibPackageAliases,
+      Environment.aliasesPackages = (overlayJavaLibPackageAliases overlaySubs),
       Environment.aliasesBranchVars = Sets.empty,
       Environment.aliasesRecursiveVars = Sets.empty,
       Environment.aliasesInScopeTypeParams = Sets.empty,
@@ -867,169 +868,40 @@
                   javaTypeIdentifier (Optionals.cases mlocal (sanitizeJavaName local) (\l -> Strings.concat2 (Strings.concat2 (sanitizeJavaName local) ".") (sanitizeJavaName l)))
       in (jid, pkg)
 
-overlayJavaLibPackageAliases :: M.Map Packaging.ModuleName Syntax.PackageName
-overlayJavaLibPackageAliases =
-    Maps.fromList [
-      (
-        Packaging.ModuleName "hydra.lib.chars",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "chars"])),
-      (
-        Packaging.ModuleName "hydra.lib.effects",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "effects"])),
-      (
-        Packaging.ModuleName "hydra.lib.eithers",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "eithers"])),
-      (
-        Packaging.ModuleName "hydra.lib.equality",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "equality"])),
-      (
-        Packaging.ModuleName "hydra.lib.files",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "files"])),
-      (
-        Packaging.ModuleName "hydra.lib.functions",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "functions"])),
-      (
-        Packaging.ModuleName "hydra.lib.hashing",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "hashing"])),
-      (
-        Packaging.ModuleName "hydra.lib.lists",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "lists"])),
-      (
-        Packaging.ModuleName "hydra.lib.literals",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "literals"])),
-      (
-        Packaging.ModuleName "hydra.lib.logic",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "logic"])),
-      (
-        Packaging.ModuleName "hydra.lib.maps",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "maps"])),
-      (
-        Packaging.ModuleName "hydra.lib.math",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "math"])),
-      (
-        Packaging.ModuleName "hydra.lib.optionals",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "optionals"])),
-      (
-        Packaging.ModuleName "hydra.lib.ordering",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "ordering"])),
-      (
-        Packaging.ModuleName "hydra.lib.pairs",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "pairs"])),
-      (
-        Packaging.ModuleName "hydra.lib.regex",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "regex"])),
-      (
-        Packaging.ModuleName "hydra.lib.sets",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "sets"])),
-      (
-        Packaging.ModuleName "hydra.lib.strings",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "strings"])),
-      (
-        Packaging.ModuleName "hydra.lib.system",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "system"])),
-      (
-        Packaging.ModuleName "hydra.lib.text",
-        (JavaNames.javaPackageName [
-          "hydra",
-          "overlay",
-          "java",
-          "lib",
-          "text"]))]
+overlayJavaLibPackageAliases :: S.Set String -> M.Map Packaging.ModuleName Syntax.PackageName
+overlayJavaLibPackageAliases overlaySubs =
+    Maps.fromList (Lists.map (\sub -> overlayLibPairFor sub) (Lists.filter (\sub -> Sets.member sub overlaySubs) [
+      "chars",
+      "effects",
+      "eithers",
+      "equality",
+      "files",
+      "functions",
+      "hashing",
+      "lists",
+      "literals",
+      "logic",
+      "maps",
+      "math",
+      "optionals",
+      "ordering",
+      "pairs",
+      "regex",
+      "sets",
+      "strings",
+      "system",
+      "text"]))
+
+overlayLibPairFor :: String -> (Packaging.ModuleName, Syntax.PackageName)
+overlayLibPairFor sub =
+    (
+      Packaging.ModuleName (Strings.concat2 "hydra.lib." sub),
+      (JavaNames.javaPackageName (Lists.concat2 [
+        "hydra",
+        "overlay",
+        "java",
+        "lib"] [
+        sub])))
 
 overrideAnnotation :: Syntax.Annotation
 overrideAnnotation = Syntax.AnnotationMarker (Syntax.MarkerAnnotation (javaTypeName (Syntax.Identifier "Override")))
