You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/03/15 14:29:02 UTC

[causeway] 01/01: CAUSEWAY-3377: updates tagger, rationalizes some framework logical type names

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch CAUSEWAY-3377
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 90da43c2402c983a50121e5e1c34fce3d7cdd3f0
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Mar 15 14:28:49 2023 +0000

    CAUSEWAY-3377: updates tagger, rationalizes some framework logical type names
---
 .../causeway/applib/CausewayModuleApplib.java      |  1 +
 .../services/metamodel/MetaModelServiceMenu.java   | 23 ++++----
 .../causeway/applib/value/LocalResourcePath.java   |  4 +-
 .../causeway/schema/CausewayModuleSchema.java      |  1 +
 .../interaction/CausewayModuleCoreInteraction.java |  1 +
 ...teractionAwareTransactionalBoundaryHandler.java |  5 +-
 .../metamodel/CausewayModuleCoreMetamodel.java     |  1 +
 .../core/metamodel/inspect/model/ActionNode.java   |  2 +-
 .../metamodel/inspect/model/CollectionNode.java    |  2 +-
 .../metamodel/inspect/model/FacetAttrNode.java     |  2 +-
 .../core/metamodel/inspect/model/FacetNode.java    |  2 +-
 .../metamodel/services/ServiceInjectorDefault.java |  4 +-
 .../ApplicationFeatureIdValueSemantics.java        |  2 +-
 .../valuesemantics/BigDecimalValueSemantics.java   |  2 +-
 .../valuesemantics/BigIntegerValueSemantics.java   |  2 +-
 .../valuesemantics/BlobValueSemantics.java         |  2 +-
 .../valuesemantics/BookmarkValueSemantics.java     |  2 +-
 .../valuesemantics/BooleanValueSemantics.java      |  2 +-
 .../BufferedImageValueSemantics.java               |  2 +-
 .../valuesemantics/ByteValueSemantics.java         |  2 +-
 .../valuesemantics/ChangesDtoValueSemantics.java   |  2 +-
 .../valuesemantics/CharacterValueSemantics.java    |  2 +-
 .../valuesemantics/ClobValueSemantics.java         |  2 +-
 .../valuesemantics/CommandDtoValueSemantics.java   |  2 +-
 .../valuesemantics/DoubleValueSemantics.java       |  2 +-
 .../valuesemantics/FloatValueSemantics.java        |  2 +-
 .../IdStringifierForSerializable.java              |  2 +-
 .../valuesemantics/IntValueSemantics.java          |  2 +-
 .../InteractionDtoValueSemantics.java              |  2 +-
 .../LocalResourcePathValueSemantics.java           |  2 +-
 .../valuesemantics/LocaleValueSemantics.java       |  2 +-
 .../valuesemantics/LongValueSemantics.java         |  2 +-
 .../valuesemantics/MarkupValueSemantics.java       |  2 +-
 .../valuesemantics/OidDtoValueSemantics.java       |  6 ++-
 .../valuesemantics/PasswordValueSemantics.java     |  2 +-
 .../valuesemantics/ShortValueSemantics.java        |  2 +-
 .../valuesemantics/StringValueSemantics.java       |  2 +-
 .../valuesemantics/TreeNodeValueSemantics.java     |  2 +-
 .../valuesemantics/URLValueSemantics.java          |  2 +-
 .../valuesemantics/UUIDValueSemantics.java         |  2 +-
 .../temporal/LocalDateTimeValueSemantics.java      |  2 +-
 .../temporal/LocalDateValueSemantics.java          |  2 +-
 .../temporal/LocalTimeValueSemantics.java          |  2 +-
 .../temporal/OffsetDateTimeValueSemantics.java     |  2 +-
 .../temporal/OffsetTimeValueSemantics.java         |  2 +-
 .../temporal/ZonedDateTimeValueSemantics.java      |  2 +-
 .../temporal/legacy/JavaSqlDateValueSemantics.java |  2 +-
 .../legacy/JavaSqlTimeStampValueSemantics.java     |  2 +-
 .../temporal/legacy/JavaSqlTimeValueSemantics.java |  2 +-
 .../legacy/JavaUtilDateValueSemantics.java         |  2 +-
 .../runtimeservices/spring/SpringBeansService.java |  3 +-
 .../runtimeservices/xml/XmlServiceDefault.java     |  5 +-
 .../manager/AuthenticationManager.java             |  5 +-
 .../standard/RandomCodeGeneratorDefault.java       |  5 +-
 .../manager/AuthorizationManager.java              |  5 +-
 .../transaction/CausewayModuleCoreTransaction.java |  1 +
 .../changetracking/events/TimestampService.java    |  5 +-
 .../CausewayConfigurationRoleAndPermissions.java   |  4 +-
 ...werRestfulObjectsSwaggerRoleAndPermissions.java |  2 +-
 .../dom/ApplicationUserRepositoryAbstract.java     |  2 +-
 .../dom/mixins/ApplicationUser_updatePassword.java |  2 +-
 .../realm/CausewayModuleExtSecmanShiroRealm.java   |  2 +-
 .../services/PasswordEncoderUsingJBcrypt.java      |  2 +-
 .../CausewayModuleExtSecmanEncryptionSpring.java   |  2 +-
 .../authenticator/AuthenticatorSecman.java         |  2 +-
 .../AuthenticatorSecmanAutoConfiguration.java      |  5 +-
 .../spiimpl/ImpersonateMenuAdvisorForSecman.java   |  2 +-
 .../userreg/UserRegistrationServiceForSecman.java  |  2 +-
 .../sse/wicket/CausewayModuleExtSseWicket.java     |  2 +
 .../sse/wicket/services/SseServiceDefault.java     | 35 +++++-------
 .../webmodule/WebModuleServerSentEvents.java       |  5 +-
 .../bypass/CausewayModuleSecurityBypass.java       |  2 +
 .../bypass/authentication/AuthenticatorBypass.java |  5 +-
 .../bypass/authorization/AuthorizorBypass.java     |  5 +-
 .../spring/CausewayModuleSecuritySpring.java       |  2 +
 .../spring/authentication/AuthenticatorSpring.java |  5 +-
 .../spring/webmodule/WebModuleSpringSecurity.java  |  5 +-
 .../fakedata/applib/services/FakeDataService.java  |  2 +-
 .../CausewayModuleValJodatimeIntegration.java      |  3 ++
 .../valuesemantics/JodaDateTimeValueSemantics.java |  5 +-
 .../JodaLocalDateTimeValueSemantics.java           |  5 +-
 .../JodaLocalDateValueSemantics.java               |  5 +-
 .../JodaLocalTimeValueSemantics.java               |  5 +-
 .../service/swagger/internal/TaggerDefault.java    | 62 +++++++++++++++++-----
 .../swagger/internal/_OpenApiModelFactory.java     |  2 +-
 85 files changed, 220 insertions(+), 119 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/causeway/applib/CausewayModuleApplib.java b/api/applib/src/main/java/org/apache/causeway/applib/CausewayModuleApplib.java
