You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/09 10:01:12 UTC

[isis] branch master updated: ISIS-2473: create asciidoc doclets fully automated

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new a5d01b0  ISIS-2473: create asciidoc doclets fully automated
a5d01b0 is described below

commit a5d01b0b413daab972908469cd713f84c0ae1fae
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Dec 9 11:00:56 2020 +0100

    ISIS-2473: create asciidoc doclets fully automated
---
 .../modules/ROOT/pages/index/RoleMemento.adoc      |   13 +
 .../modules/ROOT/pages/index/UserMemento.adoc      |   36 +
 .../modules/ROOT/pages/index/UserService.adoc      |   35 +
 .../system/modules/ROOT/pages/system-overview.adoc | 2078 ++++++++++++++++----
 .../isis/applib/services/user/RoleMemento.java     |   14 +-
 .../isis/applib/services/user/UserMemento.java     |   16 +-
 .../isis/applib/services/user/UserService.java     |   33 +-
 .../main/java/org/apache/isis/tooling/cli/Cli.java |   16 +-
 .../org/apache/isis/tooling/cli/CliConfig.java     |   17 +
 .../org/apache/isis/tooling/cli/doclet/Doclet.java |    6 +
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  |   85 +-
 .../isis/tooling/cli/projdoc/ProjectDocWriter.java |   79 +
 12 files changed, 1914 insertions(+), 514 deletions(-)

diff --git a/antora/components/system/modules/ROOT/pages/index/RoleMemento.adoc b/antora/components/system/modules/ROOT/pages/index/RoleMemento.adoc
new file mode 100644
index 0000000..893ab1e
--- /dev/null
+++ b/antora/components/system/modules/ROOT/pages/index/RoleMemento.adoc
@@ -0,0 +1,13 @@
+= RoleMemento
+
+Immutable serializable value held by   xref:index:UserMemento.adoc[UserMemento]  .
+
+.RoleMemento
+[source,java]
+----
+class RoleMemento {
+}
+----
+
+
+
diff --git a/antora/components/system/modules/ROOT/pages/index/UserMemento.adoc b/antora/components/system/modules/ROOT/pages/index/UserMemento.adoc
new file mode 100644
index 0000000..b1644a8
--- /dev/null
+++ b/antora/components/system/modules/ROOT/pages/index/UserMemento.adoc
@@ -0,0 +1,36 @@
+= UserMemento
+
+Immutable serializable value holding details about a user and its roles.
+
+.UserMemento
+[source,java]
+----
+class UserMemento {
+
+  UserMemento system() // <.>
+
+  UserMemento ofName(@NonNull final String name) // <.>
+
+  UserMemento ofNameAndRoles(@NonNull final String name, final RoleMemento... roles) // <.>
+
+  UserMemento ofNameAndRoleNames(@NonNull final String name, final String... roleNames) // <.>
+
+  UserMemento ofNameAndRoleNames(@NonNull final String name, @NonNull final Stream<String> roleNames) // <.>
+
+  boolean isCurrentUser(@Nullable final String userName) // <.>
+}
+----
+
+
+<.> `UserMemento system()` The framework's internal user with unrestricted privileges.
+
+<.> `UserMemento ofName(@NonNull final String name)` Creates a new user with the specified name and no roles.
+
+<.> `UserMemento ofNameAndRoles(@NonNull final String name, final RoleMemento... roles)` Creates a new user with the specified name and assigned roles.
+
+<.> `UserMemento ofNameAndRoleNames(@NonNull final String name, final String... roleNames)` Creates a new user with the specified name and assigned role names.
+
+<.> `UserMemento ofNameAndRoleNames(@NonNull final String name, @NonNull final Stream<String> roleNames)` Creates a new user with the specified name and assigned role names.
+
+<.> `boolean isCurrentUser(@Nullable final String userName)` Determine if the specified name is this user.
+
diff --git a/antora/components/system/modules/ROOT/pages/index/UserService.adoc b/antora/components/system/modules/ROOT/pages/index/UserService.adoc
new file mode 100644
index 0000000..c984e41
--- /dev/null
+++ b/antora/components/system/modules/ROOT/pages/index/UserService.adoc
@@ -0,0 +1,35 @@
+= UserService
+
+The   xref:index:UserService.adoc[UserService]   allows the domain object to obtain the identity of the user 
+interacting with said object.
+
+
+If  _SudoService_  has been used to temporarily override the user and/or roles, 
+then this service will report the overridden values instead.
+
+.UserService
+[source,java]
+----
+interface UserService {
+
+  Optional<UserMemento> currentUser() // <.>
+
+  UserMemento getUser() // <.>
+
+  UserMemento currentUserElseFail() // <.>
+
+  Optional<String> currentUserName() // <.>
+}
+----
+
+
+<.> `Optional<UserMemento> currentUser()` Optionally gets the details about the current user, 
+based on whether an  _ExecutionContext_  can be found with the current thread's context.
+
+<.> `UserMemento getUser()` Gets the details about the current user.
+
+<.> `UserMemento currentUserElseFail()` Gets the details about the current user.
+
+<.> `Optional<String> currentUserName()` Optionally gets the the current user's name, 
+based on whether an  _ExecutionContext_  can be found with the current thread's context.
+
diff --git a/antora/components/system/modules/ROOT/pages/system-overview.adoc b/antora/components/system/modules/ROOT/pages/system-overview.adoc
index 9135d92..6a69f37 100644
--- a/antora/components/system/modules/ROOT/pages/system-overview.adoc
+++ b/antora/components/system/modules/ROOT/pages/system-overview.adoc
@@ -52,11 +52,12 @@ package "Base\n[Software System]" {
 ----
 
 .Projects/Modules (Base)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis (Aggregator)
+[source,yaml]
 ----
 Group: org.apache.isis
 Artifact: isis-all
@@ -64,14 +65,14 @@ Type: pom
 Folder: /
 ----
 
-|Apache Isis (Aggregator)
 |Convenience aggregator POM that references all modules, some explicitely, 
         others via profiles, that are not activiated per default.
         The parent POM of the core framework is isis-parent/pom.xml.
 
 
 
-|[source,yaml]
+|Apache Isis Antora
+[source,yaml]
 ----
 Group: org.apache.isis
 Artifact: antora
@@ -79,10 +80,10 @@ Type: pom
 Folder: \antora
 ----
 
-|Apache Isis Antora
 |
 
-|[source,yaml]
+|Apache Isis
+[source,yaml]
 ----
 Group: org.apache.isis
 Artifact: isis-parent
@@ -90,12 +91,12 @@ Type: pom
 Folder: \isis-parent
 ----
 
-|Apache Isis
 |Parent for the core framework + extensions, starter parent pom for starter apps.
 
 
 
-|[source,yaml]
+|Apache Isis Supplemental - Legal Info
+[source,yaml]
 ----
 Group: org.apache.isis
 Artifact: supplemental-model
@@ -103,7 +104,6 @@ Type: jar
 Folder: \supplemental-model
 ----
 
-|Apache Isis Supplemental - Legal Info
 |For example, the templates used by many Apache distributions assemble a listing of project dependencies 
   	according to their organization name (and URL), along with the URL each project's website. When dependency 
   	POMs are missing this information, the dependency notice file that the Remote Resources Plugin renders can 
@@ -141,11 +141,12 @@ package "Commons\n[Software System]" {
 ----
 
 .Projects/Modules (Commons)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Commons
+[source,yaml]
 ----
 Group: org.apache.isis.commons
 Artifact: isis-commons
@@ -153,7 +154,6 @@ Type: jar
 Folder: \commons
 ----
 
-|Apache Isis Commons
 |Apache Isis Commons is a library with utilities, that are shared with the entire Apache Isis ecosystem.
 
 _Dependencies_
@@ -280,11 +280,12 @@ package "Core\n[Software System]" {
 ----
 
 .Projects/Modules (Core)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Core
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core
@@ -292,7 +293,6 @@ Type: pom
 Folder: \core
 ----
 
-|Apache Isis Core
 |Core framework, providing metamodel, runtime and core APIs.
 
 _Dependencies_
@@ -301,7 +301,8 @@ _Dependencies_
 
 
 
-|[source,yaml]
+|Apache Isis Core - AppLib
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-applib
@@ -309,23 +310,22 @@ Type: jar
 Folder: \api\applib
 ----
 
-|Apache Isis Core - AppLib
 |Isis application library, defining annotations and utilities for the
         default (Java) programming model.
 
 _Components_
 
-* org.apache.isis.applib.annotation.DomainObject
-* org.apache.isis.applib.annotation.DomainService
-* org.apache.isis.applib.services.clock.ClockService
-* org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto
-* org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto
-* org.apache.isis.applib.services.commanddto.processor.spi.CommandDtoProcessorServiceIdentity
-* org.apache.isis.applib.services.publishing.log.CommandLogger
-* org.apache.isis.applib.services.publishing.log.EntityChangesLogger
-* org.apache.isis.applib.services.publishing.log.EntityPropertyChangeLogger
-* org.apache.isis.applib.services.publishing.log.ExecutionLogger
-* org.apache.isis.applib.services.session.SessionLoggingServiceLogging
+* o.a.i.applib.annotation.DomainObject
+* o.a.i.applib.annotation.DomainService
+* o.a.i.applib.services.clock.ClockService
+* o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto
+* o.a.i.applib.services.commanddto.conmap.ContentMappingServiceForCommandsDto
+* o.a.i.applib.services.commanddto.processor.spi.CommandDtoProcessorServiceIdentity
+* o.a.i.applib.services.publishing.log.CommandLogger
+* o.a.i.applib.services.publishing.log.EntityChangesLogger
+* o.a.i.applib.services.publishing.log.EntityPropertyChangeLogger
+* o.a.i.applib.services.publishing.log.ExecutionLogger
+* o.a.i.applib.services.session.SessionLoggingServiceLogging
 
 _Dependencies_
 
@@ -337,9 +337,14 @@ _Dependencies_
 * org.assertj:assertj-core:jar:<managed>
 * org.jmock:jmock:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Core - Code Gen (ByteBuddy)
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-codegen-bytebuddy
@@ -347,18 +352,26 @@ Type: jar
 Folder: \core\codegen-bytebuddy
 ----
 
-|Apache Isis Core - Code Gen (ByteBuddy)
 |Code generation using ByteBuddy.
 
+_Components_
+
+* o.a.i.core.codegen.bytebuddy.services.ProxyFactoryServiceByteBuddy
+
 _Dependencies_
 
 * net.bytebuddy:byte-buddy:jar:<managed>
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.objenesis:objenesis:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Core - Configuration
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-config
@@ -366,9 +379,16 @@ Type: jar
 Folder: \core\config
 ----
 
-|Apache Isis Core - Configuration
 |Isis configuration library for framework internal use.
 
+_Components_
+
+* o.a.i.core.config.beans.IsisBeanFactoryPostProcessorForSpring
+* o.a.i.core.config.converters.PatternsConverter
+* o.a.i.core.config.environment.IsisSystemEnvironment
+* o.a.i.core.config.validators.PatternOptionalStringConstraintValidator
+* o.a.i.core.config.viewer.wicket.WebAppContextPath
+
 _Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
@@ -377,9 +397,14 @@ _Dependencies_
 * org.hibernate.validator:hibernate-validator:jar:<managed>
 * org.springframework.boot:spring-boot-configuration-processor:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Core - Unit Test Support
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-internaltestsupport
@@ -387,7 +412,6 @@ Type: jar
 Folder: \core\internaltestsupport
 ----
 
-|Apache Isis Core - Unit Test Support
 |Support for writing unit tests in either JUnit 4 or JUnit 5; should be added as a dependency with scope=test only
 
 _Dependencies_
@@ -409,9 +433,14 @@ _Dependencies_
 * org.springframework:spring-test:jar:<managed>
 * org.springframework.boot:spring-boot-starter-test:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Core - MetaModel
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-metamodel
@@ -419,8 +448,40 @@ Type: jar
 Folder: \core\metamodel
 ----
 
-|Apache Isis Core - MetaModel
-|_Dependencies_
+|_Components_
+
+* o.a.i.core.metamodel.facets.schema.IsisSchemaMetaModelRefiner
+* o.a.i.core.metamodel.facets.schema.IsisSchemaValueTypeProvider
+* o.a.i.core.metamodel.objectmanager.ObjectManagerDefault
+* o.a.i.core.metamodel.progmodel.ProgrammingModelInitFilterDefault
+* o.a.i.core.metamodel.registry.IsisBeanTypeRegistryDefault
+* o.a.i.core.metamodel.services.ServiceInjectorDefault
+* o.a.i.core.metamodel.services.appfeat.ApplicationFeatureFactory
+* o.a.i.core.metamodel.services.appfeat.ApplicationFeatureRepositoryDefault
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorDefault
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorForCollections
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorForDomainObjects
+* o.a.i.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry
+* o.a.i.core.metamodel.services.events.MetamodelEventService
+* o.a.i.core.metamodel.services.exceprecog.ExceptionRecognizerForRecoverableException
+* o.a.i.core.metamodel.services.grid.GridLoaderServiceDefault
+* o.a.i.core.metamodel.services.grid.GridReaderUsingJaxb
+* o.a.i.core.metamodel.services.grid.GridServiceDefault
+* o.a.i.core.metamodel.services.grid.bootstrap3.GridSystemServiceBS3
+* o.a.i.core.metamodel.services.layout.LayoutServiceDefault
+* o.a.i.core.metamodel.services.metamodel.MetaModelServiceDefault
+* o.a.i.core.metamodel.services.registry.ServiceRegistryDefault
+* o.a.i.core.metamodel.services.tablecol.TableColumnOrderServiceDefault
+* o.a.i.core.metamodel.services.title.TitleServiceDefault
+* o.a.i.core.metamodel.specloader.InjectorMethodEvaluatorDefault
+* o.a.i.core.metamodel.specloader.ProgrammingModelServiceDefault
+* o.a.i.core.metamodel.specloader.SpecificationLoaderDefault
+* o.a.i.core.metamodel.valuetypes.ValueTypeProviderDefault
+* o.a.i.core.metamodel.valuetypes.ValueTypeProviderForBuiltin
+* o.a.i.core.metamodel.valuetypes.ValueTypeProviderForCollections
+* o.a.i.core.metamodel.valuetypes.ValueTypeRegistry
+
+_Dependencies_
 
 * io.swagger:swagger-core:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
@@ -430,9 +491,14 @@ Folder: \core\metamodel
 * org.hibernate.validator:hibernate-validator:jar:<managed>
 * org.jmock:jmock:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Core - Runtime
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-runtime
@@ -440,15 +506,25 @@ Type: jar
 Folder: \core\runtime
 ----
 
-|Apache Isis Core - Runtime
-|_Dependencies_
+|_Components_
+
+* o.a.i.core.runtime.events.RuntimeEventService
+* o.a.i.core.runtime.events.persistence.TimestampService
+* o.a.i.core.runtime.persistence.changetracking.EntityChangeTrackerDefault
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Core - Runtime Services
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-runtimeservices
@@ -456,9 +532,45 @@ Type: jar
 Folder: \core\runtimeservices
 ----
 
-|Apache Isis Core - Runtime Services
 |Introduced to keep the 'runtime' package concise. Viewers don't have dependencies on this module.
 
+_Components_
+
+* o.a.i.core.runtimeservices.bookmarks.BookmarkServiceDefault
+* o.a.i.core.runtimeservices.command.CommandDtoServiceInternalDefault
+* o.a.i.core.runtimeservices.command.CommandExecutorServiceDefault
+* o.a.i.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
+* o.a.i.core.runtimeservices.email.EmailServiceDefault
+* o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring
+* o.a.i.core.runtimeservices.exceprecog.ExceptionRecognizerServiceDefault
+* o.a.i.core.runtimeservices.factory.FactoryServiceDefault
+* o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault
+* o.a.i.core.runtimeservices.i18n.po.TranslationServicePo
+* o.a.i.core.runtimeservices.ixn.InteractionDtoServiceInternalDefault
+* o.a.i.core.runtimeservices.jaxb.JaxbServiceDefault
+* o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault
+* o.a.i.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3
+* o.a.i.core.runtimeservices.message.MessageServiceDefault
+* o.a.i.core.runtimeservices.publish.CommandPublisherDefault
+* o.a.i.core.runtimeservices.publish.EntityChangesPublisherDefault
+* o.a.i.core.runtimeservices.publish.EntityPropertyChangePublisherDefault
+* o.a.i.core.runtimeservices.publish.ExecutionPublisherDefault
+* o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault
+* o.a.i.core.runtimeservices.repository.RepositoryServiceDefault
+* o.a.i.core.runtimeservices.routing.RoutingServiceDefault
+* o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault
+* o.a.i.core.runtimeservices.session.IsisInteractionFactoryDefault
+* o.a.i.core.runtimeservices.sudo.SudoServiceDefault
+* o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression
+* o.a.i.core.runtimeservices.user.UserServiceDefault
+* o.a.i.core.runtimeservices.user.UserServiceDefault$SudoServiceSpi
+* o.a.i.core.runtimeservices.userprof.UserProfileServiceDefault
+* o.a.i.core.runtimeservices.userreg.EmailNotificationServiceDefault
+* o.a.i.core.runtimeservices.wrapper.WrapperFactoryDefault
+* o.a.i.core.runtimeservices.xactn.TransactionServiceSpring
+* o.a.i.core.runtimeservices.xml.XmlServiceDefault
+* o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-codegen-bytebuddy:jar:<managed>
@@ -466,9 +578,14 @@ _Dependencies_
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.hsqldb:hsqldb:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Core - Security
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-security
@@ -476,8 +593,13 @@ Type: jar
 Folder: \core\security
 ----
 
-|Apache Isis Core - Security
-|_Dependencies_
+|_Components_
+
+* o.a.i.core.security.authentication.manager.AuthenticationManager
+* o.a.i.core.security.authentication.standard.RandomCodeGeneratorDefault
+* o.a.i.core.security.authorization.manager.AuthorizationManager
+
+_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -486,9 +608,14 @@ Folder: \core\security
 * org.junit.jupiter:junit-jupiter-engine:jar:<managed>
 * org.junit.vintage:junit-vintage-engine:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Core - WebApp
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-core-webapp
@@ -496,10 +623,16 @@ Type: jar
 Folder: \core\webapp
 ----
 
-|Apache Isis Core - WebApp
 |Bundles all the web specific classes a srequired by viewers.
         Introduced to keep the 'runtime' package concise.
 
+_Components_
+
+* o.a.i.core.webapp.health.HealthIndicatorUsingHealthCheckService
+* o.a.i.core.webapp.modules.logonlog.WebModuleLogOnExceptionLogger
+* o.a.i.core.webapp.modules.templresources.WebModuleTemplateResources
+* o.a.i.core.webapp.webappctx.IsisWebAppContextInitializer
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -509,9 +642,14 @@ _Dependencies_
 * org.springframework.boot:spring-boot-actuator:jar:<managed>
 * org.springframework.boot:spring-boot-starter-thymeleaf:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis - JDK Supplemental
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-jdk-supplemental
@@ -519,7 +657,6 @@ Type: pom
 Folder: \core\jdk-supplemental
 ----
 
-|Apache Isis - JDK Supplemental
 |Defines a module to bring in dependencies that were part of JDK 8 but
         had been removed with later JDK versions. 
         
@@ -536,9 +673,14 @@ _Dependencies_
 * javax.xml.bind:jaxb-api:jar:<managed>
 * org.codehaus.woodstox:stax2-api:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Core - Schemas
+[source,yaml]
 ----
 Group: org.apache.isis.core
 Artifact: isis-schema
@@ -546,7 +688,6 @@ Type: jar
 Folder: \api\schema
 ----
 
-|Apache Isis Core - Schemas
 |Apache Isis schemas, for conversion into canonical DTOs (for use in integration scenarios).
 
 _Dependencies_
@@ -554,6 +695,10 @@ _Dependencies_
 * joda-time:joda-time:jar:<managed>
 * org.springframework:spring-context:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -585,11 +730,12 @@ package "App\n[Software System]" {
 ----
 
 .Projects/Modules (App)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Starter Parent
+[source,yaml]
 ----
 Group: org.apache.isis.app
 Artifact: isis-app-starter-parent
@@ -597,10 +743,13 @@ Type: pom
 Folder: \starters
 ----
 
-|Apache Isis Starter Parent
 |Parent pom providing dependency and plugin management for Apache Isis applications
 		built with Maven.  Builds on top of spring-boot-starter-parent.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -667,11 +816,12 @@ package "Mavendeps\n[Software System]" {
 ----
 
 .Projects/Modules (Mavendeps)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Maven Deps
+[source,yaml]
 ----
 Group: org.apache.isis.mavendeps
 Artifact: isis-mavendeps
@@ -679,12 +829,16 @@ Type: pom
 Folder: \mavendeps
 ----
 
-|Apache Isis Maven Deps
 |Collection of Apache Isis Maven Dependency Bundles.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Maven Deps - BDD Integ Spec
+[source,yaml]
 ----
 Group: org.apache.isis.mavendeps
 Artifact: isis-mavendeps-integspecs
@@ -692,7 +846,6 @@ Type: pom
 Folder: \mavendeps\integspecs
 ----
 
-|Apache Isis Maven Deps - BDD Integ Spec
 |Defines a module that can be used as a single dependency for BDD (Cucumber) specs as integration tests.
 
 _Dependencies_
@@ -701,9 +854,14 @@ _Dependencies_
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Maven Deps - Integration Testing
+[source,yaml]
 ----
 Group: org.apache.isis.mavendeps
 Artifact: isis-mavendeps-integtests
@@ -711,7 +869,6 @@ Type: pom
 Folder: \mavendeps\integtests
 ----
 
-|Apache Isis Maven Deps - Integration Testing
 |Defines a module that can be used as a single dependency for integration tests.
 
 _Dependencies_
@@ -720,9 +877,14 @@ _Dependencies_
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Maven Deps - JDK11
+[source,yaml]
 ----
 Group: org.apache.isis.mavendeps
 Artifact: isis-mavendeps-jdk11
@@ -730,14 +892,18 @@ Type: pom
 Folder: \mavendeps\jdk11
 ----
 
-|Apache Isis Maven Deps - JDK11
 |Defines a module to bring in dependencies that were part of JDK 8 but
         had been removed with JDK 11+. These dependencies are activated when the 
         consuming project is built with JDK 11 or higher.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Maven Deps - Testing
+[source,yaml]
 ----
 Group: org.apache.isis.mavendeps
 Artifact: isis-mavendeps-unittests
@@ -745,7 +911,6 @@ Type: pom
 Folder: \mavendeps\unittests
 ----
 
-|Apache Isis Maven Deps - Testing
 |Defines a module that can be used as a single dependency for a set of common testing libraries.
 
 _Dependencies_
@@ -753,9 +918,14 @@ _Dependencies_
 * org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Maven Deps - Webapp
+[source,yaml]
 ----
 Group: org.apache.isis.mavendeps
 Artifact: isis-mavendeps-webapp
@@ -763,7 +933,6 @@ Type: pom
 Folder: \mavendeps\webapp
 ----
 
-|Apache Isis Maven Deps - Webapp
 |Defines a module that can be used as a single dependency for running an Apache Isis webapp (Wicket, Restful Objects and Shiro security)
 
 _Dependencies_
@@ -783,6 +952,10 @@ _Dependencies_
 * org.springframework.boot:spring-boot-starter-tomcat:jar:<managed>
 * org.springframework.boot:spring-boot-starter-web:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -849,11 +1022,12 @@ package "Mappings\n[Software System]" {
 ----
 
 .Projects/Modules (Mappings)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Mappings
+[source,yaml]
 ----
 Group: org.apache.isis.mappings
 Artifact: isis-mappings
@@ -861,7 +1035,6 @@ Type: pom
 Folder: \mappings
 ----
 
-|Apache Isis Mappings
 |Libraries and tools to map one bounded context (usually an Apache Isis application) to some other BC (usually
 		_not_ an Apache Isis application).
 
@@ -869,9 +1042,14 @@ _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Map - JaxRS Client (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.mappings
 Artifact: isis-mappings-jaxrsclient
@@ -879,12 +1057,16 @@ Type: pom
 Folder: \mappings\jaxrsclient
 ----
 
-|Apache Isis Map - JaxRS Client (parent)
 |Integrates JaxRS Client Library
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Map - JaxRS Client (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.mappings
 Artifact: isis-mappings-jaxrsclient-applib
@@ -892,15 +1074,19 @@ Type: jar
 Folder: \mappings\jaxrsclient\applib
 ----
 
-|Apache Isis Map - JaxRS Client (applib)
 |_Dependencies_
 
 * javax:javaee-api:jar:<managed>
 * org.springframework:spring-context:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Map - JaxRS Client (impl)
+[source,yaml]
 ----
 Group: org.apache.isis.mappings
 Artifact: isis-mappings-jaxrsclient-impl
@@ -908,14 +1094,18 @@ Type: jar
 Folder: \mappings\jaxrsclient\testlib
 ----
 
-|Apache Isis Map - JaxRS Client (impl)
 |_Dependencies_
 
 * org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - REST Client (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.mappings
 Artifact: isis-mappings-restclient
@@ -923,12 +1113,16 @@ Type: pom
 Folder: \mappings\restclient
 ----
 
-|Apache Isis Ext - REST Client (parent)
 |A client for the Restful Objects Viewer
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - REST Client (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.mappings
 Artifact: isis-mappings-restclient-applib
@@ -936,7 +1130,6 @@ Type: jar
 Folder: \mappings\restclient\applib
 ----
 
-|Apache Isis Ext - REST Client (applib)
 |A client for the Restful Objects Viewer
 
 _Dependencies_
@@ -944,6 +1137,10 @@ _Dependencies_
 * org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed>
 * org.springframework:spring-context:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -1009,11 +1206,12 @@ package "Persistence\n[Software System]" {
 ----
 
 .Projects/Modules (Persistence)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Persistence - JDO
+[source,yaml]
 ----
 Group: org.apache.isis.persistence
 Artifact: isis-persistence-jdo
@@ -1021,12 +1219,16 @@ Type: pom
 Folder: \persistence\jdo
 ----
 
-|Apache Isis Persistence - JDO
 |Supplementary applib for JDO persistence
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Persistence - JDO (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.persistence
 Artifact: isis-persistence-jdo-applib
@@ -1034,7 +1236,6 @@ Type: jar
 Folder: \persistence\jdo\applib
 ----
 
-|Apache Isis Persistence - JDO (applib)
 |Supplementary applib for JDO persistence
 
 _Dependencies_
@@ -1044,9 +1245,14 @@ _Dependencies_
 * org.datanucleus:datanucleus-rdbms:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Persistence - JDO (datanucleus 5)
+[source,yaml]
 ----
 Group: org.apache.isis.persistence
 Artifact: isis-persistence-jdo-datanucleus5
@@ -1054,9 +1260,21 @@ Type: jar
 Folder: \persistence\jdo\datanucleus-5
 ----
 
-|Apache Isis Persistence - JDO (datanucleus 5)
 |JDO plugin using datanucleus.
 
+_Components_
+
+* o.a.i.persistence.jdo.datanucleus5.datanucleus.DataNucleusSettings
+* o.a.i.persistence.jdo.datanucleus5.datanucleus.service.JdoPersistenceLifecycleService
+* o.a.i.persistence.jdo.datanucleus5.exceprecog.ExceptionRecognizerForJDODataStoreException
+* o.a.i.persistence.jdo.datanucleus5.exceprecog.ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException
+* o.a.i.persistence.jdo.datanucleus5.exceprecog.ExceptionRecognizerForJDOObjectNotFoundException
+* o.a.i.persistence.jdo.datanucleus5.exceprecog.ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException
+* o.a.i.persistence.jdo.datanucleus5.jdosupport.IsisJdoSupportDN5
+* o.a.i.persistence.jdo.datanucleus5.metamodel.JdoProgrammingModelPlugin
+* o.a.i.persistence.jdo.datanucleus5.persistence.IsisPlatformTransactionManagerForJdo
+* o.a.i.persistence.jdo.datanucleus5.persistence.PersistenceSessionFactory5
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1068,9 +1286,14 @@ _Dependencies_
 * org.datanucleus:datanucleus-jodatime:jar:<managed>
 * org.datanucleus:datanucleus-rdbms:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Persistence - JPA
+[source,yaml]
 ----
 Group: org.apache.isis.persistence
 Artifact: isis-persistence-jpa
@@ -1078,12 +1301,16 @@ Type: pom
 Folder: \persistence\jpa
 ----
 
-|Apache Isis Persistence - JPA
 |Apache Isis JPA integration
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Persistence - JPA (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.persistence
 Artifact: isis-persistence-jpa-applib
@@ -1091,7 +1318,6 @@ Type: jar
 Folder: \persistence\jpa\applib
 ----
 
-|Apache Isis Persistence - JPA (applib)
 |Supplementary applib for JPA persistence
 
 _Dependencies_
@@ -1099,9 +1325,14 @@ _Dependencies_
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Persistence - JPA (model)
+[source,yaml]
 ----
 Group: org.apache.isis.persistence
 Artifact: isis-persistence-jpa-model
@@ -1109,9 +1340,12 @@ Type: jar
 Folder: \persistence\jpa\model
 ----
 
-|Apache Isis Persistence - JPA (model)
 |JPA integration (metamodel)
 
+_Components_
+
+* o.a.i.persistence.jpa.metamodel.JpaProgrammingModelPlugin
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1119,6 +1353,10 @@ _Dependencies_
 * org.apache.isis.persistence:isis-persistence-jpa-applib:jar:<managed>
 * org.springframework.data:spring-data-jpa:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -1162,11 +1400,12 @@ package "Security\n[Software System]" {
 ----
 
 .Projects/Modules (Security)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Security - Bypass
+[source,yaml]
 ----
 Group: org.apache.isis.security
 Artifact: isis-security-bypass
@@ -1174,14 +1413,23 @@ Type: jar
 Folder: \security\bypass
 ----
 
-|Apache Isis Security - Bypass
-|_Dependencies_
+|_Components_
+
+* o.a.i.security.bypass.authentication.AuthenticatorBypass
+* o.a.i.security.bypass.authorization.AuthorizorBypass
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Security - Keycloak
+[source,yaml]
 ----
 Group: org.apache.isis.security
 Artifact: isis-security-keycloak
@@ -1189,9 +1437,14 @@ Type: jar
 Folder: \security\keycloak
 ----
 
-|Apache Isis Security - Keycloak
 |Authentication and Authorization using Keycloak
 
+_Components_
+
+* o.a.i.security.keycloak.authentication.AuthenticatorKeycloak
+* o.a.i.security.keycloak.authorization.AuthorizorKeycloak
+* o.a.i.security.keycloak.webmodule.WebModuleKeycloak
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1199,9 +1452,14 @@ _Dependencies_
 * org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Security - Shiro
+[source,yaml]
 ----
 Group: org.apache.isis.security
 Artifact: isis-security-shiro
@@ -1209,9 +1467,14 @@ Type: jar
 Folder: \security\shiro
 ----
 
-|Apache Isis Security - Shiro
 |Authentication and Authorization using Apache Shiro.
 
+_Components_
+
+* o.a.i.security.shiro.authentication.AuthenticatorShiro
+* o.a.i.security.shiro.authorization.AuthorizorShiro
+* o.a.i.security.shiro.webmodule.WebModuleShiro
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1221,6 +1484,10 @@ _Dependencies_
 * org.apache.shiro:shiro-core:jar:<managed>
 * org.apache.shiro:shiro-web:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -1240,12 +1507,12 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<11>> {
+skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -1335,12 +1602,12 @@ skinparam rectangle<<20>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<21>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -1391,11 +1658,12 @@ package "Valuetypes\n[Software System]" {
 ----
 
 .Projects/Modules (Valuetypes)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Value types
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes
@@ -1403,16 +1671,20 @@ Type: pom
 Folder: \valuetypes
 ----
 
-|Apache Isis Value types
 |Value types for use within Apache Isis applications.
 
 _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc
@@ -1420,12 +1692,16 @@ Type: pom
 Folder: \valuetypes\asciidoc
 ----
 
-|Apache Isis Val - Asciidoctor (parent)
 |Asciidoc value type.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-applib
@@ -1433,16 +1709,20 @@ Type: jar
 Folder: \valuetypes\asciidoc\applib
 ----
 
-|Apache Isis Val - Asciidoctor (applib)
 |_Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.asciidoctor:asciidoctorj-api:jar:${asciidoctorj.version}
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (MetaModel)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-metamodel
@@ -1450,15 +1730,24 @@ Type: jar
 Folder: \valuetypes\asciidoc\metamodel
 ----
 
-|Apache Isis Val - Asciidoctor (MetaModel)
-|_Dependencies_
+|_Components_
+
+* o.a.i.valuetypes.asciidoc.metamodel.AsciiDocMetaModelRefiner
+* o.a.i.valuetypes.asciidoc.metamodel.AsciiDocValueTypeProvider
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (Persistence)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-persistence
@@ -1466,15 +1755,19 @@ Type: pom
 Folder: \valuetypes\asciidoc\persistence
 ----
 
-|Apache Isis Val - Asciidoctor (Persistence)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (persistence jdo DN5)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-persistence-jdo-dn5
@@ -1482,14 +1775,18 @@ Type: jar
 Folder: \valuetypes\asciidoc\persistence\jdo-dn5
 ----
 
-|Apache Isis Val - Asciidoctor (persistence jdo DN5)
 |_Dependencies_
 
 * org.datanucleus:datanucleus-core:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-ui
@@ -1497,7 +1794,6 @@ Type: pom
 Folder: \valuetypes\asciidoc\ui
 ----
 
-|Apache Isis Val - Asciidoctor (ui)
 |_Dependencies_
 
 * com.github.jnr:jnr-constants:jar:0.10.0
@@ -1507,9 +1803,14 @@ Folder: \valuetypes\asciidoc\ui
 * org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed>
 * org.asciidoctor:asciidoctorj:jar:${asciidoctorj.version}
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (ui vaadin)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-ui-vaa
@@ -1517,14 +1818,22 @@ Type: jar
 Folder: \valuetypes\asciidoc\ui\vaadin
 ----
 
-|Apache Isis Val - Asciidoctor (ui vaadin)
-|_Dependencies_
+|_Components_
+
+* o.a.i.valuetypes.asciidoc.ui.vaa.components.AsciiDocFieldFactoryVaa
+
+_Dependencies_
 
 * org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:${project.version}
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Asciidoctor (ui wicket)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-ui-wkt
@@ -1532,14 +1841,29 @@ Type: jar
 Folder: \valuetypes\asciidoc\ui\wicket
 ----
 
-|Apache Isis Val - Asciidoctor (ui wicket)
-|_Dependencies_
+|_Components_
+
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Standalone
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Standalone
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Standalone
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Parented
+* o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Standalone
+
+_Dependencies_
 
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Markdown (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown
@@ -1547,12 +1871,16 @@ Type: pom
 Folder: \valuetypes\markdown
 ----
 
-|Apache Isis Val - Markdown (parent)
 |Markdown value type.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Markdown (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-applib
@@ -1560,16 +1888,20 @@ Type: jar
 Folder: \valuetypes\markdown\applib
 ----
 
-|Apache Isis Val - Markdown (applib)
 |_Dependencies_
 
 * com.vladsch.flexmark:flexmark-all:jar:${flexmark.version}
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Markdown (MetaModel)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-metamodel
@@ -1577,15 +1909,24 @@ Type: jar
 Folder: \valuetypes\markdown\metamodel
 ----
 
-|Apache Isis Val - Markdown (MetaModel)
-|_Dependencies_
+|_Components_
+
+* o.a.i.valuetypes.markdown.metamodel.MarkdownMetaModelRefiner
+* o.a.i.valuetypes.markdown.metamodel.MarkdownValueTypeProvider
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Markdown (Persistence)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-persistence
@@ -1593,15 +1934,19 @@ Type: pom
 Folder: \valuetypes\markdown\persistence
 ----
 
-|Apache Isis Val - Markdown (Persistence)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Val - Markdown (persistence jdo DN5)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-persistence-jdo-dn5
@@ -1609,15 +1954,19 @@ Type: jar
 Folder: \valuetypes\markdown\persistence\jdo-dn5
 ----
 
-|Apache Isis Val - Markdown (persistence jdo DN5)
 |_Dependencies_
 
 * org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
 * org.datanucleus:datanucleus-core:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Markdown (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-ui
@@ -1625,7 +1974,6 @@ Type: pom
 Folder: \valuetypes\markdown\ui
 ----
 
-|Apache Isis Val - Markdown (ui)
 |_Dependencies_
 
 * com.vladsch.flexmark:flexmark-all:jar:${flexmark.version}
@@ -1633,9 +1981,14 @@ Folder: \valuetypes\markdown\ui
 * org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed>
 * org.jsoup:jsoup:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Val - Markdown (ui wicket)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-ui-wkt
@@ -1643,14 +1996,18 @@ Type: jar
 Folder: \valuetypes\markdown\ui\wicket
 ----
 
-|Apache Isis Val - Markdown (ui wicket)
 |_Dependencies_
 
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Val - Server Sent Events (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-sse
@@ -1658,12 +2015,16 @@ Type: pom
 Folder: \valuetypes\sse
 ----
 
-|Apache Isis Val - Server Sent Events (parent)
 |Dynamically updating HTML markup
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Server Sent Events
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-sse-applib
@@ -1671,16 +2032,20 @@ Type: jar
 Folder: \valuetypes\sse\applib
 ----
 
-|Apache Isis Val - Server Sent Events
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Val - Server Sent Events (metamodel)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-sse-metamodel
@@ -1688,15 +2053,23 @@ Type: jar
 Folder: \valuetypes\sse\metamodel
 ----
 
-|Apache Isis Val - Server Sent Events (metamodel)
-|_Dependencies_
+|_Components_
+
+* o.a.i.valuetypes.sse.metamodel.facets.SseAnnotationFacetFactory$Register
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Val - SSE (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-sse-ui
@@ -1704,15 +2077,19 @@ Type: pom
 Folder: \valuetypes\sse\ui
 ----
 
-|Apache Isis Val - SSE (ui)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Val - Server Sent Events (ui wicket)
+[source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-sse-ui-wkt
@@ -1720,12 +2097,22 @@ Type: jar
 Folder: \valuetypes\sse\ui\wicket
 ----
 
-|Apache Isis Val - Server Sent Events (ui wicket)
-|_Dependencies_
+|_Components_
+
+* o.a.i.valuetypes.sse.ui.wkt.markup.ListeningMarkupPanelFactoriesForWicket$Parented
+* o.a.i.valuetypes.sse.ui.wkt.markup.ListeningMarkupPanelFactoriesForWicket$Standalone
+* o.a.i.valuetypes.sse.ui.wkt.services.SseServiceDefault
+* o.a.i.valuetypes.sse.ui.wkt.webmodule.WebModuleServerSentEvents
+
+_Dependencies_
 
 * org.apache.isis.valuetypes:isis-valuetypes-sse-metamodel:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -1825,11 +2212,12 @@ package "Viewer\n[Software System]" {
 ----
 
 .Projects/Modules (Viewer)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Viewer - Common Model
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-common
@@ -1837,16 +2225,27 @@ Type: jar
 Folder: \viewers\common
 ----
 
-|Apache Isis Viewer - Common Model
-|_Dependencies_
+|_Components_
+
+* o.a.i.viewer.common.model.branding.BrandingUiModelProvider
+* o.a.i.viewer.common.model.header.HeaderUiModelProvider
+* o.a.i.viewer.common.model.menu.MenuUiModelProvider
+* o.a.i.viewer.common.model.userprofile.UserProfileUiModelProvider
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.webjars:font-awesome:jar:5.15.0
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Viewer - RO
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-restfulobjects
@@ -1854,10 +2253,14 @@ Type: pom
 Folder: \viewers\restfulobjects
 ----
 
-|Apache Isis Viewer - RO
-|
+|_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
+
 
-|[source,yaml]
+|Apache Isis Viewer - RO (AppLib)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-restfulobjects-applib
@@ -1865,7 +2268,6 @@ Type: jar
 Folder: \viewers\restfulobjects\applib
 ----
 
-|Apache Isis Viewer - RO (AppLib)
 |_Dependencies_
 
 * com.fasterxml.jackson.core:jackson-databind:jar:<managed>
@@ -1873,9 +2275,14 @@ Folder: \viewers\restfulobjects\applib
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Viewer - RO (JAX-RS Resteasy v4)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-restfulobjects-jaxrsresteasy4
@@ -1883,9 +2290,13 @@ Type: jar
 Folder: \viewers\restfulobjects\jaxrs-resteasy-4
 ----
 
-|Apache Isis Viewer - RO (JAX-RS Resteasy v4)
 |JAX-RS plugin using jboss resteasy.
 
+_Components_
+
+* o.a.i.viewer.restfulobjects.jaxrsresteasy4.conneg.RestfulObjectsJaxbWriterForXml
+* o.a.i.viewer.restfulobjects.jaxrsresteasy4.webmodule.WebModuleJaxrsResteasy4
+
 _Dependencies_
 
 * com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:<managed>
@@ -1895,9 +2306,14 @@ _Dependencies_
 * org.datanucleus:javax.jdo:jar:<managed>
 * org.jboss.resteasy:resteasy-spring-boot-starter:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Viewer - RO (Rendering)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-restfulobjects-rendering
@@ -1905,16 +2321,37 @@ Type: jar
 Folder: \viewers\restfulobjects\rendering
 ----
 
-|Apache Isis Viewer - RO (Rendering)
-|_Dependencies_
+|_Components_
+
+* o.a.i.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder
+* o.a.i.viewer.restfulobjects.rendering.service.RepresentationServiceContentNegotiator
+* o.a.i.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest
+* o.a.i.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest$RequestFilter
+* o.a.i.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest$ResponseFilter
+* o.a.i.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationServiceForRestfulObjectsV1_0
+* o.a.i.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationServiceOrgApacheIsisV1
+* o.a.i.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationServiceOrgApacheIsisV2
+* o.a.i.viewer.restfulobjects.rendering.service.conneg.ContentNegotiationServiceXRoDomainType
+* o.a.i.viewer.restfulobjects.rendering.service.swagger.SwaggerServiceDefault
+* o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.ClassExcluderDefault
+* o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.SwaggerSpecGenerator
+* o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.TaggerDefault
+* o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.ValuePropertyFactoryDefault
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Viewer - RO (Testing)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-restfulobjects-testing
@@ -1922,16 +2359,20 @@ Type: jar
 Folder: \viewers\restfulobjects\testing
 ----
 
-|Apache Isis Viewer - RO (Testing)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-restfulobjects-viewer:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Viewer - RO (Viewer)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-restfulobjects-viewer
@@ -1939,8 +2380,22 @@ Type: jar
 Folder: \viewers\restfulobjects\viewer
 ----
 
-|Apache Isis Viewer - RO (Viewer)
-|_Dependencies_
+|_Components_
+
+* o.a.i.viewer.restfulobjects.viewer.mappers.ExceptionMapperForObjectNotFound
+* o.a.i.viewer.restfulobjects.viewer.mappers.ExceptionMapperForRestfulObjectsApplication
+* o.a.i.viewer.restfulobjects.viewer.mappers.ExceptionMapperForRuntimeException
+* o.a.i.viewer.restfulobjects.viewer.resources.DomainObjectResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.DomainServiceResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.DomainTypeResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.HomePageResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.ImageResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.MenuBarsResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.SwaggerSpecResource
+* o.a.i.viewer.restfulobjects.viewer.resources.UserResourceServerside
+* o.a.i.viewer.restfulobjects.viewer.resources.VersionResourceServerside
+
+_Dependencies_
 
 * com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:<managed>
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1949,9 +2404,14 @@ Folder: \viewers\restfulobjects\viewer
 * org.apache.isis.viewer:isis-viewer-restfulobjects-rendering:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Viewer - Wicket
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-wicket
@@ -1959,10 +2419,14 @@ Type: pom
 Folder: \viewers\wicket
 ----
 
-|Apache Isis Viewer - Wicket
-|
+|_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
-|[source,yaml]
+
+|Apache Isis Viewer - Wicket (Model)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-wicket-model
@@ -1970,7 +2434,6 @@ Type: jar
 Folder: \viewers\wicket\model
 ----
 
-|Apache Isis Viewer - Wicket (Model)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1979,9 +2442,14 @@ Folder: \viewers\wicket\model
 * org.apache.wicket:wicket-core:jar:<managed>
 * org.apache.wicket:wicket-extensions:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Viewer - Wicket (UI Components)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-wicket-ui
@@ -1989,8 +2457,12 @@ Type: jar
 Folder: \viewers\wicket\ui
 ----
 
-|Apache Isis Viewer - Wicket (UI Components)
-|_Dependencies_
+|_Components_
+
+* o.a.i.viewer.wicket.ui.app.logout.LogoutHandlerWkt
+* o.a.i.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupportDefault
+
+_Dependencies_
 
 * com.google.guava:guava:jar:<managed>
 * de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
@@ -2011,9 +2483,14 @@ Folder: \viewers\wicket\ui
 * org.webjars.bower:summernote:jar:<managed>
 * org.wicketstuff:wicketstuff-select2:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Viewer - Wicket (Viewer)
+[source,yaml]
 ----
 Group: org.apache.isis.viewer
 Artifact: isis-viewer-wicket-viewer
@@ -2021,8 +2498,24 @@ Type: jar
 Folder: \viewers\wicket\viewer
 ----
 
-|Apache Isis Viewer - Wicket (Viewer)
-|_Dependencies_
+|_Components_
+
+* o.a.i.viewer.wicket.viewer.registries.components.ComponentFactoryRegistrarDefault
+* o.a.i.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault
+* o.a.i.viewer.wicket.viewer.registries.pages.PageClassListDefault
+* o.a.i.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault
+* o.a.i.viewer.wicket.viewer.registries.pages.PageNavigationServiceDefault
+* o.a.i.viewer.wicket.viewer.services.BookmarkUiServiceWicket
+* o.a.i.viewer.wicket.viewer.services.DeepLinkServiceWicket
+* o.a.i.viewer.wicket.viewer.services.HintStoreUsingWicketSession
+* o.a.i.viewer.wicket.viewer.services.ImageResourceCacheClassPath
+* o.a.i.viewer.wicket.viewer.services.LocaleProviderWicket
+* o.a.i.viewer.wicket.viewer.services.TranslationsResolverWicket
+* o.a.i.viewer.wicket.viewer.services.WicketViewerSettingsDefault
+* o.a.i.viewer.wicket.viewer.services.mementos.ObjectMementoServiceWicket
+* o.a.i.viewer.wicket.viewer.webmodule.WebModuleWicket
+
+_Dependencies_
 
 * commons-io:commons-io:jar:<managed>
 * de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
@@ -2034,6 +2527,10 @@ Folder: \viewers\wicket\viewer
 * org.jmock:jmock-junit4:jar:<managed>
 * org.springframework:spring-web:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -2177,11 +2674,12 @@ package "Testing\n[Software System]" {
 ----
 
 .Projects/Modules (Testing)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Testing
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing
@@ -2189,12 +2687,16 @@ Type: pom
 Folder: \testing
 ----
 
-|Apache Isis Testing
 |A library of utilities, mini-frameworks and tools for prototyping and testing Apache Isis applications.
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Tst - FakeData (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-fakedata
@@ -2202,13 +2704,17 @@ Type: pom
 Folder: \testing\fakedata
 ----
 
-|Apache Isis Tst - FakeData (parent)
 |A module providing a domain service to generate fake random data
         for use in unit tests or integration tests.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - FakeData (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-fakedata-applib
@@ -2216,8 +2722,11 @@ Type: jar
 Folder: \testing\fakedata\applib
 ----
 
-|Apache Isis Tst - FakeData (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.testing.fakedata.applib.services.FakeDataService
+
+_Dependencies_
 
 * com.github.javafaker:javafaker:jar:<managed>
 * org.apache.isis.commons:isis-commons:jar:<managed>
@@ -2225,9 +2734,14 @@ Folder: \testing\fakedata\applib
 * org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - FakeData (fixtures)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-fakedata-fixtures
@@ -2235,7 +2749,6 @@ Type: jar
 Folder: \testing\fakedata\fixtures
 ----
 
-|Apache Isis Tst - FakeData (fixtures)
 |_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
@@ -2244,9 +2757,14 @@ Folder: \testing\fakedata\fixtures
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tst - FakeData (integ tests)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-fakedata-integtests
@@ -2254,16 +2772,20 @@ Type: jar
 Folder: \testing\fakedata\integtests
 ----
 
-|Apache Isis Tst - FakeData (integ tests)
 |_Dependencies_
 
 * org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
 * org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-fakedata-fixtures:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - Fixtures (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-fixtures
@@ -2271,12 +2793,16 @@ Type: pom
 Folder: \testing\fixtures
 ----
 
-|Apache Isis Tst - Fixtures (parent)
 |Library to initialize the system under test, either for integration testing or for prototyping.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tst - Fixtures (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-fixtures-applib
@@ -2284,8 +2810,14 @@ Type: jar
 Folder: \testing\fixtures\applib
 ----
 
-|Apache Isis Tst - Fixtures (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.testing.fixtures.applib.fixturescripts.ExecutionParametersService
+* o.a.i.testing.fixtures.applib.modules.ModuleWithFixturesService
+* o.a.i.testing.fixtures.applib.queryresultscache.QueryResultsCacheControlDefault
+* o.a.i.testing.fixtures.applib.services.FixturesLifecycleService
+
+_Dependencies_
 
 * joda-time:joda-time:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
@@ -2294,9 +2826,14 @@ Folder: \testing\fixtures\applib
 * org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tst - H2 Console (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-h2console
@@ -2304,12 +2841,16 @@ Type: pom
 Folder: \testing\h2console
 ----
 
-|Apache Isis Tst - H2 Console (parent)
 |Menu and configuration to open up H2 Console
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Tst - H2 Console (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-h2console-ui
@@ -2317,15 +2858,23 @@ Type: jar
 Folder: \testing\h2console\ui
 ----
 
-|Apache Isis Tst - H2 Console (ui)
-|_Dependencies_
+|_Components_
+
+* o.a.i.testing.h2console.ui.webmodule.WebModuleH2Console
+
+_Dependencies_
 
 * com.h2database:h2:jar:<managed>
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Tst - HSQLDB Manager (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-hsqldbmgr
@@ -2333,12 +2882,16 @@ Type: pom
 Folder: \testing\hsqldbmgr
 ----
 
-|Apache Isis Tst - HSQLDB Manager (parent)
 |Menu and configuration to open up HSQLDB Manager
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - HSQLDB Manager
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-hsqldbmgr-ui
@@ -2346,15 +2899,19 @@ Type: jar
 Folder: \testing\hsqldbmgr\ui
 ----
 
-|Apache Isis Tst - HSQLDB Manager
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 * org.hsqldb:hsqldb:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Tst - Integ Test Support (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-integtestsupport
@@ -2362,12 +2919,16 @@ Type: pom
 Folder: \testing\integtestsupport
 ----
 
-|Apache Isis Tst - Integ Test Support (parent)
 |Support for writing integ tests in JUnit 5; should be added as a dependency with scope=test only
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - Integ Test Support (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-integtestsupport-applib
@@ -2375,8 +2936,11 @@ Type: jar
 Folder: \testing\integtestsupport\applib
 ----
 
-|Apache Isis Tst - Integ Test Support (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.testing.integtestsupport.applib.IsisIntegrationTestAbstract$InteractionSupport
+
+_Dependencies_
 
 * com.approvaltests:approvaltests:jar:<managed>
 * com.h2database:h2:jar:<managed>
@@ -2390,9 +2954,14 @@ Folder: \testing\integtestsupport\applib
 * org.springframework:spring-test:jar:<managed>
 * org.springframework.boot:spring-boot-starter-test:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - Spec/Cucumber (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-specsupport
@@ -2400,12 +2969,16 @@ Type: pom
 Folder: \testing\specsupport
 ----
 
-|Apache Isis Tst - Spec/Cucumber (parent)
 |Allows Cucumber to be used to write BDD-style specifications, generally as an alternative to integration tests.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tst - Spec/Cucumber (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-specsupport-applib
@@ -2413,7 +2986,6 @@ Type: jar
 Folder: \testing\specsupport\applib
 ----
 
-|Apache Isis Tst - Spec/Cucumber (applib)
 |_Dependencies_
 
 * io.cucumber:cucumber-java:jar:<managed>
@@ -2422,9 +2994,14 @@ Folder: \testing\specsupport\applib
 * org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed>
 * org.junit.jupiter:junit-jupiter-api:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Tst - Unit Test Support (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-unittestsupport
@@ -2432,12 +3009,16 @@ Type: pom
 Folder: \testing\unittestsupport
 ----
 
-|Apache Isis Tst - Unit Test Support (parent)
 |A module providing test utilities for unit testing of domain modules
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Tst - Unit Test Support (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.testing
 Artifact: isis-testing-unittestsupport-applib
@@ -2445,7 +3026,6 @@ Type: jar
 Folder: \testing\unittestsupport\applib
 ----
 
-|Apache Isis Tst - Unit Test Support (applib)
 |_Dependencies_
 
 * com.approvaltests:approvaltests:jar:<managed>
@@ -2459,6 +3039,10 @@ Folder: \testing\unittestsupport\applib
 * org.springframework:spring-test:jar:<managed>
 * org.springframework.boot:spring-boot-starter-test:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -2497,11 +3081,12 @@ package "Regression Tests\n[Software System]" {
 ----
 
 .Projects/Modules (Regression Tests)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis - Regression Tests
+[source,yaml]
 ----
 Group: org.apache.isis.regressiontests
 Artifact: isis-regressiontests
@@ -2509,7 +3094,6 @@ Type: pom
 Folder: \regressiontests
 ----
 
-|Apache Isis - Regression Tests
 |Collection of JUnit tests covering core functionalities of the framework.
         (Targeted for JVM 11+)
 
@@ -2536,9 +3120,14 @@ _Dependencies_
 * org.glassfish.jersey.ext:jersey-spring5:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis - Regression Tests (stable)
+[source,yaml]
 ----
 Group: org.apache.isis.regressiontests
 Artifact: isis-regressiontests-stable
@@ -2546,12 +3135,27 @@ Type: jar
 Folder: \regressiontests\stable
 ----
 
-|Apache Isis - Regression Tests (stable)
-|_Dependencies_
+|_Components_
+
+* o.a.i.testdomain.applayer.ApplicationLayerTestFactory
+* o.a.i.testdomain.applayer.ApplicationLayerTestFactory$PreCommitListener
+* o.a.i.testdomain.applayer.publishing.CommandSubscriberForTesting
+* o.a.i.testdomain.applayer.publishing.EntityChangesSubscriberForTesting
+* o.a.i.testdomain.applayer.publishing.EntityPropertyChangeSubscriberForTesting
+* o.a.i.testdomain.applayer.publishing.ExecutionSubscriberForTesting
+* o.a.i.testdomain.conf.Configuration_headless$HeadlessCommandSupport
+* o.a.i.testdomain.util.kv.KVStoreForTesting
+* o.a.i.testdomain.util.rest.RestEndpointService
+
+_Dependencies_
 
 * org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed>
 * org.glassfish.jersey.ext:jersey-spring5:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -2786,11 +3390,12 @@ package "Extensions\n[Software System]" {
 ----
 
 .Projects/Modules (Extensions)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Extensions
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions
@@ -2798,7 +3403,6 @@ Type: pom
 Folder: \extensions
 ----
 
-|Apache Isis Extensions
 |Extensions to the Apache Isis framework itself.
 		These are _not_ intended to be called by the domain logic of an Apache Isis application (see instead org.apache.isis.platform).
 
@@ -2806,9 +3410,14 @@ _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Command Log
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-command-log
@@ -2816,12 +3425,16 @@ Type: pom
 Folder: \extensions\core\command-log
 ----
 
-|Apache Isis Ext - Command Log
 |Logs commands
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Command Log Implementation (JDO)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-command-log-jdo
@@ -2829,8 +3442,15 @@ Type: jar
 Folder: \extensions\core\command-log\impl
 ----
 
-|Apache Isis Ext - Command Log Implementation (JDO)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.commandlog.impl.CommandSubscriberForJdo
+* o.a.i.extensions.commandlog.impl.jdo.CommandJdo$TableColumnOrderDefault
+* o.a.i.extensions.commandlog.impl.jdo.CommandJdo$TitleProvider
+* o.a.i.extensions.commandlog.impl.jdo.CommandJdoRepository
+* o.a.i.extensions.commandlog.impl.ui.CommandServiceMenu
+
+_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -2838,9 +3458,14 @@ Folder: \extensions\core\command-log\impl
 * org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Command Replay
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-command-replay
@@ -2848,12 +3473,16 @@ Type: pom
 Folder: \extensions\core\command-replay
 ----
 
-|Apache Isis Ext - Command Replay
 |Replays commands to secondary system
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - Command Replay for Primary
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-command-replay-primary
@@ -2861,9 +3490,13 @@ Type: jar
 Folder: \extensions\core\command-replay\primary
 ----
 
-|Apache Isis Ext - Command Replay for Primary
 |A module for obtaining commands from a primary
 
+_Components_
+
+* o.a.i.extensions.commandreplay.primary.config.PrimaryConfig
+* o.a.i.extensions.commandreplay.primary.spiimpl.CaptureResultOfCommand
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -2874,9 +3507,14 @@ _Dependencies_
 * org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed>
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Command Replay for Secondary
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-command-replay-secondary
@@ -2884,10 +3522,19 @@ Type: jar
 Folder: \extensions\core\command-replay\secondary
 ----
 
-|Apache Isis Ext - Command Replay for Secondary
 |A module providing a Quartz Job to run on a secondary system,
 		for obtaining commands from a primary and saving them so that they are replayed.
 
+_Components_
+
+* o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserException
+* o.a.i.extensions.commandreplay.secondary.analyser.CommandReplayAnalyserResult
+* o.a.i.extensions.commandreplay.secondary.analysis.CommandReplayAnalysisService
+* o.a.i.extensions.commandreplay.secondary.clock.TickingClockService
+* o.a.i.extensions.commandreplay.secondary.config.SecondaryConfig
+* o.a.i.extensions.commandreplay.secondary.executor.CommandExecutorServiceWithTime
+* o.a.i.extensions.commandreplay.secondary.fetch.CommandFetcher
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -2898,9 +3545,14 @@ _Dependencies_
 * org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed>
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - CORS (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-cors
@@ -2908,12 +3560,16 @@ Type: pom
 Folder: \extensions\vro\cors
 ----
 
-|Apache Isis Ext - CORS (parent)
 |Implementation of CORS Filter (using ebay filter)
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - CORS (impl)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-cors-impl
@@ -2921,7 +3577,6 @@ Type: jar
 Folder: \extensions\vro\cors\impl
 ----
 
-|Apache Isis Ext - CORS (impl)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -2929,9 +3584,14 @@ Folder: \extensions\vro\cors\impl
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 * org.springframework:spring-web:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Wicket Viewer - Excel Download (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-exceldownload
@@ -2939,12 +3599,16 @@ Type: pom
 Folder: \extensions\vw\exceldownload
 ----
 
-|Apache Isis Ext - Wicket Viewer - Excel Download (parent)
 |A component for Apache Isis' Wicket viewer, providing an alternative representation of collections to be downloaded as an Excel spreadsheet.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - Wicket Viewer - Excel Download (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-exceldownload-ui
@@ -2952,16 +3616,24 @@ Type: jar
 Folder: \extensions\vw\exceldownload\ui
 ----
 
-|Apache Isis Ext - Wicket Viewer - Excel Download (ui)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.viewer.wicket.exceldownload.ui.components.CollectionContentsAsExcelFactory
+
+_Dependencies_
 
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 * org.apache.poi:poi-ooxml:jar:<managed>
 * org.apache.poi:poi-ooxml-schemas:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - Flyway
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-flyway
@@ -2969,12 +3641,16 @@ Type: pom
 Folder: \extensions\core\flyway
 ----
 
-|Apache Isis Ext - Flyway
 |Integrates Flyway when using any (relational) persistence store
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Flyway Impl
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-flyway-impl
@@ -2982,7 +3658,6 @@ Type: jar
 Folder: \extensions\core\flyway\impl
 ----
 
-|Apache Isis Ext - Flyway Impl
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -2991,9 +3666,14 @@ Folder: \extensions\core\flyway\impl
 * org.springframework:spring-jdbc:jar:<managed>
 * org.springframework.boot:spring-boot-autoconfigure:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - Wicket Viewer - fullcalendar (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-fullcalendar
@@ -3001,12 +3681,16 @@ Type: pom
 Folder: \extensions\vw\fullcalendar
 ----
 
-|Apache Isis Ext - Wicket Viewer - fullcalendar (parent)
 |A component for Apache Isis' Wicket viewer, displaying collections of objects that have a date on a fullcalendar.io (javascript widget).
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Wicket Viewer - fullcalendar (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-fullcalendar-applib
@@ -3014,15 +3698,19 @@ Type: jar
 Folder: \extensions\vw\fullcalendar\applib
 ----
 
-|Apache Isis Ext - Wicket Viewer - fullcalendar (applib)
 |_Dependencies_
 
 * de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Wicket Viewer - fullcalendar (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-fullcalendar-ui
@@ -3030,16 +3718,20 @@ Type: jar
 Folder: \extensions\vw\fullcalendar\ui
 ----
 
-|Apache Isis Ext - Wicket Viewer - fullcalendar (ui)
 |_Dependencies_
 
 * net.ftlines.wicket-fullcalendar:wicket-fullcalendar-core:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-fullcalendar-applib:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - @Model
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-modelannotation
@@ -3047,18 +3739,26 @@ Type: jar
 Folder: \extensions\core\model-annotation
 ----
 
-|Apache Isis Ext - @Model
 |Allows supporting methods to be annotated as @Model, to make explicit the bounds of the metamodel.
 
+_Components_
+
+* o.a.i.extensions.modelannotation.metamodel.services.IncubatorMetaModelPlugin
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Wicket Viewer - pdf.js (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-pdfjs
@@ -3066,12 +3766,16 @@ Type: pom
 Folder: \extensions\vw\pdfjs
 ----
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (parent)
 |A component for Apache Isis' Wicket viewer, allowing BLOBs containing PDFs to be rendered in a panel using pdf.js.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - Wicket Viewer - pdf.js (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-pdfjs-applib
@@ -3079,15 +3783,19 @@ Type: jar
 Folder: \extensions\vw\pdfjs\applib
 ----
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (applib)
 |_Dependencies_
 
 * de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-pdfjs-metamodel
@@ -3095,16 +3803,24 @@ Type: jar
 Folder: \extensions\vw\pdfjs\metamodel
 ----
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (metamodel)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.viewer.wicket.pdfjs.metamodel.facet.PdfJsViewerFacetFromAnnotationFactory$Register
+
+_Dependencies_
 
 * de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed>
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-pdfjs-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Wicket Viewer - pdf.js (ui)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-pdfjs-ui
@@ -3112,15 +3828,23 @@ Type: jar
 Folder: \extensions\vw\pdfjs\ui
 ----
 
-|Apache Isis Ext - Wicket Viewer - pdf.js (ui)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.viewer.wicket.pdfjs.ui.components.PdfJsViewerPanelComponentFactory
+
+_Dependencies_
 
 * org.apache.isis.extensions:isis-extensions-pdfjs-metamodel:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Quartz
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-quartz
@@ -3128,12 +3852,16 @@ Type: pom
 Folder: \extensions\core\quartz
 ----
 
-|Apache Isis Ext - Quartz
 |Integrates Quartz
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Quartz Impl
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-quartz-impl
@@ -3141,7 +3869,6 @@ Type: jar
 Folder: \extensions\core\quartz\impl
 ----
 
-|Apache Isis Ext - Quartz Impl
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-config:jar:<managed>
@@ -3149,9 +3876,14 @@ Folder: \extensions\core\quartz\impl
 * org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
 * org.springframework.boot:spring-boot-starter-quartz:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Ext - Sec Man
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-secman
@@ -3159,15 +3891,19 @@ Type: pom
 Folder: \extensions\security\secman
 ----
 
-|Apache Isis Ext - Sec Man
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-metamodel:jar:<managed>
 * org.apache.isis.core:isis-core-security:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Sec Man API
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-secman-api
@@ -3175,10 +3911,14 @@ Type: jar
 Folder: \extensions\security\secman\api
 ----
 
-|Apache Isis Ext - Sec Man API
-|
+|_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Sec Man Encryption (Using jbcrypt)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-secman-encryption-jbcrypt
@@ -3186,16 +3926,24 @@ Type: jar
 Folder: \extensions\security\secman\encryption-jbcrypt
 ----
 
-|Apache Isis Ext - Sec Man Encryption (Using jbcrypt)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.secman.encryption.jbcrypt.services.PasswordEncryptionServiceUsingJBcrypt
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
 * org.mindrot:jbcrypt:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Sec Man Model
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-secman-model
@@ -3203,15 +3951,23 @@ Type: jar
 Folder: \extensions\security\secman\model
 ----
 
-|Apache Isis Ext - Sec Man Model
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.secman.model.facets.TenantedAuthorizationFacetFactory$Register
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Ext - Sec Man Persistence (Using JDO)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-secman-persistence-jdo
@@ -3219,8 +3975,15 @@ Type: jar
 Folder: \extensions\security\secman\persistence-jdo
 ----
 
-|Apache Isis Ext - Sec Man Persistence (Using JDO)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.secman.jdo.dom.permission.ApplicationPermissionRepository
+* o.a.i.extensions.secman.jdo.dom.role.ApplicationRoleRepository
+* o.a.i.extensions.secman.jdo.dom.tenancy.ApplicationTenancyRepository
+* o.a.i.extensions.secman.jdo.dom.user.ApplicationUserRepository
+* o.a.i.extensions.secman.jdo.seed.SeedSecurityModuleService
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-api:jar:2.0.0-SNAPSHOT
@@ -3228,9 +3991,14 @@ Folder: \extensions\security\secman\persistence-jdo
 * org.apache.isis.persistence:isis-persistence-jdo-datanucleus5:jar:<managed>
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:2.0.0-SNAPSHOT
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Sec Man Realm (Using Shiro)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-secman-shiro-realm
@@ -3238,16 +4006,24 @@ Type: jar
 Folder: \extensions\security\secman\shiro-realm
 ----
 
-|Apache Isis Ext - Sec Man Realm (Using Shiro)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.secman.shiro.services.SecurityRealmServiceUsingShiro
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-api:jar:2.0.0-SNAPSHOT
 * org.apache.isis.security:isis-security-shiro:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Security - Shiro LDAP Realm (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-shiro-realm-ldap
@@ -3255,12 +4031,16 @@ Type: pom
 Folder: \extensions\security\shiro-realm-ldap
 ----
 
-|Apache Isis Ext - Security - Shiro LDAP Realm (parent)
 |Implementation of Shiro Realm using LDAP.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Ext - Security - Shiro LDAP Realm (impl)
+[source,yaml]
 ----
 Group: org.apache.isis.extensions
 Artifact: isis-extensions-shiro-realm-ldap-impl
@@ -3268,12 +4048,15 @@ Type: jar
 Folder: \extensions\security\shiro-realm-ldap\impl
 ----
 
-|Apache Isis Ext - Security - Shiro LDAP Realm (impl)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
 * org.apache.isis.security:isis-security-shiro:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -3293,12 +4076,12 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<11>> {
+skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -3452,11 +4235,12 @@ package "Subdomains\n[Software System]" {
 ----
 
 .Projects/Modules (Subdomains)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Subdomains
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains
@@ -3464,7 +4248,6 @@ Type: pom
 Folder: \subdomains
 ----
 
-|Apache Isis Subdomains
 |A library of domain services and of supporting subdomains (often technical in nature), to be called from the
 		core domain of an Apache Isis applications.
 
@@ -3472,9 +4255,14 @@ _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Base (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-base
@@ -3482,12 +4270,16 @@ Type: pom
 Folder: \subdomains\base
 ----
 
-|Apache Isis Sub - Base (parent)
 |A module providing Base utilities for other subdomain modules
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Base (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-base-applib
@@ -3495,8 +4287,11 @@ Type: jar
 Folder: \subdomains\base\applib
 ----
 
-|Apache Isis Sub - Base (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.subdomains.base.applib.services.calendar.CalendarService
+
+_Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
@@ -3504,9 +4299,14 @@ Folder: \subdomains\base\applib
 * org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Docx (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-docx
@@ -3514,12 +4314,16 @@ Type: pom
 Folder: \subdomains\docx
 ----
 
-|Apache Isis Sub - Docx (parent)
 |Uses the Apache POI library for mail merge functions of .docx Word documents
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Docx (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-docx-applib
@@ -3527,14 +4331,18 @@ Type: jar
 Folder: \subdomains\docx\applib
 ----
 
-|Apache Isis Sub - Docx (applib)
 |_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Excel (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-excel
@@ -3542,14 +4350,18 @@ Type: pom
 Folder: \subdomains\excel
 ----
 
-|Apache Isis Sub - Excel (parent)
 |A domain service for Apache Isis', allowing collections
         of (view model) objects to be exported/imported to/from an
         Excel spreadsheet.  Also support for excel-based fixtures.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Excel (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-excel-applib
@@ -3557,8 +4369,11 @@ Type: jar
 Folder: \subdomains\excel\applib
 ----
 
-|Apache Isis Sub - Excel (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.subdomains.excel.applib.dom.ExcelService
+
+_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -3568,9 +4383,14 @@ Folder: \subdomains\excel\applib
 * org.apache.poi:poi-ooxml-schemas:jar:<managed>
 * org.datanucleus:datanucleus-core:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Excel (Fixtures)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-excel-fixtures
@@ -3578,7 +4398,6 @@ Type: jar
 Folder: \subdomains\excel\fixture
 ----
 
-|Apache Isis Sub - Excel (Fixtures)
 |_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
@@ -3588,9 +4407,14 @@ Folder: \subdomains\excel\fixture
 * org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Excel (Integ Tests)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-excel-integtests
@@ -3598,7 +4422,6 @@ Type: jar
 Folder: \subdomains\excel\integtests
 ----
 
-|Apache Isis Sub - Excel (Integ Tests)
 |_Dependencies_
 
 * org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed>
@@ -3607,9 +4430,14 @@ Folder: \subdomains\excel\integtests
 * org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed>
 * org.hsqldb:hsqldb:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Excel (testing support)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-excel-testing
@@ -3617,15 +4445,19 @@ Type: jar
 Folder: \subdomains\excel\testing
 ----
 
-|Apache Isis Sub - Excel (testing support)
 |_Dependencies_
 
 * org.apache.isis.subdomains:isis-subdomains-excel-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Freemarker (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-freemarker
@@ -3633,12 +4465,16 @@ Type: pom
 Folder: \subdomains\freemarker
 ----
 
-|Apache Isis Sub - Freemarker (parent)
 |Integrates Freemarker Library
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Freemarker (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-freemarker-applib
@@ -3646,14 +4482,18 @@ Type: jar
 Folder: \subdomains\freemarker\applib
 ----
 
-|Apache Isis Sub - Freemarker (applib)
 |_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Ognl (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-ognl
@@ -3661,12 +4501,16 @@ Type: pom
 Folder: \subdomains\ognl
 ----
 
-|Apache Isis Sub - Ognl (parent)
 |Integrates Ognl Library
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Ognl (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-ognl-applib
@@ -3674,14 +4518,18 @@ Type: jar
 Folder: \subdomains\ognl\applib
 ----
 
-|Apache Isis Sub - Ognl (applib)
 |_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - PDF Box (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-pdfbox
@@ -3689,12 +4537,16 @@ Type: pom
 Folder: \subdomains\pdfbox
 ----
 
-|Apache Isis Sub - PDF Box (parent)
 |Integrates PDF Box Library
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - PDF Box (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-pdfbox-applib
@@ -3702,16 +4554,20 @@ Type: jar
 Folder: \subdomains\pdfbox\applib
 ----
 
-|Apache Isis Sub - PDF Box (applib)
 |Integrates PDF Box Library
 
 _Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Spring (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-spring
@@ -3719,12 +4575,16 @@ Type: pom
 Folder: \subdomains\spring
 ----
 
-|Apache Isis Sub - Spring (parent)
 |Utility services for interacting with the Spring application context (that hosts the Apache Isis application itself)
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Spring (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-spring-applib
@@ -3732,15 +4592,23 @@ Type: jar
 Folder: \subdomains\spring\applib
 ----
 
-|Apache Isis Sub - Spring (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.subdomains.spring.applib.service.SpringBeansService
+
+_Dependencies_
 
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - XdocReport (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-xdocreport
@@ -3748,12 +4616,16 @@ Type: pom
 Folder: \subdomains\xdocreport
 ----
 
-|Apache Isis Sub - XdocReport (parent)
 |Integrates XDoc Report Library
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - XdocReport (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-xdocreport-applib
@@ -3761,8 +4633,11 @@ Type: jar
 Folder: \subdomains\xdocreport\applib
 ----
 
-|Apache Isis Sub - XdocReport (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.subdomains.xdocreport.applib.service.XDocReportService
+
+_Dependencies_
 
 * fr.opensagres.xdocreport:fr.opensagres.xdocreport.converter.docx.xwpf:jar:<managed>
 * fr.opensagres.xdocreport:fr.opensagres.xdocreport.document.docx:jar:<managed>
@@ -3773,9 +4648,14 @@ Folder: \subdomains\xdocreport\applib
 * org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Zip (parent)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-zip
@@ -3783,12 +4663,16 @@ Type: pom
 Folder: \subdomains\zip
 ----
 
-|Apache Isis Sub - Zip (parent)
 |A domain service for Apache Isis', for zipping utilities.
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Sub - Zip (applib)
+[source,yaml]
 ----
 Group: org.apache.isis.subdomains
 Artifact: isis-subdomains-zip-applib
@@ -3796,13 +4680,20 @@ Type: jar
 Folder: \subdomains\zip\applib
 ----
 
-|Apache Isis Sub - Zip (applib)
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.zip.dom.impl.ZipService
+
+_Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.apache.isis.core:isis-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -3869,11 +4760,12 @@ package "Tooling\n[Software System]" {
 ----
 
 .Projects/Modules (Tooling)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis - Tooling
+[source,yaml]
 ----
 Group: org.apache.isis.tooling
 Artifact: isis-tooling
@@ -3881,7 +4773,6 @@ Type: pom
 Folder: \tooling
 ----
 
-|Apache Isis - Tooling
 |Libraries and tools not depending on the _Apache Isis Core_ ecosystem, 
         eg. code mining, automated documentation.
         (Targeted for JVM 11+)
@@ -3897,9 +4788,14 @@ _Dependencies_
 * org.slf4j:slf4j-api:jar:<managed>
 * org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tooling - C4 Modeling
+[source,yaml]
 ----
 Group: org.apache.isis.tooling
 Artifact: isis-tooling-c4modeling
@@ -3907,7 +4803,6 @@ Type: jar
 Folder: \tooling\c4modeling
 ----
 
-|Apache Isis Tooling - C4 Modeling
 |Library for programmatic C4 Model generation. 
         
         See https://c4model.com/
@@ -3918,9 +4813,14 @@ _Dependencies_
 * com.structurizr:structurizr-plantuml:jar:<managed>
 * org.apache.isis.commons:isis-commons:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tooling - CLI (Command Line Interface)
+[source,yaml]
 ----
 Group: org.apache.isis.tooling
 Artifact: isis-tooling-cli
@@ -3928,7 +4828,6 @@ Type: jar
 Folder: \tooling\cli
 ----
 
-|Apache Isis Tooling - CLI (Command Line Interface)
 |Command Line Interface for the _Apache Isis Tooling_ ecosystem.
 
 _Dependencies_
@@ -3940,9 +4839,14 @@ _Dependencies_
 * org.apache.isis.tooling:isis-tooling-model4adoc:jar:<managed>
 * org.apache.isis.tooling:isis-tooling-projectmodel:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tooling - Java Model (Code Mining)
+[source,yaml]
 ----
 Group: org.apache.isis.tooling
 Artifact: isis-tooling-javamodel
@@ -3950,17 +4854,22 @@ Type: jar
 Folder: \tooling\javamodel
 ----
 
-|Apache Isis Tooling - Java Model (Code Mining)
 |Code mining library for Java bytecode introspection.
 
 _Dependencies_
 
+* com.github.javaparser:javaparser-core:jar:${javaparser.version}
 * guru.nidi:code-assert:jar:${code-assert.version}
 * org.apache.isis.commons:isis-commons:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tooling - Model for AsciiDoc
+[source,yaml]
 ----
 Group: org.apache.isis.tooling
 Artifact: isis-tooling-model4adoc
@@ -3968,7 +4877,6 @@ Type: jar
 Folder: \tooling\model4adoc
 ----
 
-|Apache Isis Tooling - Model for AsciiDoc
 |Library for programmatic AsciiDoc generation. 
         
         The AsciiDoc name is trademarked by the Eclipse Foundation (https://www.eclipse.org/).
@@ -3983,9 +4891,14 @@ _Dependencies_
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.asciidoctor:asciidoctorj:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Tooling - Project Model (Code mining)
+[source,yaml]
 ----
 Group: org.apache.isis.tooling
 Artifact: isis-tooling-projectmodel
@@ -3993,7 +4906,6 @@ Type: jar
 Folder: \tooling\projectmodel
 ----
 
-|Apache Isis Tooling - Project Model (Code mining)
 |Code mining library for Gradle/Maven project module tree introspection.
 
 _Dependencies_
@@ -4002,6 +4914,10 @@ _Dependencies_
 * org.apache.maven:maven-model-builder:jar:<managed>
 * org.gradle:gradle-tooling-api:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -4068,11 +4984,12 @@ package "Examples\n[Software System]" {
 ----
 
 .Projects/Modules (Examples)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Demo - Parent
+[source,yaml]
 ----
 Group: org.apache.isis.examples.apps
 Artifact: demo-parent
@@ -4080,7 +4997,6 @@ Type: pom
 Folder: \examples\demo
 ----
 
-|Demo - Parent
 |_Dependencies_
 
 * com.h2database:h2:jar:<managed>
@@ -4098,9 +5014,14 @@ Folder: \examples\demo
 * org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Demo - Domain
+[source,yaml]
 ----
 Group: org.apache.isis.examples.apps
 Artifact: demo-domain
@@ -4108,8 +5029,170 @@ Type: jar
 Folder: \examples\demo\domain
 ----
 
-|Demo - Domain
-|_Dependencies_
+|_Components_
+
+* demoapp.dom._infra.DefaultTitleProvider
+* demoapp.dom._infra.LibraryPreloadingService
+* demoapp.dom._infra.fixtures.DemoFixtureScriptSpecificationProvider
+* demoapp.dom._infra.resources.AsciiDocConverterService
+* demoapp.dom._infra.resources.AsciiDocReaderService
+* demoapp.dom._infra.resources.MarkdownReaderService
+* demoapp.dom._infra.resources.MarkupReaderService
+* demoapp.dom._infra.resources.MarkupVariableResolverService
+* demoapp.dom._infra.resources.ResourceReaderService
+* demoapp.dom._infra.samples.NameSamples
+* demoapp.dom._infra.urlencoding.UrlEncodingServiceNaiveInMemory
+* demoapp.dom.annotDomain.Action.commandPublishing.ActionCommandPublishingJdoEntities
+* demoapp.dom.annotDomain.Action.commandPublishing.ActionCommandPublishingJdoSeedService
+* demoapp.dom.annotDomain.Action.executionPublishing.ActionExecutionPublishingJdoEntities
+* demoapp.dom.annotDomain.Action.executionPublishing.ActionExecutionPublishingJdoSeedService
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoSeedService
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoSeedService
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities
+* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService
+* demoapp.dom.annotDomain.Property.commandPublishing.PropertyCommandPublishingJdoEntities
+* demoapp.dom.annotDomain.Property.commandPublishing.PropertyCommandPublishingJdoSeedService
+* demoapp.dom.annotDomain.Property.executionPublishing.PropertyExecutionPublishingJdoEntities
+* demoapp.dom.annotDomain.Property.executionPublishing.PropertyExecutionPublishingJdoSeedService
+* demoapp.dom.annotDomain.Property.projecting.jdo.PropertyProjectingChildJdoEntities
+* demoapp.dom.annotDomain.Property.projecting.jdo.PropertyProjectingChildJdoSeedService
+* demoapp.dom.annotDomain._changes.EntityChangesSubscriberToCaptureChangesInMemory
+* demoapp.dom.annotDomain._commands.ExposePersistedCommands$TableColumnOrderDefault
+* demoapp.dom.annotDomain._interactions.ExecutionListenerToCaptureInteractionsInMemory
+* demoapp.dom.annotLayout.PropertyLayout.navigable.FileTreeNodeService
+* demoapp.dom.annotLayout.PropertyLayout.repainting.PdfJsViewerAdvisorFallback
+* demoapp.dom.error.service.DemoErrorReportingService
+* demoapp.dom.events.DemoEventSubscriber
+* demoapp.dom.events.EventLogRepository
+* demoapp.dom.extensions.secman.apptenancy.ApplicationTenancyEvaluatorForDemo
+* demoapp.dom.extensions.secman.apptenancy.entities.TenantedJdoEntities
+* demoapp.dom.extensions.secman.apptenancy.entities.seed.TenantedJdoSeedService
+* demoapp.dom.jee.DemoRequestScopedBean
+* demoapp.dom.jee.JeeDemoService
+* demoapp.dom.services.wrapperFactory.WrapperFactoryJdoEntities
+* demoapp.dom.services.wrapperFactory.WrapperFactoryJdoSeedService
+* demoapp.dom.types.isis.blobs.jdo.IsisBlobJdoEntities
+* demoapp.dom.types.isis.blobs.jdo.IsisBlobJdoSeedService
+* demoapp.dom.types.isis.blobs.samples.IsisBlobsSamples
+* demoapp.dom.types.isis.clobs.jdo.IsisClobJdoEntities
+* demoapp.dom.types.isis.clobs.jdo.IsisClobJdoSeedService
+* demoapp.dom.types.isis.clobs.samples.IsisClobsSamples
+* demoapp.dom.types.isis.localresourcepaths.jdo.IsisLocalResourcePathJdoEntities
+* demoapp.dom.types.isis.localresourcepaths.jdo.IsisLocalResourcePathJdoSeedService
+* demoapp.dom.types.isis.localresourcepaths.samples.IsisLocalResourcePathsSamples
+* demoapp.dom.types.isis.markups.jdo.IsisMarkupJdoEntities
+* demoapp.dom.types.isis.markups.jdo.IsisMarkupJdoSeedService
+* demoapp.dom.types.isis.markups.samples.IsisMarkupSamples
+* demoapp.dom.types.isis.passwords.jdo.IsisPasswordJdoEntities
+* demoapp.dom.types.isis.passwords.jdo.IsisPasswordJdoSeedService
+* demoapp.dom.types.isis.passwords.samples.IsisPasswordsSamples
+* demoapp.dom.types.isisext.asciidocs.jdo.IsisAsciiDocJdoEntities
+* demoapp.dom.types.isisext.asciidocs.jdo.IsisAsciiDocJdoSeedService
+* demoapp.dom.types.isisext.asciidocs.samples.IsisAsciiDocSamples
+* demoapp.dom.types.isisext.markdowns.jdo.IsisMarkdownJdoEntities
+* demoapp.dom.types.isisext.markdowns.jdo.IsisMarkdownJdoSeedService
+* demoapp.dom.types.isisext.markdowns.samples.IsisMarkdownSamples
+* demoapp.dom.types.javaawt.images.jdo.JavaAwtImageJdoEntities
+* demoapp.dom.types.javaawt.images.jdo.JavaAwtImageJdoSeedService
+* demoapp.dom.types.javaawt.images.samples.JavaAwtImageService
+* demoapp.dom.types.javaawt.images.samples.JavaAwtImagesSamples
+* demoapp.dom.types.javalang.booleans.jdo.WrapperBooleanJdoEntities
+* demoapp.dom.types.javalang.booleans.jdo.WrapperBooleanJdoSeedService
+* demoapp.dom.types.javalang.booleans.samples.WrapperBooleanSamples
+* demoapp.dom.types.javalang.bytes.jdo.WrapperByteJdoEntities
+* demoapp.dom.types.javalang.bytes.jdo.WrapperByteJdoSeedService
+* demoapp.dom.types.javalang.bytes.samples.WrapperByteSamples
+* demoapp.dom.types.javalang.characters.jdo.WrapperCharacterJdoEntities
+* demoapp.dom.types.javalang.characters.jdo.WrapperCharacterJdoSeedService
+* demoapp.dom.types.javalang.characters.samples.WrapperCharacterSamples
+* demoapp.dom.types.javalang.doubles.jdo.WrapperDoubleJdoEntities
+* demoapp.dom.types.javalang.doubles.jdo.WrapperDoubleJdoSeedService
+* demoapp.dom.types.javalang.doubles.samples.WrapperDoubleSamples
+* demoapp.dom.types.javalang.floats.jdo.WrapperFloatJdoEntities
+* demoapp.dom.types.javalang.floats.jdo.WrapperFloatJdoSeedService
+* demoapp.dom.types.javalang.floats.samples.WrapperFloatSamples
+* demoapp.dom.types.javalang.integers.jdo.WrapperIntegerJdoEntities
+* demoapp.dom.types.javalang.integers.jdo.WrapperIntegerJdoSeedService
+* demoapp.dom.types.javalang.integers.samples.WrapperIntegerSamples
+* demoapp.dom.types.javalang.longs.jdo.WrapperLongJdoEntities
+* demoapp.dom.types.javalang.longs.jdo.WrapperLongJdoSeedService
+* demoapp.dom.types.javalang.longs.samples.WrapperLongSamples
+* demoapp.dom.types.javalang.shorts.jdo.WrapperShortJdoEntities
+* demoapp.dom.types.javalang.shorts.jdo.WrapperShortJdoSeedService
+* demoapp.dom.types.javalang.shorts.samples.WrapperShortSamples
+* demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoEntities
+* demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoSeedService
+* demoapp.dom.types.javalang.strings.samples.JavaLangStringSamples
+* demoapp.dom.types.javamath.bigdecimals.jdo.JavaMathBigDecimalJdoEntities
+* demoapp.dom.types.javamath.bigdecimals.jdo.JavaMathBigDecimalJdoSeedService
+* demoapp.dom.types.javamath.bigdecimals.samples.JavaMathBigDecimalSamples
+* demoapp.dom.types.javamath.bigintegers.jdo.JavaMathBigIntegerJdoEntities
+* demoapp.dom.types.javamath.bigintegers.jdo.JavaMathBigIntegerJdoSeedService
+* demoapp.dom.types.javamath.bigintegers.samples.JavaMathBigIntegerSamples
+* demoapp.dom.types.javanet.urls.jdo.JavaNetUrlJdoEntities
+* demoapp.dom.types.javanet.urls.jdo.JavaNetUrlJdoSeedService
+* demoapp.dom.types.javanet.urls.samples.JavaNetUrlSamples
+* demoapp.dom.types.javasql.javasqldate.jdo.JavaSqlDateJdoEntities
+* demoapp.dom.types.javasql.javasqldate.jdo.JavaSqlDateJdoSeedService
+* demoapp.dom.types.javasql.javasqldate.samples.JavaSqlDateSamples
+* demoapp.dom.types.javasql.javasqltimestamp.jdo.JavaSqlTimestampJdoEntities
+* demoapp.dom.types.javasql.javasqltimestamp.jdo.JavaSqlTimestampJdoSeedService
+* demoapp.dom.types.javasql.javasqltimestamp.samples.JavaSqlTimestampSamples
+* demoapp.dom.types.javatime.javatimelocaldate.jdo.JavaTimeLocalDateJdoEntities
+* demoapp.dom.types.javatime.javatimelocaldate.jdo.JavaTimeLocalDateJdoSeedService
+* demoapp.dom.types.javatime.javatimelocaldate.samples.JavaTimeLocalDateSamples
+* demoapp.dom.types.javatime.javatimelocaldatetime.jdo.JavaTimeLocalDateTimeJdoEntities
+* demoapp.dom.types.javatime.javatimelocaldatetime.jdo.JavaTimeLocalDateTimeJdoSeedService
+* demoapp.dom.types.javatime.javatimelocaldatetime.samples.JavaTimeLocalDateTimeSamples
+* demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo.JavaTimeOffsetDateTimeJdoEntities
+* demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo.JavaTimeOffsetDateTimeJdoSeedService
+* demoapp.dom.types.javatime.javatimeoffsetdatetime.samples.JavaTimeOffsetDateTimeSamples
+* demoapp.dom.types.javatime.javatimeoffsettime.jdo.JavaTimeOffsetTimeJdoEntities
+* demoapp.dom.types.javatime.javatimeoffsettime.jdo.JavaTimeOffsetTimeJdoSeedService
+* demoapp.dom.types.javatime.javatimeoffsettime.samples.JavaTimeOffsetTimeSamples
+* demoapp.dom.types.javatime.javatimezoneddatetime.jdo.JavaTimeZonedDateTimeJdoEntities
+* demoapp.dom.types.javatime.javatimezoneddatetime.jdo.JavaTimeZonedDateTimeJdoSeedService
+* demoapp.dom.types.javatime.javatimezoneddatetime.samples.JavaTimeZonedDateTimeSamples
+* demoapp.dom.types.javautil.javautildate.jdo.JavaUtilDateJdoEntities
+* demoapp.dom.types.javautil.javautildate.jdo.JavaUtilDateJdoSeedService
+* demoapp.dom.types.javautil.javautildate.samples.JavaUtilDateSamples
+* demoapp.dom.types.javautil.uuids.jdo.JavaUtilUuidJdoEntities
+* demoapp.dom.types.javautil.uuids.jdo.JavaUtilUuidJdoSeedService
+* demoapp.dom.types.javautil.uuids.samples.JavaUtilUuidSamples
+* demoapp.dom.types.jodatime.jodadatetime.jdo.JodaDateTimeJdoEntities
+* demoapp.dom.types.jodatime.jodadatetime.jdo.JodaDateTimeJdoSeedService
+* demoapp.dom.types.jodatime.jodadatetime.samples.JodaDateTimeSamples
+* demoapp.dom.types.jodatime.jodalocaldate.jdo.JodaLocalDateJdoEntities
+* demoapp.dom.types.jodatime.jodalocaldate.jdo.JodaLocalDateJdoSeedService
+* demoapp.dom.types.jodatime.jodalocaldate.samples.JodaLocalDateSamples
+* demoapp.dom.types.jodatime.jodalocaldatetime.jdo.JodaLocalDateTimeJdoEntities
+* demoapp.dom.types.jodatime.jodalocaldatetime.jdo.JodaLocalDateTimeJdoSeedService
+* demoapp.dom.types.jodatime.jodalocaldatetime.samples.JodaLocalDateTimeSamples
+* demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoEntities
+* demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoSeedService
+* demoapp.dom.types.primitive.bytes.jdo.PrimitiveByteJdoEntities
+* demoapp.dom.types.primitive.bytes.jdo.PrimitiveByteJdoSeedService
+* demoapp.dom.types.primitive.chars.jdo.PrimitiveCharJdoEntities
+* demoapp.dom.types.primitive.chars.jdo.PrimitiveCharJdoSeedService
+* demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoEntities
+* demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoSeedService
+* demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoEntities
+* demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoSeedService
+* demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoEntities
+* demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoSeedService
+* demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoEntities
+* demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoSeedService
+* demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntities
+* demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoSeedService
+* demoapp.dom.types.tuple.NumberConstantRepository
+* demoapp.dom.viewmodels.jaxbrefentity.ChildJdoEntities
+* demoapp.dom.viewmodels.jaxbrefentity.seed.ChildJdoSeedService
+
+_Dependencies_
 
 * com.h2database:h2:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed>
@@ -4125,9 +5208,14 @@ Folder: \examples\demo\domain
 * org.assertj:assertj-core:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Demo - JavaFX
+[source,yaml]
 ----
 Group: org.apache.isis.examples.apps
 Artifact: demo-javafx
@@ -4135,7 +5223,6 @@ Type: jar
 Folder: \examples\demo\javafx
 ----
 
-|Demo - JavaFX
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
@@ -4153,9 +5240,14 @@ Folder: \examples\demo\javafx
 * org.apache.isis.valuetypes:isis-valuetypes-markdown-ui:pom:${project.version}
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Demo - Vaadin
+[source,yaml]
 ----
 Group: org.apache.isis.examples.apps
 Artifact: demo-vaadin
@@ -4163,7 +5255,6 @@ Type: jar
 Folder: \examples\demo\vaadin
 ----
 
-|Demo - Vaadin
 |_Dependencies_
 
 * org.apache.isis.examples.apps:demo-web:jar:${project.version}
@@ -4175,9 +5266,14 @@ Folder: \examples\demo\vaadin
 * org.apache.isis.valuetypes:isis-valuetypes-sse-ui-wkt:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Demo - Web
+[source,yaml]
 ----
 Group: org.apache.isis.examples.apps
 Artifact: demo-web
@@ -4185,8 +5281,11 @@ Type: jar
 Folder: \examples\demo\web
 ----
 
-|Demo - Web
-|_Dependencies_
+|_Components_
+
+* demoapp.web._infra.utils.ThereCanBeOnlyOne
+
+_Dependencies_
 
 * org.apache.isis.examples.apps:demo-domain:jar:${project.version}
 * org.apache.isis.extensions:isis-extensions-command-replay-primary:jar:<managed>
@@ -4197,9 +5296,14 @@ Folder: \examples\demo\web
 * org.springframework.boot:spring-boot-starter-actuator:jar:<managed>
 * org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Demo - Wicket
+[source,yaml]
 ----
 Group: org.apache.isis.examples.apps
 Artifact: demo-wicket
@@ -4207,7 +5311,6 @@ Type: jar
 Folder: \examples\demo\wicket
 ----
 
-|Demo - Wicket
 |_Dependencies_
 
 * org.apache.isis.examples.apps:demo-web:jar:${project.version}
@@ -4217,6 +5320,10 @@ Folder: \examples\demo\wicket
 * org.apache.isis.valuetypes:isis-valuetypes-markdown-ui-wkt:jar:<managed>
 * org.apache.isis.valuetypes:isis-valuetypes-sse-ui-wkt:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -4310,11 +5417,12 @@ package "Incubator\n[Software System]" {
 ----
 
 .Projects/Modules (Incubator)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Incubator
+[source,yaml]
 ----
 Group: org.apache.isis.incubator
 Artifact: isis-incubator
@@ -4322,16 +5430,20 @@ Type: pom
 Folder: \incubator
 ----
 
-|Apache Isis Incubator
 |Collection of Apache Isis extensions, subdomains or BC mappings, currently incubating.
 
 _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Inc - Client kroViz
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.clients
 Artifact: isis-client-kroviz
@@ -4339,12 +5451,16 @@ Type: jar
 Folder: \incubator\clients\kroviz
 ----
 
-|Apache Isis Inc - Client kroViz
 |Initial sketches
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Inc - Viewer JavaFX
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-javafx
@@ -4352,12 +5468,16 @@ Type: pom
 Folder: \incubator\viewers\javafx
 ----
 
-|Apache Isis Inc - Viewer JavaFX
 |Initial sketches
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Inc - Viewer JavaFX (Model)
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-javafx-model
@@ -4365,7 +5485,6 @@ Type: jar
 Folder: \incubator\viewers\javafx\model
 ----
 
-|Apache Isis Inc - Viewer JavaFX (Model)
 |_Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -4376,9 +5495,14 @@ Folder: \incubator\viewers\javafx\model
 * org.openjfx:javafx-swing:jar:<managed>
 * org.openjfx:javafx-web:jar:<managed>
 
+_Doclets_
 
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
-|[source,yaml]
+
+
+|Apache Isis Inc - Viewer JavaFX (UI Components)
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-javafx-ui
@@ -4386,15 +5510,41 @@ Type: jar
 Folder: \incubator\viewers\javafx\ui
 ----
 
-|Apache Isis Inc - Viewer JavaFX (UI Components)
-|_Dependencies_
+|_Components_
+
+* o.a.i.incubator.viewer.javafx.ui.components.UiComponentFactoryFx
+* o.a.i.incubator.viewer.javafx.ui.components.markup.MarkupFieldFactory
+* o.a.i.incubator.viewer.javafx.ui.components.number.NumberFieldFactory
+* o.a.i.incubator.viewer.javafx.ui.components.objectref.ObjectReferenceFieldFactory
+* o.a.i.incubator.viewer.javafx.ui.components.other.FallbackFieldFactory
+* o.a.i.incubator.viewer.javafx.ui.components.temporal.TemporalFieldFactory
+* o.a.i.incubator.viewer.javafx.ui.components.text.TextFieldFactory
+* o.a.i.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForButton
+* o.a.i.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForFormField
+* o.a.i.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForLabeled
+* o.a.i.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForMenuItem
+* o.a.i.incubator.viewer.javafx.ui.decorator.icon.IconServiceDefault
+* o.a.i.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForButton
+* o.a.i.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForFormField
+* o.a.i.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingInfoPopupProvider
+* o.a.i.incubator.viewer.javafx.ui.main.MainViewFx
+* o.a.i.incubator.viewer.javafx.ui.main.UiActionHandlerFx
+* o.a.i.incubator.viewer.javafx.ui.main.UiBuilderFx
+* o.a.i.incubator.viewer.javafx.ui.main.UiContextFxDefault
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
 * org.apache.isis.incubator.viewer:isis-viewer-javafx-model:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Inc - Viewer JavaFX (Viewer)
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-javafx-viewer
@@ -4402,14 +5552,18 @@ Type: jar
 Folder: \incubator\viewers\javafx\viewer
 ----
 
-|Apache Isis Inc - Viewer JavaFX (Viewer)
 |_Dependencies_
 
 * org.apache.isis.incubator.viewer:isis-viewer-javafx-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Inc - Viewer Vaadin
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-vaadin
@@ -4417,12 +5571,16 @@ Type: pom
 Folder: \incubator\viewers\vaadin
 ----
 
-|Apache Isis Inc - Viewer Vaadin
 |Initial sketches
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Inc - Viewer Vaadin (Model)
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-vaadin-model
@@ -4430,7 +5588,6 @@ Type: jar
 Folder: \incubator\viewers\vaadin\model
 ----
 
-|Apache Isis Inc - Viewer Vaadin (Model)
 |_Dependencies_
 
 * com.vaadin:vaadin:jar:<managed>
@@ -4438,9 +5595,14 @@ Folder: \incubator\viewers\vaadin\model
 * org.apache.isis.core:isis-core-webapp:jar:<managed>
 * org.apache.isis.viewer:isis-viewer-common:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Inc - Viewer Vaadin (UI Components)
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-vaadin-ui
@@ -4448,8 +5610,22 @@ Type: jar
 Folder: \incubator\viewers\vaadin\ui
 ----
 
-|Apache Isis Inc - Viewer Vaadin (UI Components)
-|_Dependencies_
+|_Components_
+
+* o.a.i.incubator.viewer.vaadin.ui.auth.LogoutHandlerVaa
+* o.a.i.incubator.viewer.vaadin.ui.auth.VaadinAuthenticationHandler
+* o.a.i.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa
+* o.a.i.incubator.viewer.vaadin.ui.components.blob.BlobFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.components.clob.ClobFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.components.markup.MarkupFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.components.other.FallbackFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.components.temporal.TemporalFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.components.text.TextFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.components.text.uuid.UuidFieldFactory
+* o.a.i.incubator.viewer.vaadin.ui.pages.main.UiActionHandlerVaa
+* o.a.i.incubator.viewer.vaadin.ui.pages.main.UiContextVaaDefault
+
+_Dependencies_
 
 * com.vaadin:vaadin:jar:<managed>
 * com.vaadin:vaadin-spring:jar:<managed>
@@ -4457,9 +5633,14 @@ Folder: \incubator\viewers\vaadin\ui
 * org.apache.isis.core:isis-core-runtimeservices:jar:<managed>
 * org.apache.isis.incubator.viewer:isis-viewer-vaadin-model:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Inc - Viewer Vaadin (Viewer)
+[source,yaml]
 ----
 Group: org.apache.isis.incubator.viewer
 Artifact: isis-viewer-vaadin-viewer
@@ -4467,11 +5648,14 @@ Type: jar
 Folder: \incubator\viewers\vaadin\viewer
 ----
 
-|Apache Isis Inc - Viewer Vaadin (Viewer)
 |_Dependencies_
 
 * org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
@@ -4538,11 +5722,12 @@ package "Legacy\n[Software System]" {
 ----
 
 .Projects/Modules (Legacy)
-[cols="3a,2,5a", options="header"]
+[cols="3a,5a", options="header"]
 |===
-|Coordinates |Name |Description 
+|Coordinates |Description 
 
-|[source,yaml]
+|Apache Isis Legacy
+[source,yaml]
 ----
 Group: org.apache.isis.legacy
 Artifact: isis-legacy
@@ -4550,16 +5735,20 @@ Type: pom
 Folder: \legacy
 ----
 
-|Apache Isis Legacy
 |Collection of deprecated Apache Isis functionality, for removal.
 
 _Dependencies_
 
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
 
 
-|[source,yaml]
+
+|Apache Isis Legacy - Applib
+[source,yaml]
 ----
 Group: org.apache.isis.legacy
 Artifact: isis-legacy-applib
@@ -4567,9 +5756,12 @@ Type: jar
 Folder: \legacy\extensions\core\applib
 ----
 
-|Apache Isis Legacy - Applib
 |To ease migration from Apache Isis versions 1.16+ to 2.0.0.
 
+_Components_
+
+* o.a.i.legacy.applib.DomainObjectContainer
+
 _Dependencies_
 
 * com.google.guava:guava:jar:<managed>
@@ -4579,9 +5771,14 @@ _Dependencies_
 * org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Legacy - Commons
+[source,yaml]
 ----
 Group: org.apache.isis.legacy
 Artifact: isis-legacy-commons
@@ -4589,7 +5786,6 @@ Type: jar
 Folder: \legacy\extensions\core\commons
 ----
 
-|Apache Isis Legacy - Commons
 |To ease migration from Apache Isis versions 1.16+ to 2.0.0.
 
 _Dependencies_
@@ -4601,9 +5797,14 @@ _Dependencies_
 * org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Legacy - Metamodel
+[source,yaml]
 ----
 Group: org.apache.isis.legacy
 Artifact: isis-legacy-metamodel
@@ -4611,7 +5812,6 @@ Type: jar
 Folder: \legacy\extensions\core\metamodel
 ----
 
-|Apache Isis Legacy - Metamodel
 |To ease migration from Apache Isis versions 1.16+ to 2.0.0.
 
 _Dependencies_
@@ -4624,9 +5824,14 @@ _Dependencies_
 * org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Legacy - REST Client
+[source,yaml]
 ----
 Group: org.apache.isis.legacy
 Artifact: isis-legacy-restclient
@@ -4634,7 +5839,6 @@ Type: jar
 Folder: \legacy\mappings\restclient
 ----
 
-|Apache Isis Legacy - REST Client
 |As defined in Isis v1.x RO Applib.
 
 _Dependencies_
@@ -4644,9 +5848,14 @@ _Dependencies_
 * org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed>
 * org.projectlombok:lombok:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 
-|[source,yaml]
+|Apache Isis Legacy - Runtime
+[source,yaml]
 ----
 Group: org.apache.isis.legacy
 Artifact: isis-legacy-runtime
@@ -4654,7 +5863,6 @@ Type: jar
 Folder: \legacy\extensions\core\runtime
 ----
 
-|Apache Isis Legacy - Runtime
 |To ease migration from Apache Isis versions 1.16+ to 2.0.0.
 
 _Dependencies_
@@ -4669,6 +5877,10 @@ _Dependencies_
 * org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed>
 * org.datanucleus:javax.jdo:jar:<managed>
 
+_Doclets_
+
+xref:index:RoleMemento.adoc[RoleMemento] ,  xref:index:UserMemento.adoc[UserMemento] ,  xref:index:UserService.adoc[UserService]
+
 
 |===
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
index 4558de9..32de23c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
@@ -16,7 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
 package org.apache.isis.applib.services.user;
 
 import java.io.Serializable;
@@ -26,12 +25,13 @@ import org.apache.isis.applib.annotation.MemberOrder;
 import lombok.Getter;
 import lombok.Value;
 
+/**
+ * Immutable serializable value held by {@link UserMemento}.  
+ * @since 2.0 {@index}
+ */
 @Value
-// tag::refguide[]
 public final class RoleMemento implements Serializable {
 
-    // end::refguide[]
-    
     private static final long serialVersionUID = -3876856609238378274L;
     
     /**
@@ -60,17 +60,11 @@ public final class RoleMemento implements Serializable {
     }
 
     @MemberOrder(sequence = "1.1")
-    // tag::refguide[]
     @Getter
     private final String name;
 
-    // end::refguide[]
     @MemberOrder(sequence = "1.2")
-    // tag::refguide[]
     @Getter
     private final String description;
 
-    // ...
-
 }
-// end::refguide[]
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
index 69c5161..95df8e7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
@@ -16,7 +16,6 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
 package org.apache.isis.applib.services.user;
 
 import java.io.Serializable;
@@ -34,12 +33,10 @@ import lombok.Getter;
 import lombok.NonNull;
 
 /**
- * Details about a user and his roles.
- * Read-only.
+ * Immutable serializable value holding details about a user and its roles.
+ * @since 2.0 {@index}
  */
-// tag::refguide[]
 public final class UserMemento implements Serializable {
-    // end::refguide[]
     
     private static final long serialVersionUID = 7190090455587885367L;
     private static final UserMemento SYSTEM_USER = UserMemento.ofName("__system"); 
@@ -118,21 +115,18 @@ public final class UserMemento implements Serializable {
      * The user's login name.
      */
     @MemberOrder(sequence = "1.1")
-    // tag::refguide[]
     @Getter
     private final String name;
 
-    // end::refguide[]
     /**
      * The roles associated with this user.
      */
     @MemberOrder(sequence = "1.1")
     private final List<RoleMemento> roles;
-    // tag::refguide[]
     public List<RoleMemento> getRoles() {
         return roles;
     }
-    // end::refguide[]
+
     /**
      * Determine if the specified name is this user.
      *
@@ -193,12 +187,8 @@ public final class UserMemento implements Serializable {
         return getName().hashCode(); // its good enough to hash on just the user's name
     }
     
-    // tag::refguide[]
-
-    // ...
 
 }
-// end::refguide[]
 
 // -- REMOVED
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
index 3b95b45..48a56ce 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java
@@ -18,24 +18,31 @@
  */
 package org.apache.isis.applib.services.user;
 
-import org.apache.isis.applib.services.iactn.ExecutionContext;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
+import java.util.Optional;
 
 import javax.annotation.Nullable;
-import java.util.Optional;
 
-// tag::refguide[]
+import org.apache.isis.applib.services.iactn.ExecutionContext;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+
+/**
+ * The {@link UserService} allows the domain object to obtain the identity of the user 
+ * interacting with said object.
+ * <p>
+ * If {@link SudoService} has been used to temporarily override the user and/or roles, 
+ * then this service will report the overridden values instead.
+ *
+ * @since 2.0 {@index}
+ */
 public interface UserService {
 
     // -- INTERFACE
     
-    // end::refguide[]
     /**
      * Optionally gets the details about the current user, 
      * based on whether an {@link ExecutionContext} can be found with the current thread's context.
      */
-    // tag::refguide[]
-    Optional<UserMemento> currentUser();    // <.>
+    Optional<UserMemento> currentUser();
 
     /**
      * Gets the details about the current user.
@@ -45,7 +52,6 @@ public interface UserService {
     default UserMemento getUser() {
         return currentUser().orElse(null);
     }
-    // end::refguide[]
     
     // -- UTILITIES
     
@@ -53,28 +59,23 @@ public interface UserService {
      * Gets the details about the current user.
      * @throws IllegalStateException if no {@link ExecutionContext} can be found with the current thread's context.
      */
-    // tag::refguide[]
-    default UserMemento currentUserElseFail() {              // <.>
-        // end::refguide[]
+    default UserMemento currentUserElseFail() {
         return currentUser()
                 .orElseThrow(()->_Exceptions.illegalState("Current thread has no ExecutionContext."));
     }
     
-    // end::refguide[]
     /**
      * Optionally gets the the current user's name, 
      * based on whether an {@link ExecutionContext} can be found with the current thread's context.
      */
-    // tag::refguide[]
-    default Optional<String> currentUserName() {    // <.>
+    default Optional<String> currentUserName() {
         return currentUser()
                 .map(UserMemento::getName);
     }
     
-    default String currentUserNameElseNobody() {    // <.>
+    default String currentUserNameElseNobody() {
         return currentUserName()
                 .orElse("Nobody");
     }
 
 }
-// end::refguide[]
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
index 0a55a41..ab33cae 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/Cli.java
@@ -19,12 +19,9 @@
 package org.apache.isis.tooling.cli;
 
 import java.io.File;
-import java.io.FileOutputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.concurrent.Callable;
 
 import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.tooling.cli.projdoc.ProjectDocModel;
 import org.apache.isis.tooling.projectmodel.ProjectNodeFactory;
@@ -85,18 +82,13 @@ class Cli implements Callable<Integer> {
         @Override
         public Integer call() throws Exception {
             
-            val projTree = ProjectNodeFactory.maven(getProjectRoot());
-            val projectDocModel = new ProjectDocModel(projTree);
-            val adoc = projectDocModel.toAsciiDoc(getConfig().getProjectDoc());
-            
             if(outputFilePath!=null) {
-                try(val fos = new FileOutputStream(new File(outputFilePath))){
-                    fos.write(_Strings.toBytes(adoc, StandardCharsets.UTF_8));
-                }
-            } else {
-                System.out.println(adoc);
+                getConfig().setOutputFile(new File(outputFilePath));
             }
             
+            val projTree = ProjectNodeFactory.maven(getProjectRoot());
+            val projectDocModel = new ProjectDocModel(projTree);
+            projectDocModel.generateAsciiDoc(getConfig());
             return 0;
         }
     }
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
index 9ce07f4..e7f4563 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
@@ -21,6 +21,7 @@ package org.apache.isis.tooling.cli;
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.LinkedHashMap;
+import java.util.Optional;
 
 import org.apache.isis.commons.internal.resources._Yaml;
 
@@ -31,6 +32,21 @@ import lombok.NonNull;
 public class CliConfig {
     
     private ProjectDoc projectDoc = new ProjectDoc();
+    private File outputFile = null; // where to write eg. system-overview.adoc
+    
+    private String docletPath = "index";
+    private String docletXrefRoot = "index";
+
+    public boolean isDryRun() {
+        return getOutputFile() == null;
+    }
+    
+    public File getDocletOutputFolder() {
+        return Optional.ofNullable(getOutputFile())
+                .map(File::getParentFile)
+                .map(folder->new File(folder, getDocletPath()))
+                .orElse(null);
+    }
     
     @Data
     public static class ProjectDoc {
@@ -63,4 +79,5 @@ public class CliConfig {
         }
     }
 
+
 }
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java
index 34b5ae5..a4ba29e 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java
@@ -66,6 +66,12 @@ public class Doclet {
         return td.getNameAsString();
     }
 
+    public String getAsciiDocXref(
+            final @NonNull DocletContext docletContext) {
+        val toAdocConverter = ToAsciiDoc.of(docletContext);
+        return toAdocConverter.xref(this);
+    }
+    
     public String toAsciiDoc(
             final @NonNull DocletContext docletContext) {
         
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
index 73dcb5d..d773211 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
@@ -19,8 +19,8 @@
 package org.apache.isis.tooling.cli.projdoc;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
@@ -42,11 +42,12 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.graph._Graph;
 import org.apache.isis.tooling.c4.C4;
-import org.apache.isis.tooling.cli.CliConfig.ProjectDoc;
+import org.apache.isis.tooling.cli.CliConfig;
+import org.apache.isis.tooling.cli.doclet.Doclet;
+import org.apache.isis.tooling.cli.doclet.DocletContext;
 import org.apache.isis.tooling.javamodel.AnalyzerConfigFactory;
 import org.apache.isis.tooling.javamodel.CodeClasses;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
-import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
 import org.apache.isis.tooling.projectmodel.ArtifactCoordinates;
 import org.apache.isis.tooling.projectmodel.Dependency;
 import org.apache.isis.tooling.projectmodel.ProjectNode;
@@ -67,6 +68,8 @@ import guru.nidi.codeassert.config.Language;
 import guru.nidi.codeassert.model.CodeClass;
 import guru.nidi.codeassert.model.Model;
 
+import static guru.nidi.codeassert.config.Language.JAVA;
+
 /**
  * Acts both as a model and a writer (adoc).
  * @since Sep 22, 2020
@@ -81,34 +84,33 @@ public class ProjectDocModel {
         this.projTree = projTree;
     }
 
-    public String toAsciiDoc(ProjectDoc projectDocConfig) {
-
+    public void generateAsciiDoc(final @NonNull CliConfig cliConfig) {
+        
         modules = new TreeSet<ProjectNode>();
         projTree.depthFirst(modules::add);
 
+        val docletContext = DocletContext.builder()
+                .indexXrefRoot(cliConfig.getDocletXrefRoot())
+                .build();
+        
         val doc = doc();
         doc.setTitle("System Overview");
 
-        _Strings.nonEmpty(projectDocConfig.getLicenseHeader())
+        _Strings.nonEmpty(cliConfig.getProjectDoc().getLicenseHeader())
         .ifPresent(block(doc)::setSource);
         
-        _Strings.nonEmpty(projectDocConfig.getDescription())
+        _Strings.nonEmpty(cliConfig.getProjectDoc().getDescription())
         .ifPresent(block(doc)::setSource);
 
-        projectDocConfig.getArtifactGroups().forEach((section, groupId)->{
-            createSection(doc, section, groupId);
+        cliConfig.getProjectDoc().getArtifactGroups().forEach((section, groupId)->{
+            createSection(doc, section, groupId, docletContext);
         });
 
         if(!modules.isEmpty()) {
-            createSection(doc, "Other", null);
+            createSection(doc, "Other", null, docletContext);
         }
-
-        try {
-            return AsciiDocWriter.toString(doc);
-        } catch (IOException e) {
-            e.printStackTrace();
-            return "ERROR: " + e.getMessage();
-        } 
+        
+        ProjectDocWriter.write(cliConfig, doc, docletContext);
 
     }
 
@@ -178,7 +180,8 @@ public class ProjectDocModel {
     private void createSection(
             final @NonNull Document doc, 
             final @NonNull String sectionName, 
-            final @Nullable String groupIdPattern) {
+            final @Nullable String groupIdPattern, 
+            final @NonNull DocletContext docletContext) {
 
         val titleBlock = block(doc);
 
@@ -189,13 +192,12 @@ public class ProjectDocModel {
 
         val table = table(doc);
         table.setTitle(String.format("Projects/Modules (%s)", sectionName));
-        table.setAttribute("cols", "3a,2,5a", true);
+        table.setAttribute("cols", "3a,5a", true);
         table.setAttribute("header-option", "", true);
 
         val headRow = headRow(table);
 
         cell(table, headRow, "Coordinates");
-        cell(table, headRow, "Name");
         cell(table, headRow, "Description");
 
         val projRoot = _Files.canonicalPath(projTree.getProjectDirectory())
@@ -219,8 +221,7 @@ public class ProjectDocModel {
 
             val row = row(table);
             cell(table, row, coordinates(module, projRelativePath));
-            cell(table, row, module.getName());
-            cell(table, row, details(module));
+            cell(table, row, details(module, docletContext));
         });
 
         descriptionBlock.setSource(groupDiagram.toAsciiDoc(sectionName));
@@ -262,19 +263,21 @@ public class ProjectDocModel {
     //    Folder: \commons
     //    ----
     private String coordinates(ProjectNode module, String projRelativePath) {
-        val sb = new StringBuilder();
-        appendKeyValue(sb, "Group", module.getArtifactCoordinates().getGroupId());
-        appendKeyValue(sb, "Artifact", module.getArtifactCoordinates().getArtifactId());
-        appendKeyValue(sb, "Type", module.getArtifactCoordinates().getPackaging());
-        appendKeyValue(sb, "Folder", projRelativePath);
-        return AsciiDocFactory.SourceFactory.yaml(sb.toString(), null);
+        val coors = new StringBuilder();
+        appendKeyValue(coors, "Group", module.getArtifactCoordinates().getGroupId());
+        appendKeyValue(coors, "Artifact", module.getArtifactCoordinates().getArtifactId());
+        appendKeyValue(coors, "Type", module.getArtifactCoordinates().getPackaging());
+        appendKeyValue(coors, "Folder", projRelativePath);
+        return String.format("%s\n%s",
+                module.getName(),
+                AsciiDocFactory.SourceFactory.yaml(coors.toString(), null));
     }
     
     private void appendKeyValue(StringBuilder sb, String key, String value) {
         sb.append(String.format("%s: %s\n", key, value));
     }
     
-    private String details(ProjectNode module) {
+    private String details(ProjectNode module, DocletContext docletContext) {
         val description = module.getDescription().trim();
         val dependencyList = module.getDependencies()
                 .stream()
@@ -285,9 +288,16 @@ public class ProjectDocModel {
                 .trim();
         val componentList = gatherSpringComponents(module.getProjectDirectory())
                 .stream()
+                .map(s->s.replace("org.apache.isis.", "o.a.i."))
                 .map(ProjectDocModel::toAdocListItem)
                 .collect(Collectors.joining())
                 .trim();
+        
+        val docletCompactList = gatherDoclets(module.getProjectDirectory(), docletContext)
+                .stream()
+                .map(doclet->doclet.getAsciiDocXref(docletContext))
+                .collect(Collectors.joining(", "))
+                .trim();
 
         val sb = new StringBuilder();
 
@@ -302,6 +312,10 @@ public class ProjectDocModel {
         if(!dependencyList.isEmpty()) {
             sb.append(toAdocSection("Dependencies", dependencyList));
         }
+        
+        if(!docletCompactList.isEmpty()) {
+            sb.append(toAdocSection("Doclets", docletCompactList));
+        }
 
         return sb.toString();
     }
@@ -309,11 +323,22 @@ public class ProjectDocModel {
     private static String toAdocSection(String title, String content) {
         return String.format("_%s_\n\n%s\n\n", title, content);
     }
-
+    
     private static String toAdocListItem(String element) {
         return String.format("* %s\n", element);
     }
 
+    private Collection<Doclet> gatherDoclets(File projDir, DocletContext docletContext) {
+        
+        val analyzerConfig = AnalyzerConfigFactory.maven(projDir, Language.JAVA).main();
+
+        analyzerConfig.getSources(JAVA)
+        .stream()
+        .forEach(docletContext::add);
+        
+        return docletContext.getDocletIndex().values();
+    }
+    
     private SortedSet<String> gatherSpringComponents(File projDir) {
 
         val analyzerConfig = AnalyzerConfigFactory.maven(projDir, Language.JAVA).main();
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
new file mode 100644
index 0000000..ae53253
--- /dev/null
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
@@ -0,0 +1,79 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.tooling.cli.projdoc;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.nio.charset.StandardCharsets;
+
+import javax.annotation.Nullable;
+
+import org.asciidoctor.ast.Document;
+
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.tooling.cli.CliConfig;
+import org.apache.isis.tooling.cli.doclet.DocletContext;
+import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
+
+import lombok.NonNull;
+import lombok.SneakyThrows;
+import lombok.val;
+
+final class ProjectDocWriter {
+
+    @SneakyThrows
+    static void write(
+            final @NonNull CliConfig cliConfig, 
+            final @NonNull Document doc, 
+            final @NonNull DocletContext docletContext) {
+        
+        
+        try {
+            val adoc = AsciiDocWriter.toString(doc);
+            
+            if(cliConfig.isDryRun()) {
+                System.out.println(adoc);
+                for(val doclet : docletContext.getDocletIndex().values()) {
+                    System.out.println(doclet.toAsciiDoc(docletContext));
+                }
+            } else {
+                writeTo(cliConfig.getOutputFile(), adoc);
+                for(val doclet : docletContext.getDocletIndex().values()) {
+                    val docletFile = new File(cliConfig.getDocletOutputFolder(), doclet.getName() + ".adoc");
+                    writeTo(docletFile, doclet.toAsciiDoc(docletContext));
+                }
+            }    
+            
+        } catch (Exception e) {
+            e.printStackTrace();
+            return;
+        } 
+        
+    }
+    
+    // -- HELPER
+    
+    @SneakyThrows
+    private static void writeTo(@Nullable File file, String adoc) {
+        try(val fos = new FileOutputStream(file)){
+            fos.write(_Strings.toBytes(adoc, StandardCharsets.UTF_8));
+        }
+    }
+
+}