index 028b920a9d..0ae030b2c1 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/CausewayModuleApplib.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/CausewayModuleApplib.java
@@ -120,6 +120,7 @@ public class CausewayModuleApplib {
     public static final String NAMESPACE_CONF = "causeway.conf";    // for configuration; to minimize the risk of granting perms accidentally
     public static final String NAMESPACE_SUDO = "causeway.sudo";    // for impersonation
     public static final String NAMESPACE_FEAT = "causeway.feat";    // for app features
+    public static final String NAMESPACE_VALUE = "causeway.value";
 
     // -- UI EVENT CLASSES
 
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java b/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
index f0b26c4cba..65fd60b937 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/services/metamodel/MetaModelServiceMenu.java
@@ -128,6 +128,9 @@ public class MetaModelServiceMenu {
                 @ParameterLayout(named = "file name (does not require an extension)")
                 final String fileName,
 
+                @Parameter
+                final boolean includeFrameworkNamespaces,
+
                 @ParameterLayout(named = "Namespaces",
                         describedAs="Subset of the complete meta model, only including namespaces starting with given prefix")
                 final List<String> namespaces,
@@ -231,8 +234,8 @@ public class MetaModelServiceMenu {
 
                 @ParameterLayout(named="Metamodel (Zipped XML)",
                         describedAs="Metamodel from a previous export, to compare the current with.")
-                @Parameter(fileAccept=".zip", optionality = Optionality.MANDATORY) final
-                        Blob zippedMetamodelBlob
+                @Parameter(fileAccept=".zip", optionality = Optionality.MANDATORY)
+                final Blob zippedMetamodelBlob
 
         ) throws IOException {
 
@@ -293,14 +296,14 @@ public class MetaModelServiceMenu {
     }
 
     private List<String> namespaceChoices() {
-        final DomainModel domainModel = metaModelService.getDomainModel();
-        final List<DomainMember> export = domainModel.getDomainMembers();
-        final SortedSet<String> namespaces = _Sets.newTreeSet();
-        for (final DomainMember domainMember : export) {
-            final String namespace = domainMember.getNamespace();
-            final String[] split = namespace.split("[.]");
-            final StringBuilder buf = new StringBuilder();
-            for (final String part : split) {
+        val domainModel = metaModelService.getDomainModel();
+        val domainMembers = domainModel.getDomainMembers();
+        val namespaces = _Sets.<String>newTreeSet();
+        for (val domainMember : domainMembers) {
+            val namespace = domainMember.getNamespace();
+            val namespaceParts = namespace.split("[.]");
+            val buf = new StringBuilder();
+            for (val part : namespaceParts) {
                 if(buf.length() > 0) {
                     buf.append(".");
                 }
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java b/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
index a460c5204a..ac3b5f538b 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/value/LocalResourcePath.java
@@ -52,11 +52,13 @@ import lombok.NonNull;
  * @since 2.0 {@index}
  * @see OpenUrlStrategy
  */
-@Named(CausewayModuleApplib.NAMESPACE + ".value.LocalResourcePath")
+@Named(LocalResourcePath.LOGICAL_TYPE_NAME)
 @Value
 @XmlJavaTypeAdapter(LocalResourcePath.JaxbToStringAdapter.class)   // for JAXB view model support
 public final class LocalResourcePath implements Serializable {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".value.LocalResourcePath";
+
     private static final long serialVersionUID = 1L;
     @NonNull private final String path;
     @Getter @NonNull private final OpenUrlStrategy openUrlStrategy;
diff --git a/api/schema/src/main/java/org/apache/causeway/schema/CausewayModuleSchema.java b/api/schema/src/main/java/org/apache/causeway/schema/CausewayModuleSchema.java
index 587390d5c0..a1e8cfac1e 100644
--- a/api/schema/src/main/java/org/apache/causeway/schema/CausewayModuleSchema.java
+++ b/api/schema/src/main/java/org/apache/causeway/schema/CausewayModuleSchema.java
@@ -26,4 +26,5 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class CausewayModuleSchema {
 
+    public static final String NAMESPACE = "causeway.schema";
 }
diff --git a/core/interaction/src/main/java/org/apache/causeway/core/interaction/CausewayModuleCoreInteraction.java b/core/interaction/src/main/java/org/apache/causeway/core/interaction/CausewayModuleCoreInteraction.java
index 59aa11d27b..c915622590 100644
--- a/core/interaction/src/main/java/org/apache/causeway/core/interaction/CausewayModuleCoreInteraction.java
+++ b/core/interaction/src/main/java/org/apache/causeway/core/interaction/CausewayModuleCoreInteraction.java
@@ -33,5 +33,6 @@ import org.apache.causeway.core.interaction.scope.InteractionScopeBeanFactoryPos
 })
 public class CausewayModuleCoreInteraction {
 
+    public static final String NAMESPACE = "causeway.interaction";
 
 }
diff --git a/core/interaction/src/main/java/org/apache/causeway/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java b/core/interaction/src/main/java/org/apache/causeway/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
index 29bdd3c6f9..d5164556c8 100644
--- a/core/interaction/src/main/java/org/apache/causeway/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
+++ b/core/interaction/src/main/java/org/apache/causeway/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
@@ -26,6 +26,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.core.interaction.CausewayModuleCoreInteraction;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.PlatformTransactionManager;
@@ -47,12 +48,14 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@Named("causeway.interaction.InteractionAwareTransactionalBoundaryHandler")
+@Named(InteractionAwareTransactionalBoundaryHandler.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 @Log4j2
 public class InteractionAwareTransactionalBoundaryHandler {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreInteraction.NAMESPACE + ".InteractionAwareTransactionalBoundaryHandler";
+
     private final Can<PlatformTransactionManager> txManagers;
 
     @Inject
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/CausewayModuleCoreMetamodel.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/CausewayModuleCoreMetamodel.java
index 03b9920e10..6be7eac695 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/CausewayModuleCoreMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/CausewayModuleCoreMetamodel.java
@@ -203,6 +203,7 @@ import lombok.NonNull;
 public class CausewayModuleCoreMetamodel {
 
     public static final String NAMESPACE = "causeway.metamodel";
+    public static final String NAMESPACE_VALUE = NAMESPACE + ".value";
 
     @FunctionalInterface
     public static interface PreloadableTypes {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/ActionNode.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/ActionNode.java
index 7b11ef529e..ced26420ab 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/ActionNode.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/ActionNode.java
@@ -50,7 +50,7 @@ import lombok.val;
 @ToString
 public class ActionNode extends MemberNode {
 
-    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".ActionNode";
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".node.ActionNode";
 
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Action action;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/CollectionNode.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/CollectionNode.java
index 5d0ffc8d12..977a37059e 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/CollectionNode.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/CollectionNode.java
@@ -48,7 +48,7 @@ import lombok.val;
 @ToString
 public class CollectionNode extends MemberNode {
 
-    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".CollectionNode";
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".node.CollectionNode";
 
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Collection collection;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetAttrNode.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetAttrNode.java
index abdc623b77..17e54856d3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetAttrNode.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetAttrNode.java
@@ -49,7 +49,7 @@ import lombok.ToString;
 @ToString
 public class FacetAttrNode extends MMNode {
 
-    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".FacetAttrNode";
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".node.FacetAttrNode";
 
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private FacetAttr facetAttr;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetNode.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetNode.java
index 0c2d4bde1c..bf1c45e955 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetNode.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/inspect/model/FacetNode.java
@@ -53,7 +53,7 @@ import lombok.val;
 @ToString
 public class FacetNode extends MMNode {
 
-    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".FacetNode";
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleApplib.NAMESPACE + ".node.FacetNode";
 
     @Property(hidden = Where.EVERYWHERE)
     @Getter @Setter private Facet facet;
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/ServiceInjectorDefault.java
index e430a8675b..69f9388d1d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/ServiceInjectorDefault.java
@@ -42,12 +42,14 @@ import lombok.val;
  *
  */
 @Service
-@Named(CausewayModuleCoreMetamodel.NAMESPACE + ".ServiceInjectorDefault")
+@Named(ServiceInjectorDefault.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.EARLY)
 @Qualifier("Default")
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ServiceInjectorDefault implements ServiceInjector {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreMetamodel.NAMESPACE + ".ServiceInjectorDefault";
+
     private final AutowireCapableBeanFactory autowireCapableBeanFactory;
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java
index 8a18b56d42..0ace27a19f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java
@@ -37,7 +37,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import lombok.val;
 
 @Component
-@Named("causeway.val.ApplicationFeatureIdValueSemantics")
+@Named("causeway.metamodel.value.ApplicationFeatureIdValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class ApplicationFeatureIdValueSemantics
 extends ValueSemanticsAbstract<ApplicationFeatureId>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
index bb7f690f1e..4b8e51a32b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigDecimalValueSemantics.java
@@ -47,7 +47,7 @@ import lombok.Setter;
 import lombok.val;
 
 @Component
-@Named("causeway.val.BigDecimalValueSemantics")
+@Named("causeway.metamodel.value.BigDecimalValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class BigDecimalValueSemantics
 extends ValueSemanticsAbstract<BigDecimal>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
index dddc5b1160..483468846f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BigIntegerValueSemantics.java
@@ -40,7 +40,7 @@ import org.apache.causeway.schema.common.v2.ValueWithTypeDto;
 import lombok.NonNull;
 
 @Component
-@Named("causeway.val.BigIntegerValueSemantics")
+@Named("causeway.metamodel.value.BigIntegerValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class BigIntegerValueSemantics
 extends ValueSemanticsAbstract<BigInteger>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
index 44fc526414..08f3126842 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BlobValueSemantics.java
@@ -37,7 +37,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.BlobValueSemantics")
+@Named("causeway.metamodel.value.BlobValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class BlobValueSemantics
 extends ValueSemanticsAbstract<Blob>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BookmarkValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BookmarkValueSemantics.java
index d5bcc82e5e..c550f0e835 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BookmarkValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BookmarkValueSemantics.java
@@ -38,7 +38,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import lombok.val;
 
 @Component
-@Named("causeway.val.BookmarkValueSemantics")
+@Named("causeway.metamodel.value.BookmarkValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class BookmarkValueSemantics
 extends ValueSemanticsAbstract<Bookmark>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BooleanValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BooleanValueSemantics.java
index 8f20afd2f0..edc8aac0d3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BooleanValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BooleanValueSemantics.java
@@ -44,7 +44,7 @@ import lombok.val;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.BooleanValueSemantics")
+@Named("causeway.metamodel.value.BooleanValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class BooleanValueSemantics
 extends ValueSemanticsAbstract<Boolean>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
index 6c2d1fb65b..7bdfc017c2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/BufferedImageValueSemantics.java
@@ -42,7 +42,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import org.apache.causeway.schema.common.v2.ValueWithTypeDto;
 
 @Component
-@Named("causeway.val.BufferedImageValueSemantics")
+@Named("causeway.metamodel.value.BufferedImageValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class BufferedImageValueSemantics
 extends ValueSemanticsAbstract<BufferedImage>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ByteValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ByteValueSemantics.java
index de6954acbd..40f9b4346b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ByteValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ByteValueSemantics.java
@@ -46,7 +46,7 @@ import lombok.val;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.ByteValueSemantics")
+@Named("causeway.metamodel.value.ByteValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class ByteValueSemantics
 extends ValueSemanticsAbstract<Byte>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ChangesDtoValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ChangesDtoValueSemantics.java
index 3ab56e3a6e..85cfa4c38b 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ChangesDtoValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ChangesDtoValueSemantics.java
@@ -29,7 +29,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.schema.chg.v2.ChangesDto;
 
 @Component
-@Named("causeway.val.ChangesDtoValueSemantics")
+@Named("causeway.metamodel.value.ChangesDtoValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class ChangesDtoValueSemantics
 extends XmlValueSemanticsAbstract<ChangesDto> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CharacterValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CharacterValueSemantics.java
index b903d7f7cf..f2be09b592 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CharacterValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CharacterValueSemantics.java
@@ -48,7 +48,7 @@ import lombok.val;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.CharacterValueSemantics")
+@Named("causeway.metamodel.value.CharacterValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class CharacterValueSemantics
 extends ValueSemanticsAbstract<Character>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ClobValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ClobValueSemantics.java
index ec79f600bd..5dc3795146 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ClobValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ClobValueSemantics.java
@@ -37,7 +37,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.ClobValueSemantics")
+@Named("causeway.metamodel.value.ClobValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class ClobValueSemantics
 extends ValueSemanticsAbstract<Clob>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CommandDtoValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CommandDtoValueSemantics.java
index 860be546f4..b16d69e391 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CommandDtoValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/CommandDtoValueSemantics.java
@@ -29,7 +29,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.schema.cmd.v2.CommandDto;
 
 @Component
-@Named("causeway.val.CommandDtoValueSemantics")
+@Named("causeway.metamodel.value.CommandDtoValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class CommandDtoValueSemantics
 extends XmlValueSemanticsAbstract<CommandDto> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/DoubleValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/DoubleValueSemantics.java
index 156485159a..8eccd6ddda 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/DoubleValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/DoubleValueSemantics.java
@@ -40,7 +40,7 @@ import org.apache.causeway.schema.common.v2.ValueWithTypeDto;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.DoubleValueSemantics")
+@Named("causeway.metamodel.value.DoubleValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class DoubleValueSemantics
 extends ValueSemanticsAbstract<Double>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/FloatValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/FloatValueSemantics.java
index d8def994ac..7dc81d1660 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/FloatValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/FloatValueSemantics.java
@@ -40,7 +40,7 @@ import org.apache.causeway.schema.common.v2.ValueWithTypeDto;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.FloatValueSemantics")
+@Named("causeway.metamodel.value.FloatValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class FloatValueSemantics
 extends ValueSemanticsAbstract<Float>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdStringifierForSerializable.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdStringifierForSerializable.java
index b2db967657..dafa7a82f8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdStringifierForSerializable.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IdStringifierForSerializable.java
@@ -40,7 +40,7 @@ import lombok.NonNull;
  * is available to handle the corresponding value type.
  */
 @Component
-@Named("causeway.val.IdStringifierForSerializable")
+@Named("causeway.metamodel.value.IdStringifierForSerializable")
 @Priority(PriorityPrecedence.LAST)
 public class IdStringifierForSerializable
 implements
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IntValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IntValueSemantics.java
index 0a69d1a493..0b1edc0dce 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IntValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/IntValueSemantics.java
@@ -46,7 +46,7 @@ import lombok.val;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.IntValueSemantics")
+@Named("causeway.metamodel.value.IntValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class IntValueSemantics
 extends ValueSemanticsAbstract<Integer>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/InteractionDtoValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/InteractionDtoValueSemantics.java
index 5b3b168d26..e8978b1c63 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/InteractionDtoValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/InteractionDtoValueSemantics.java
@@ -29,7 +29,7 @@ import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.schema.ixn.v2.InteractionDto;
 
 @Component
-@Named("causeway.val.InteractionDtoValueSemantics")
+@Named("causeway.metamodel.value.InteractionDtoValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class InteractionDtoValueSemantics
 extends XmlValueSemanticsAbstract<InteractionDto> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocalResourcePathValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocalResourcePathValueSemantics.java
index de4a9630fb..ac5bb45f24 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocalResourcePathValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocalResourcePathValueSemantics.java
@@ -38,7 +38,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import lombok.val;
 
 @Component
-@Named("causeway.val.LocalResourcePathValueSemantics")
+@Named("causeway.metamodel.value.LocalResourcePathValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class LocalResourcePathValueSemantics
 extends ValueSemanticsAbstract<LocalResourcePath>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocaleValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocaleValueSemantics.java
index 13086b2738..bdd33fbd8f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocaleValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LocaleValueSemantics.java
@@ -39,7 +39,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import lombok.val;
 
 @Component
-@Named("causeway.val.LocaleValueSemantics")
+@Named("causeway.metamodel.value.LocaleValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class LocaleValueSemantics
 extends ValueSemanticsAbstract<Locale>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LongValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LongValueSemantics.java
index ffce139e13..fcf82e0428 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LongValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/LongValueSemantics.java
@@ -46,7 +46,7 @@ import lombok.val;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.LongValueSemantics")
+@Named("causeway.metamodel.value.LongValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class LongValueSemantics
 extends ValueSemanticsAbstract<Long>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/MarkupValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/MarkupValueSemantics.java
index bce3d71a63..482387eba5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/MarkupValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/MarkupValueSemantics.java
@@ -35,7 +35,7 @@ import org.apache.causeway.commons.internal.hardening._Hardening;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.MarkupValueSemantics")
+@Named("causeway.metamodel.value.MarkupValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class MarkupValueSemantics
 extends ValueSemanticsAbstract<Markup>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/OidDtoValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/OidDtoValueSemantics.java
index 4393e080b8..f6e63ba8e5 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/OidDtoValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/OidDtoValueSemantics.java
@@ -22,6 +22,8 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.applib.CausewayModuleApplib;
+import org.apache.causeway.core.metamodel.CausewayModuleCoreMetamodel;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
@@ -32,11 +34,13 @@ import org.apache.causeway.core.metamodel.valuetypes.ValueSemanticsAdapter;
 import org.apache.causeway.schema.common.v2.OidDto;
 
 @Component
-@Named("causeway.val.OidDtoValueSemantics")
+@Named(OidDtoValueSemantics.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.LATE)
 public class OidDtoValueSemantics
 extends ValueSemanticsAdapter<OidDto, Bookmark, Void> {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreMetamodel.NAMESPACE_VALUE + ".OidDtoValueSemantics";
+
     @Inject BookmarkValueSemantics bookmarkValueSemantics;
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/PasswordValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/PasswordValueSemantics.java
index 0a440e2b98..bb34371e79 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/PasswordValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/PasswordValueSemantics.java
@@ -36,7 +36,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import org.apache.causeway.schema.common.v2.ValueWithTypeDto;
 
 @Component
-@Named("causeway.val.PasswordValueSemantics")
+@Named("causeway.metamodel.value.PasswordValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class PasswordValueSemantics
 extends ValueSemanticsAbstract<Password>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ShortValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ShortValueSemantics.java
index 29e39a10e5..b29f4d641d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ShortValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/ShortValueSemantics.java
@@ -46,7 +46,7 @@ import lombok.val;
  * due to auto-boxing also handles the primitive variant
  */
 @Component
-@Named("causeway.val.ShortValueSemantics")
+@Named("causeway.metamodel.value.ShortValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class ShortValueSemantics
 extends ValueSemanticsAbstract<Short>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/StringValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/StringValueSemantics.java
index ae1730861e..e2d1afe459 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/StringValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/StringValueSemantics.java
@@ -40,7 +40,7 @@ import org.apache.causeway.schema.common.v2.ValueType;
 import lombok.NonNull;
 
 @Component
-@Named("causeway.val.StringValueSemantics")
+@Named("causeway.metamodel.value.StringValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class StringValueSemantics
 extends ValueSemanticsAbstract<String>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/TreeNodeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/TreeNodeValueSemantics.java
index c2bd61d46a..57cbc18d90 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/TreeNodeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/TreeNodeValueSemantics.java
@@ -43,7 +43,7 @@ import org.apache.causeway.commons.internal.memento._Mementos.SerializingAdapter
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.TreeNodeValueSemantics")
+@Named("causeway.metamodel.value.TreeNodeValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class TreeNodeValueSemantics
 extends ValueSemanticsAbstract<TreeNode<?>>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
index a4dbc45c80..5886cf335f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/URLValueSemantics.java
@@ -41,7 +41,7 @@ import lombok.SneakyThrows;
 import lombok.val;
 
 @Component
-@Named("causeway.val.URLValueSemantics")
+@Named("causeway.metamodel.value.URLValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class URLValueSemantics
 extends ValueSemanticsAbstract<java.net.URL>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/UUIDValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/UUIDValueSemantics.java
index 04040513b3..a3854cc896 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/UUIDValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/UUIDValueSemantics.java
@@ -40,7 +40,7 @@ import lombok.NonNull;
 import lombok.val;
 
 @Component
-@Named("causeway.val.UUIDValueSemantics")
+@Named("causeway.metamodel.value.UUIDValueSemantics")
 @Priority(PriorityPrecedence.LATE)
 public class UUIDValueSemantics
 extends ValueSemanticsAbstract<UUID>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateTimeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateTimeValueSemantics.java
index dad75d3b09..dada946973 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateTimeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateTimeValueSemantics.java
@@ -31,7 +31,7 @@ import org.apache.causeway.commons.internal.base._Temporals;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.LocalDateTimeValueSemantics")
+@Named("causeway.metamodel.value.LocalDateTimeValueSemantics")
 //@Log4j2
 public class LocalDateTimeValueSemantics
 extends TemporalValueSemanticsProvider<LocalDateTime>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateValueSemantics.java
index 558a34f396..674f472e70 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalDateValueSemantics.java
@@ -31,7 +31,7 @@ import org.apache.causeway.commons.internal.base._Temporals;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.LocalDateValueSemantics")
+@Named("causeway.metamodel.value.LocalDateValueSemantics")
 //@Log4j2
 public class LocalDateValueSemantics
 extends TemporalValueSemanticsProvider<LocalDate>
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalTimeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalTimeValueSemantics.java
index 5c9cf5bc9a..f9b27980d2 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalTimeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/LocalTimeValueSemantics.java
@@ -30,7 +30,7 @@ import org.apache.causeway.commons.internal.base._Temporals;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.LocalTimeValueSemantics")
+@Named("causeway.metamodel.value.LocalTimeValueSemantics")
 //@Log4j2
 public class LocalTimeValueSemantics
 extends TemporalValueSemanticsProvider<LocalTime> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetDateTimeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetDateTimeValueSemantics.java
index cf2815b758..6abed17061 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetDateTimeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetDateTimeValueSemantics.java
@@ -30,7 +30,7 @@ import org.apache.causeway.commons.internal.base._Temporals;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.OffsetDateTimeValueSemantics")
+@Named("causeway.metamodel.value.OffsetDateTimeValueSemantics")
 //@Log4j2
 public class OffsetDateTimeValueSemantics
 extends TemporalValueSemanticsProvider<OffsetDateTime> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetTimeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetTimeValueSemantics.java
index fd51232454..4a4b7d9c4d 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetTimeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/OffsetTimeValueSemantics.java
@@ -30,7 +30,7 @@ import org.apache.causeway.commons.internal.base._Temporals;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.OffsetTimeValueSemantics")
+@Named("causeway.metamodel.value.OffsetTimeValueSemantics")
 //@Log4j2
 public class OffsetTimeValueSemantics
 extends TemporalValueSemanticsProvider<OffsetTime> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/ZonedDateTimeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/ZonedDateTimeValueSemantics.java
index 3c578992d9..c9593acdec 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/ZonedDateTimeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/ZonedDateTimeValueSemantics.java
@@ -30,7 +30,7 @@ import org.apache.causeway.commons.internal.base._Temporals;
 import org.apache.causeway.schema.common.v2.ValueType;
 
 @Component
-@Named("causeway.val.ZonedDateTimeValueSemantics")
+@Named("causeway.metamodel.value.ZonedDateTimeValueSemantics")
 //@Log4j2
 public class ZonedDateTimeValueSemantics
 extends TemporalValueSemanticsProvider<ZonedDateTime> {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlDateValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlDateValueSemantics.java
index af0d228a6b..7e391b64ad 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlDateValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlDateValueSemantics.java
@@ -38,7 +38,7 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
  * @see JavaSqlTimeValueSemantics
  */
 @Component
-@Named("causeway.val.JavaSqlDateValueSemantics")
+@Named("causeway.metamodel.value.JavaSqlDateValueSemantics")
 public class JavaSqlDateValueSemantics
 extends TemporalSemanticsAdapter<Date, LocalDate> {
 
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeStampValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeStampValueSemantics.java
index 1a1c33c4fb..bad63ca76f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeStampValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeStampValueSemantics.java
@@ -32,7 +32,7 @@ import org.apache.causeway.core.metamodel.valuesemantics.temporal.LocalDateTimeV
 import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
 
 @Component
-@Named("causeway.val.JavaSqlTimeStampValueSemantics")
+@Named("causeway.metamodel.value.JavaSqlTimeStampValueSemantics")
 public class JavaSqlTimeStampValueSemantics
 extends TemporalSemanticsAdapter<Timestamp, LocalDateTime> {
 
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeValueSemantics.java
index c33f175b14..b156ad2df8 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaSqlTimeValueSemantics.java
@@ -36,7 +36,7 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
  *
  */
 @Component
-@Named("causeway.val.JavaSqlTimeValueSemantics")
+@Named("causeway.metamodel.value.JavaSqlTimeValueSemantics")
 public class JavaSqlTimeValueSemantics
 extends TemporalSemanticsAdapter<Time, LocalTime>  {
 
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaUtilDateValueSemantics.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaUtilDateValueSemantics.java
index 90fb238ae2..dce7b4e182 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaUtilDateValueSemantics.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/valuesemantics/temporal/legacy/JavaUtilDateValueSemantics.java
@@ -40,7 +40,7 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
  * @see JavaSqlTimeValueSemantics
  */
 @Component
-@Named("causeway.val.JavaUtilDateValueSemantics")
+@Named("causeway.metamodel.value.JavaUtilDateValueSemantics")
 public class JavaUtilDateValueSemantics
 extends TemporalSemanticsAdapter<java.util.Date, LocalDateTime>  {
 
diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/spring/SpringBeansService.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/spring/SpringBeansService.java
index 5a22fb0c82..5c2a27268a 100644
--- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/spring/SpringBeansService.java
+++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/spring/SpringBeansService.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -39,7 +40,7 @@ import lombok.experimental.UtilityClass;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.sub.spring.SpringBeansService")
+@Named(CausewayModuleCoreRuntimeServices.NAMESPACE + ".SpringBeansService")
 @javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 public class SpringBeansService {
diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/xml/XmlServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/xml/XmlServiceDefault.java
index 3550991ef6..68cd458857 100644
--- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/xml/XmlServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/xml/XmlServiceDefault.java
@@ -32,6 +32,7 @@ import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
+import org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 import org.w3c.dom.Document;
@@ -51,11 +52,13 @@ import org.apache.causeway.commons.internal.exceptions._Exceptions;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.runtimeservice.XmlService")
+@Named(XmlServiceDefault.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.EARLY)
 @Qualifier("Default")
 public class XmlServiceDefault implements XmlService {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreRuntimeServices.NAMESPACE + ".XmlServiceDefault";
+
     @Override
     public Document asDocument(String xmlStr) {
         try {
diff --git a/core/security/src/main/java/org/apache/causeway/core/security/authentication/manager/AuthenticationManager.java b/core/security/src/main/java/org/apache/causeway/core/security/authentication/manager/AuthenticationManager.java
index e83ba11dba..f18fa9889a 100644
--- a/core/security/src/main/java/org/apache/causeway/core/security/authentication/manager/AuthenticationManager.java
+++ b/core/security/src/main/java/org/apache/causeway/core/security/authentication/manager/AuthenticationManager.java
@@ -26,6 +26,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.core.security.CausewayModuleCoreSecurity;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Service;
@@ -50,11 +51,13 @@ import lombok.NonNull;
 import lombok.val;
 
 @Service
-@Named("causeway.security.AuthenticationManager")
+@Named(AuthenticationManager.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 public class AuthenticationManager {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreSecurity.NAMESPACE + ".AuthenticationManager";
+
     @Getter private final @NonNull Can<Authenticator> authenticators;
 
     private final Map<String, String> userByValidationCode = _Maps.newConcurrentHashMap();
diff --git a/core/security/src/main/java/org/apache/causeway/core/security/authentication/standard/RandomCodeGeneratorDefault.java b/core/security/src/main/java/org/apache/causeway/core/security/authentication/standard/RandomCodeGeneratorDefault.java
index aedca38f3b..cfe45dfcda 100644
--- a/core/security/src/main/java/org/apache/causeway/core/security/authentication/standard/RandomCodeGeneratorDefault.java
+++ b/core/security/src/main/java/org/apache/causeway/core/security/authentication/standard/RandomCodeGeneratorDefault.java
@@ -23,17 +23,20 @@ import java.security.SecureRandom;
 import javax.annotation.Priority;
 import javax.inject.Named;
 
+import org.apache.causeway.core.security.CausewayModuleCoreSecurity;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 
 @Component
-@Named("causeway.security.RandomCodeGenerator10Chars")
+@Named(RandomCodeGeneratorDefault.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.LATE)
 @Qualifier("Default")
 public class RandomCodeGeneratorDefault implements RandomCodeGenerator {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreSecurity.NAMESPACE + ".RandomCodeGenerator10Chars";
+
     private static final int NUMBER_CHARACTERS = 10;
     private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
 
diff --git a/core/security/src/main/java/org/apache/causeway/core/security/authorization/manager/AuthorizationManager.java b/core/security/src/main/java/org/apache/causeway/core/security/authorization/manager/AuthorizationManager.java
index 839c9d134f..9978327339 100644
--- a/core/security/src/main/java/org/apache/causeway/core/security/authorization/manager/AuthorizationManager.java
+++ b/core/security/src/main/java/org/apache/causeway/core/security/authorization/manager/AuthorizationManager.java
@@ -25,6 +25,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.core.security.CausewayModuleCoreSecurity;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Service;
@@ -45,11 +46,13 @@ import org.apache.causeway.core.security.authorization.Authorizor;
  * @since 1.x {@index}
  */
 @Service
-@Named("causeway.security.AuthorizationManager")
+@Named(AuthorizationManager.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 public class AuthorizationManager {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreSecurity.NAMESPACE + ".AuthorizationManager";
+
     private final Authorizor authorizor;
     private final ActionSemanticsResolver actionSemanticsResolver;
     private final boolean actionsWithSafeSemanticsRequireOnlyViewingPermission;
diff --git a/core/transaction/src/main/java/org/apache/causeway/core/transaction/CausewayModuleCoreTransaction.java b/core/transaction/src/main/java/org/apache/causeway/core/transaction/CausewayModuleCoreTransaction.java
index 552845913b..21a841b29a 100644
--- a/core/transaction/src/main/java/org/apache/causeway/core/transaction/CausewayModuleCoreTransaction.java
+++ b/core/transaction/src/main/java/org/apache/causeway/core/transaction/CausewayModuleCoreTransaction.java
@@ -31,4 +31,5 @@ import org.apache.causeway.core.transaction.changetracking.events.TimestampServi
 })
 public class CausewayModuleCoreTransaction {
 
+    public static final String NAMESPACE = "causeway.transaction";
 }
diff --git a/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/events/TimestampService.java b/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/events/TimestampService.java
index 3f3dc1669e..cfb300364f 100644
--- a/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/events/TimestampService.java
+++ b/core/transaction/src/main/java/org/apache/causeway/core/transaction/changetracking/events/TimestampService.java
@@ -22,6 +22,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.core.transaction.CausewayModuleCoreTransaction;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
@@ -35,11 +36,13 @@ import org.apache.causeway.applib.services.user.UserService;
 import lombok.val;
 
 @Service
-@Named("causeway.transaction.TimestampService")
+@Named(TimestampService.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 public class TimestampService {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleCoreTransaction.NAMESPACE + ".TimestampService";
+
     @Inject private UserService userService;
     @Inject private ClockService clockService;
 
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayConfigurationRoleAndPermissions.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayConfigurationRoleAndPermissions.java
index 6096eab0e4..bca3cbb3b6 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayConfigurationRoleAndPermissions.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayConfigurationRoleAndPermissions.java
@@ -22,6 +22,7 @@ import org.apache.causeway.applib.CausewayModuleApplib;
 import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.causeway.applib.services.confview.ConfigurationMenu;
 import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.config.CausewayModuleCoreConfig;
 import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionMode;
 import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionRule;
 import org.apache.causeway.extensions.secman.applib.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
@@ -46,7 +47,8 @@ extends AbstractRoleAndPermissionsFixtureScript {
                 ApplicationPermissionRule.ALLOW,
                 ApplicationPermissionMode.CHANGING,
                 Can.of(
-                        ApplicationFeatureId.newNamespace(CausewayModuleApplib.NAMESPACE_CONF)
+                        ApplicationFeatureId.newNamespace(CausewayModuleApplib.NAMESPACE_CONF),
+                        ApplicationFeatureId.newNamespace(CausewayModuleCoreConfig.NAMESPACE)
                 )
         );
     }
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayViewerRestfulObjectsSwaggerRoleAndPermissions.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayViewerRestfulObjectsSwaggerRoleAndPermissions.java
index 63bd1505e6..a21833baeb 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayViewerRestfulObjectsSwaggerRoleAndPermissions.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/seed/CausewayViewerRestfulObjectsSwaggerRoleAndPermissions.java
@@ -32,7 +32,7 @@ import org.apache.causeway.extensions.secman.applib.role.fixtures.AbstractRoleAn
 public class CausewayViewerRestfulObjectsSwaggerRoleAndPermissions
 extends AbstractRoleAndPermissionsFixtureScript {
 
-    private static final String SERVICE_LOGICAL_TYPE_NAME = "causeway.viewer.restfulobjects.SwaggerServiceMenu";
+    private static final String SERVICE_LOGICAL_TYPE_NAME = "causeway.viewer.roRendering.SwaggerServiceMenu";
 
     public static final String ROLE_NAME = SERVICE_LOGICAL_TYPE_NAME.replace(".","-");
 
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
index 7357c760ee..a3cb4d3592 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/ApplicationUserRepositoryAbstract.java
@@ -66,7 +66,7 @@ implements ApplicationUserRepository {
     @Inject private Provider<QueryResultsCache> queryResultsCacheProvider;
 
     // empty if no candidate is available
-    @Autowired(required = false) @Qualifier("secman") PasswordEncoder passwordEncoder;
+    @Autowired(required = false) @Qualifier("Secman") PasswordEncoder passwordEncoder;
 
 
     private final Class<U> applicationUserClass;
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_updatePassword.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_updatePassword.java
index 45d1b853ee..b06832662a 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_updatePassword.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/user/dom/mixins/ApplicationUser_updatePassword.java
@@ -58,7 +58,7 @@ public class ApplicationUser_updatePassword {
             extends CausewayModuleExtSecmanApplib.ActionDomainEvent<ApplicationUser_updatePassword> {}
 
     @Inject private ApplicationUserRepository applicationUserRepository;
-    @Autowired(required = false) private @Qualifier("secman") PasswordEncoder passwordEncoder;
+    @Autowired(required = false) private @Qualifier("Secman") PasswordEncoder passwordEncoder;
 
     private final ApplicationUser target;
 
diff --git a/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java b/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
index 540625b379..2eaef92550 100644
--- a/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
+++ b/extensions/security/secman/delegated-shiro/src/main/java/org/apache/causeway/extensions/secman/delegated/shiro/realm/CausewayModuleExtSecmanShiroRealm.java
@@ -267,7 +267,7 @@ public class CausewayModuleExtSecmanShiroRealm extends AuthorizingRealm {
     private CheckPasswordResult checkPassword(final char[] candidate, final String actualEncryptedPassword) {
         return execute(new Supplier<CheckPasswordResult>() {
 
-            @Autowired(required = false) private @Qualifier("secman") PasswordEncoder passwordEncoder;
+            @Autowired(required = false) private @Qualifier("Secman") PasswordEncoder passwordEncoder;
 
             @Override
             public CheckPasswordResult get() {
diff --git a/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/causeway/extensions/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.java b/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/causeway/extensions/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.java
index 5aa8cd0580..d0c25516ab 100644
--- a/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/causeway/extensions/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.java
+++ b/extensions/security/secman/encryption-jbcrypt/src/main/java/org/apache/causeway/extensions/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.java
@@ -34,7 +34,7 @@ import org.apache.causeway.extensions.secman.applib.CausewayModuleExtSecmanAppli
 @Service
 @Named(CausewayModuleExtSecmanApplib.NAMESPACE + ".PasswordEncoderUsingJBcrypt")
 @javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@Qualifier("secman")
+@Qualifier("Secman")
 public class PasswordEncoderUsingJBcrypt
 implements PasswordEncoder {
 
diff --git a/extensions/security/secman/encryption-spring/src/main/java/org/apache/causeway/extensions/secman/encryption/spring/CausewayModuleExtSecmanEncryptionSpring.java b/extensions/security/secman/encryption-spring/src/main/java/org/apache/causeway/extensions/secman/encryption/spring/CausewayModuleExtSecmanEncryptionSpring.java
index d52de8f62a..9653e98010 100644
--- a/extensions/security/secman/encryption-spring/src/main/java/org/apache/causeway/extensions/secman/encryption/spring/CausewayModuleExtSecmanEncryptionSpring.java
+++ b/extensions/security/secman/encryption-spring/src/main/java/org/apache/causeway/extensions/secman/encryption/spring/CausewayModuleExtSecmanEncryptionSpring.java
@@ -45,7 +45,7 @@ public class CausewayModuleExtSecmanEncryptionSpring {
     /**
      * @see "https://www.baeldung.com/spring-security-5-default-password-encoder"
      */
-    @Bean @Qualifier("secman") @Order(Ordered.LOWEST_PRECEDENCE)
+    @Bean @Qualifier("Secman") @Order(Ordered.LOWEST_PRECEDENCE)
     public PasswordEncoder passwordEncoder() {
         // set up the list of supported encoders and their prefixes
         val encoders = Map.<String, PasswordEncoder>of(
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecman.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecman.java
index 7545c5ea52..4868259e59 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecman.java
@@ -60,7 +60,7 @@ public class AuthenticatorSecman implements Authenticator {
     @Inject
     public AuthenticatorSecman(
             final ApplicationUserRepository applicationUserRepository,
-            final @Qualifier("secman") PasswordEncoder passwordEncoder) {
+            final @Qualifier("Secman") PasswordEncoder passwordEncoder) {
         this.applicationUserRepository = applicationUserRepository;
         this.passwordEncoder = passwordEncoder;
     }
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.java
index 5265378928..73455ddf90 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.extensions.secman.integration.authenticator;
 
+import org.apache.causeway.extensions.secman.applib.CausewayModuleExtSecmanApplib;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.AutoConfigureOrder;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -36,12 +37,12 @@ import org.apache.causeway.extensions.secman.applib.user.dom.ApplicationUserRepo
 @Configuration
 public class AuthenticatorSecmanAutoConfiguration  {
 
-    @Bean("causeway.ext.secman.AuthenticatorSecman")
+    @Bean(CausewayModuleExtSecmanApplib.NAMESPACE + ".AuthenticatorSecman")
     @ConditionalOnMissingBean(Authenticator.class)
     @Qualifier("Secman")
     public Authenticator authenticatorSecman(
             final ApplicationUserRepository applicationUserRepository,
-            final @Qualifier("secman") PasswordEncoder passwordEncoder) {
+            final @Qualifier("Secman") PasswordEncoder passwordEncoder) {
         return new AuthenticatorSecman(
                 applicationUserRepository, passwordEncoder);
     }
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/spiimpl/ImpersonateMenuAdvisorForSecman.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/spiimpl/ImpersonateMenuAdvisorForSecman.java
index 694e6a5efb..4b5be54b5d 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/spiimpl/ImpersonateMenuAdvisorForSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/spiimpl/ImpersonateMenuAdvisorForSecman.java
@@ -50,7 +50,7 @@ import lombok.val;
 @Service
 @Named(CausewayModuleExtSecmanApplib.NAMESPACE + ".ImpersonateMenuAdvisorForSecman")
 @javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@Qualifier("SecMan")
+@Qualifier("Secman")
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class ImpersonateMenuAdvisorForSecman implements ImpersonateMenuAdvisor {
 
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/userreg/UserRegistrationServiceForSecman.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/userreg/UserRegistrationServiceForSecman.java
index 2de125b263..98ca54f720 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/userreg/UserRegistrationServiceForSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/userreg/UserRegistrationServiceForSecman.java
@@ -51,7 +51,7 @@ import lombok.val;
 @Service
 @Named(CausewayModuleExtSecmanApplib.NAMESPACE + ".UserRegistrationServiceForSecman")
 @javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
-@Qualifier("SecMan")
+@Qualifier("Secman")
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class UserRegistrationServiceForSecman implements UserRegistrationService {
 
diff --git a/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/CausewayModuleExtSseWicket.java b/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/CausewayModuleExtSseWicket.java
index 144b966c8f..33443b5d50 100644
--- a/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/CausewayModuleExtSseWicket.java
+++ b/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/CausewayModuleExtSseWicket.java
@@ -44,4 +44,6 @@ import org.apache.causeway.extensions.sse.wicket.webmodule.WebModuleServerSentEv
 })
 public class CausewayModuleExtSseWicket {
 
+    public static final String NAMESPACE = "causeway.ext.sse";
+
 }
diff --git a/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/services/SseServiceDefault.java b/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/services/SseServiceDefault.java
index a5187b8fc4..efdf99c635 100644
--- a/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/services/SseServiceDefault.java
+++ b/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/services/SseServiceDefault.java
@@ -18,26 +18,20 @@
  */
 package org.apache.causeway.extensions.sse.wicket.services;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Queue;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ForkJoinPool;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.Value;
+import lombok.extern.log4j.Log4j2;
+import lombok.val;
+
+import java.util.*;
+import java.util.concurrent.*;
 import java.util.function.Predicate;
 
 import javax.annotation.Priority;
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Service;
-
 import org.apache.causeway.applib.annotation.PriorityPrecedence;
 import org.apache.causeway.applib.services.iactnlayer.InteractionService;
 import org.apache.causeway.applib.services.xactn.TransactionService;
@@ -45,12 +39,9 @@ import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.extensions.sse.applib.annotations.SseSource;
 import org.apache.causeway.extensions.sse.applib.service.SseChannel;
 import org.apache.causeway.extensions.sse.applib.service.SseService;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Value;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
+import org.apache.causeway.extensions.sse.wicket.CausewayModuleExtSseWicket;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
 
 /**
  * Server-sent events.
@@ -60,12 +51,14 @@ import lombok.extern.log4j.Log4j2;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.val.SseServiceDefault")
+@Named(SseServiceDefault.LOGICAL_TYPE_NAME)
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 @Log4j2
 public class SseServiceDefault implements SseService {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleExtSseWicket.NAMESPACE + ".SseServiceDefault";
+
     @Inject private TransactionService transactionService;
     @Inject private InteractionService interactionService;
 
diff --git a/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/webmodule/WebModuleServerSentEvents.java b/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/webmodule/WebModuleServerSentEvents.java
index c4783e34eb..f7a20c9a8e 100644
--- a/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/webmodule/WebModuleServerSentEvents.java
+++ b/extensions/vw/sse/wicket/src/main/java/org/apache/causeway/extensions/sse/wicket/webmodule/WebModuleServerSentEvents.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletException;
 
+import org.apache.causeway.extensions.sse.wicket.CausewayModuleExtSseWicket;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
@@ -40,11 +41,13 @@ import lombok.Getter;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.val.WebModuleServerSentEvents")
+@Named(WebModuleServerSentEvents.LOGICAL_TYPE_NAME)
 @Qualifier("ServerSentEvents")
 @javax.annotation.Priority(PriorityPrecedence.MIDPOINT)
 public final class WebModuleServerSentEvents extends WebModuleAbstract {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleExtSseWicket.NAMESPACE + ".WebModuleServerSentEvents";
+
     private static final String SERVLET_NAME = "ServerSentEventsServlet";
 
     @Getter
diff --git a/security/bypass/src/main/java/org/apache/causeway/security/bypass/CausewayModuleSecurityBypass.java b/security/bypass/src/main/java/org/apache/causeway/security/bypass/CausewayModuleSecurityBypass.java
index e4e77dc2d0..60e03a48f9 100644
--- a/security/bypass/src/main/java/org/apache/causeway/security/bypass/CausewayModuleSecurityBypass.java
+++ b/security/bypass/src/main/java/org/apache/causeway/security/bypass/CausewayModuleSecurityBypass.java
@@ -42,4 +42,6 @@ import org.apache.causeway.security.bypass.authorization.AuthorizorBypass;
 })
 public class CausewayModuleSecurityBypass {
 
+    public static final String NAMESPACE = "causeway.security.bypass";
+
 }
diff --git a/security/bypass/src/main/java/org/apache/causeway/security/bypass/authentication/AuthenticatorBypass.java b/security/bypass/src/main/java/org/apache/causeway/security/bypass/authentication/AuthenticatorBypass.java
index e5eef6cbdb..1c800b61ed 100644
--- a/security/bypass/src/main/java/org/apache/causeway/security/bypass/authentication/AuthenticatorBypass.java
+++ b/security/bypass/src/main/java/org/apache/causeway/security/bypass/authentication/AuthenticatorBypass.java
@@ -20,6 +20,7 @@ package org.apache.causeway.security.bypass.authentication;
 
 import javax.inject.Named;
 
+import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
@@ -33,11 +34,13 @@ import org.apache.causeway.core.security.authentication.standard.AuthenticatorAb
  * @since 1.x {@index}
  */
 @Service
-@Named("causeway.security.AuthenticatorBypass")
+@Named(AuthenticatorBypass.LOGICAL_TYPE_NAME)
 @javax.annotation.Priority(PriorityPrecedence.LATE)
 @Qualifier("Bypass")
 public class AuthenticatorBypass extends AuthenticatorAbstract {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleSecurityBypass.NAMESPACE + ".AuthenticatorBypass";
+
     @Override
     public boolean isValid(final AuthenticationRequest request) {
         return true;
diff --git a/security/bypass/src/main/java/org/apache/causeway/security/bypass/authorization/AuthorizorBypass.java b/security/bypass/src/main/java/org/apache/causeway/security/bypass/authorization/AuthorizorBypass.java
index f870300247..23b1a51d15 100644
--- a/security/bypass/src/main/java/org/apache/causeway/security/bypass/authorization/AuthorizorBypass.java
+++ b/security/bypass/src/main/java/org/apache/causeway/security/bypass/authorization/AuthorizorBypass.java
@@ -20,6 +20,7 @@ package org.apache.causeway.security.bypass.authorization;
 
 import javax.inject.Named;
 
+import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
@@ -32,11 +33,13 @@ import org.apache.causeway.core.security.authorization.Authorizor;
  * @since 1.x {@index}
  */
 @Service
-@Named("causeway.security.AuthorizorBypass")
+@Named(AuthorizorBypass.LOGICAL_TYPE_NAME)
 @javax.annotation.Priority(PriorityPrecedence.LATE)
 @Qualifier("Bypass")
 public class AuthorizorBypass implements Authorizor {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleSecurityBypass.NAMESPACE + ".AuthorizorBypass";
+
     @Override
     public boolean isVisible(final InteractionContext authentication, final Identifier identifier) {
         return true;
diff --git a/security/spring/src/main/java/org/apache/causeway/security/spring/CausewayModuleSecuritySpring.java b/security/spring/src/main/java/org/apache/causeway/security/spring/CausewayModuleSecuritySpring.java
index 737a1ab676..49ce98b004 100644
--- a/security/spring/src/main/java/org/apache/causeway/security/spring/CausewayModuleSecuritySpring.java
+++ b/security/spring/src/main/java/org/apache/causeway/security/spring/CausewayModuleSecuritySpring.java
@@ -64,6 +64,8 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class CausewayModuleSecuritySpring {
 
+    public static final String NAMESPACE = "causeway.security.spring";
+
     @Qualifier("springSecurityFilterChain")
     @Inject private Filter springSecurityFilterChain;
     @Inject private CausewayConfiguration causewayConfiguration;
diff --git a/security/spring/src/main/java/org/apache/causeway/security/spring/authentication/AuthenticatorSpring.java b/security/spring/src/main/java/org/apache/causeway/security/spring/authentication/AuthenticatorSpring.java
index 14b9119278..fd2ab1fb1a 100644
--- a/security/spring/src/main/java/org/apache/causeway/security/spring/authentication/AuthenticatorSpring.java
+++ b/security/spring/src/main/java/org/apache/causeway/security/spring/authentication/AuthenticatorSpring.java
@@ -21,6 +21,7 @@ package org.apache.causeway.security.spring.authentication;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.security.spring.CausewayModuleSecuritySpring;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
@@ -34,11 +35,13 @@ import org.apache.causeway.core.security.authentication.Authenticator;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.security.AuthenticatorSpring")
+@Named(AuthenticatorSpring.LOGICAL_TYPE_NAME)
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
 @Qualifier("Spring")
 public class AuthenticatorSpring implements Authenticator {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleSecuritySpring.NAMESPACE + ".AuthenticatorSpring";
+
     @Inject private InteractionProvider interactionProvider;
 
     @Override
diff --git a/security/spring/src/main/java/org/apache/causeway/security/spring/webmodule/WebModuleSpringSecurity.java b/security/spring/src/main/java/org/apache/causeway/security/spring/webmodule/WebModuleSpringSecurity.java
index 94ce481ffb..837204078b 100644
--- a/security/spring/src/main/java/org/apache/causeway/security/spring/webmodule/WebModuleSpringSecurity.java
+++ b/security/spring/src/main/java/org/apache/causeway/security/spring/webmodule/WebModuleSpringSecurity.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletException;
 
+import org.apache.causeway.security.spring.CausewayModuleSecuritySpring;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
@@ -40,11 +41,13 @@ import lombok.Getter;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.security.WebModuleSpringSecurity")
+@Named(WebModuleSpringSecurity.LOGICAL_TYPE_NAME)
 @javax.annotation.Priority(PriorityPrecedence.FIRST + 100)
 @Qualifier("Spring")
 public final class WebModuleSpringSecurity extends WebModuleAbstract {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleSecuritySpring.NAMESPACE + ".WebModuleSpringSecurity";
+
     @Getter
     private final String name = "Spring Security Integration";
 
diff --git a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/FakeDataService.java b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/FakeDataService.java
index 5a2547f5e1..70a25015e2 100644
--- a/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/FakeDataService.java
+++ b/testing/fakedata/applib/src/main/java/org/apache/causeway/testing/fakedata/applib/services/FakeDataService.java
@@ -50,7 +50,7 @@ import org.apache.causeway.applib.services.repository.RepositoryService;
  * @since 2.0 {@index}
  */
 @Service
-@Named("causeway.test.FakeDataService")
+@Named("causeway.testing.FakeDataService")
 @Priority(PriorityPrecedence.MIDPOINT)
 @Qualifier("Default")
 public class FakeDataService {
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/CausewayModuleValJodatimeIntegration.java b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/CausewayModuleValJodatimeIntegration.java
index cf30ea0b3b..4857550637 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/CausewayModuleValJodatimeIntegration.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/CausewayModuleValJodatimeIntegration.java
@@ -37,4 +37,7 @@ import org.apache.causeway.valuetypes.jodatime.integration.valuesemantics.JodaLo
     JodaDateTimeValueSemantics.class,
 })
 public class CausewayModuleValJodatimeIntegration {
+
+    public static final String NAMESPACE = "causeway.value.joda";
+
 }
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java
index 56ba20ae7e..0d758034d1 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaDateTimeValueSemantics.java
@@ -23,6 +23,7 @@ import java.time.ZonedDateTime;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.valuetypes.jodatime.integration.CausewayModuleValJodatimeIntegration;
 import org.joda.time.DateTime;
 import org.springframework.stereotype.Component;
 
@@ -33,10 +34,12 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
 import org.apache.causeway.valuetypes.jodatime.applib.value.JodaTimeConverters;
 
 @Component
-@Named("causeway.val.JodaDateTimeValueSemantics")
+@Named(JodaDateTimeValueSemantics.LOGICAL_TYPE_NAME)
 public class JodaDateTimeValueSemantics
 extends TemporalSemanticsAdapter<org.joda.time.DateTime, ZonedDateTime>  {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleValJodatimeIntegration.NAMESPACE + ".JodaDateTimeValueSemantics";
+
     @Inject ZonedDateTimeValueSemantics zonedDateTimeValueSemantics;
 
     @Override
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java
index 4f7078c070..b286152982 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateTimeValueSemantics.java
@@ -21,6 +21,7 @@ package org.apache.causeway.valuetypes.jodatime.integration.valuesemantics;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.valuetypes.jodatime.integration.CausewayModuleValJodatimeIntegration;
 import org.joda.time.LocalDateTime;
 import org.springframework.stereotype.Component;
 
@@ -31,10 +32,12 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
 import org.apache.causeway.valuetypes.jodatime.applib.value.JodaTimeConverters;
 
 @Component
-@Named("causeway.val.JodaLocalDateTimeValueSemantics")
+@Named(JodaLocalDateTimeValueSemantics.LOGICAL_TYPE_NAME)
 public class JodaLocalDateTimeValueSemantics
 extends TemporalSemanticsAdapter<org.joda.time.LocalDateTime, java.time.LocalDateTime>  {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleValJodatimeIntegration.NAMESPACE + ".JodaLocalDateTimeValueSemantics";
+
     @Inject LocalDateTimeValueSemantics localDateTimeValueSemantics;
 
     @Override
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java
index cb99971f25..8c04aa5ba0 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalDateValueSemantics.java
@@ -21,6 +21,7 @@ package org.apache.causeway.valuetypes.jodatime.integration.valuesemantics;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.valuetypes.jodatime.integration.CausewayModuleValJodatimeIntegration;
 import org.joda.time.LocalDate;
 import org.springframework.stereotype.Component;
 
@@ -31,10 +32,12 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
 import org.apache.causeway.valuetypes.jodatime.applib.value.JodaTimeConverters;
 
 @Component
-@Named("causeway.val.JodaLocalDateValueSemantics")
+@Named(JodaLocalDateValueSemantics.LOGICAL_TYPE_NAME)
 public class JodaLocalDateValueSemantics
 extends TemporalSemanticsAdapter<org.joda.time.LocalDate, java.time.LocalDate>  {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleValJodatimeIntegration.NAMESPACE + ".JodaLocalDateValueSemantics";
+
     @Inject LocalDateValueSemantics localDateValueSemantics;
 
     @Override
diff --git a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java
index da51d75824..efa2df2de8 100644
--- a/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java
+++ b/valuetypes/jodatime/integration/src/main/java/org/apache/causeway/valuetypes/jodatime/integration/valuesemantics/JodaLocalTimeValueSemantics.java
@@ -21,6 +21,7 @@ package org.apache.causeway.valuetypes.jodatime.integration.valuesemantics;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.causeway.valuetypes.jodatime.integration.CausewayModuleValJodatimeIntegration;
 import org.joda.time.LocalTime;
 import org.springframework.stereotype.Component;
 
@@ -31,10 +32,12 @@ import org.apache.causeway.core.metamodel.valuetypes.TemporalSemanticsAdapter;
 import org.apache.causeway.valuetypes.jodatime.applib.value.JodaTimeConverters;
 
 @Component
-@Named("causeway.val.JodaLocalTimeValueSemantics")
+@Named(JodaLocalTimeValueSemantics.LOGICAL_TYPE_NAME)
 public class JodaLocalTimeValueSemantics
 extends TemporalSemanticsAdapter<org.joda.time.LocalTime, java.time.LocalTime>  {
 
+    public static final String LOGICAL_TYPE_NAME = CausewayModuleValJodatimeIntegration.NAMESPACE + ".JodaLocalTimeValueSemantics";
+
     @Inject LocalTimeValueSemantics localTimeValueSemantics;
 
     @Override
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java
index 3844be0f8e..93799a305b 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/TaggerDefault.java
@@ -25,6 +25,12 @@ import java.util.stream.Stream;
 
 import javax.inject.Named;
 
+import org.apache.causeway.applib.CausewayModuleApplib;
+import org.apache.causeway.core.config.CausewayModuleCoreConfig;
+import org.apache.causeway.core.metamodel.CausewayModuleCoreMetamodel;
+import org.apache.causeway.core.runtime.CausewayModuleCoreRuntime;
+import org.apache.causeway.schema.CausewayModuleSchema;
+import org.apache.causeway.viewer.restfulobjects.rendering.CausewayModuleRestfulObjectsRendering;
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.annotation.Programmatic;
@@ -44,31 +50,59 @@ public class TaggerDefault implements Tagger {
     public String tagForLogicalTypeName(final String logicalTypeName, final String fallback) {
 
         if (logicalTypeName.startsWith("org.apache.causeway.")) {
-            return ". apache causeway internals";
+            return "… asf causeway internals";
         }
-        if (logicalTypeName.startsWith("causeway.applib.")) {
-            return ". apache causeway applib";
+        if (logicalTypeName.startsWith(CausewayModuleApplib.NAMESPACE)) {
+            return "… asf causeway applib";
         }
-        if (logicalTypeName.startsWith("causeway.conf.")) {
-            return ". apache causeway conf";
+        if (logicalTypeName.startsWith(CausewayModuleApplib.NAMESPACE_CONF) ||
+            logicalTypeName.startsWith(CausewayModuleCoreConfig.NAMESPACE)) {
+            return "… asf causeway config";
         }
-        if (logicalTypeName.startsWith("causeway.sudo.")) {
-            return ". apache causeway sudo";
+        if (logicalTypeName.startsWith(CausewayModuleApplib.NAMESPACE_FEAT)) {
+            return "… asf causeway feat";
+        }
+        if (logicalTypeName.startsWith(CausewayModuleSchema.NAMESPACE)) {
+            return "… asf causeway schema";
+        }
+        if (logicalTypeName.startsWith(CausewayModuleApplib.NAMESPACE_SUDO)) {
+            return "… asf causeway sudo";
+        }
+        if (logicalTypeName.startsWith(CausewayModuleCoreMetamodel.NAMESPACE)) {
+            return "… asf causeway metamodel";
+        }
+        if (logicalTypeName.startsWith(CausewayModuleCoreRuntime.NAMESPACE) ||
+            logicalTypeName.startsWith("causeway.runtimeservices") ||
+            logicalTypeName.startsWith("causeway.interaction") ||
+            logicalTypeName.startsWith("causeway.transaction") ||
+            logicalTypeName.startsWith("causeway.webapp")
+        ) {
+            return "… asf causeway runtime";
+        }
+        if (logicalTypeName.startsWith(CausewayModuleViewerRestfulObjectsApplib.NAMESPACE) ||
+            logicalTypeName.startsWith(CausewayModuleRestfulObjectsRendering.NAMESPACE)) {
+            return "… asf causeway viewer (restful)";
+        }
+        if (logicalTypeName.startsWith("causeway.viewer.wicket")) {
+            return "… asf causeway viewer (wicket)";
+        }
+        if (logicalTypeName.startsWith("causeway.viewer.")) {
+            return "… asf causeway viewer";
         }
         if (logicalTypeName.startsWith("causeway.persistence.")) {
-            return ". apache causeway persistence - " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
+            return "… asf causeway persistence - " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
         }
         if (logicalTypeName.startsWith("causeway.security.")) {
-            return ". apache causeway security";
+            return "… asf causeway security";
         }
-        if (logicalTypeName.startsWith("causeway.ext.")) {
-            return ". apache causeway extensions - " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
+        if (logicalTypeName.startsWith("causeway.testing")) {
+            return "… asf causeway testing";
         }
-        if (logicalTypeName.startsWith("causeway.sub.")) {
-            return ". apache causeway subdomains - " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
+        if (logicalTypeName.startsWith("causeway.ext.")) {
+            return "… asf causeway extensions - " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
         }
         if (logicalTypeName.startsWith("org.springframework.")) {
-            return "> spring framework " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
+            return "… spring framework " + partsOf(logicalTypeName).skip(2).limit(1).collect(Collectors.joining("."));
         }
 
         Matcher matcher;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
index 0f5f027c08..aaddad2f46 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/_OpenApiModelFactory.java
@@ -231,7 +231,7 @@ class _OpenApiModelFactory {
 
     void appendRestfulObjectsSupportingPathsAndDefinitions() {
 
-        final String tag = ". restful objects supporting resources";
+        final String tag = "… asf restful objects supporting resources";
 
         oa3.path("/",
                 new PathItem()