You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/02/14 10:19:22 UTC

[isis] 01/02: ISIS-2444: regen docs and examples

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

danhaywood pushed a commit to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 6d429918d5102281eb46615d7e8905b48cc86ae4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Feb 13 10:44:50 2021 +0000

    ISIS-2444: regen docs and examples
---
 .../pages/index/applib/annotation/Action.adoc      |   4 +-
 .../pages/index/applib/annotation/Property.adoc    |   4 +-
 .../pages/index/applib/annotation/Publishing.adoc  |   2 +-
 .../index/applib/services/exceprecog/Category.adoc |  93 ++++++++++++++
 .../exceprecog/ExceptionRecognizerService.adoc     |   6 +
 .../applib/services/exceprecog/Recognition.adoc    |  75 +++++++++++
 .../applib/services/factory/FactoryService.adoc    |  10 +-
 .../applib/services/grid/GridLoaderService.adoc    |  14 ++-
 .../applib/services/grid/GridSystemService.adoc    |  86 +++++++++++--
 .../applib/services/health/HealthCheckService.adoc |   6 +
 .../index/applib/services/hint/HintIdProvider.adoc |  18 +++
 .../index/applib/services/hint/HintStore.adoc      |  69 ++++++++++-
 .../services/homepage/HomePageResolverService.adoc |   2 +-
 .../ActionInvocation.adoc}                         |   7 +-
 .../index/applib/services/iactn/Execution.adoc     |  96 ++++++++++++++
 .../applib/services/iactn/ExecutionContext.adoc    |  42 ++++++-
 .../index/applib/services/iactn/Interaction.adoc   |  37 ++++--
 .../applib/services/iactn/InteractionContext.adoc  |   2 +
 .../PropertyEdit.adoc}                             |   7 +-
 .../index/applib/services/iactn/Sequence.adoc      |  50 ++++++++
 .../services/publishing/log/ExecutionLogger.adoc   |   2 +-
 .../services/publishing/spi/EntityChanges.adoc     | 115 +++++++++++++++--
 .../publishing/spi/EntityChangesSubscriber.adoc    |   4 +-
 .../publishing/spi/ExecutionSubscriber.adoc        |  16 ++-
 .../applib/util/schema/InteractionDtoUtils.adoc    |  12 +-
 ...ceptionRecognizerForOtherDataAccessProblem.adoc |  14 ---
 .../jdo/datanucleus/IsisModuleJdoDatanucleus.adoc  |  13 +-
 .../jdo/datanucleus/dialect/DnJdoDialect.adoc      |   3 +-
 .../jpa/eclipselink/IsisModuleJpaEclipselink.adoc  |   1 -
 .../modules/generated/pages/system-overview.adoc   |  61 +++++----
 .../adoc/modules/config/pages/sections/Other.adoc  |   6 +-
 .../adoc/modules/config/pages/sections/_nav.adoc   |   2 -
 .../modules/config/pages/sections/isis.applib.adoc |   2 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |   2 +-
 .../command/CommandExecutorServiceDefault.java     |   2 +-
 ...utionListenerToCaptureInteractionsInMemory.java |   3 +-
 .../publishing/jdo/JdoExecutionPublishingTest.java |  44 +++----
 .../publishing/ExecutionSubscriberForTesting.java  |  12 +-
 .../modules/tooling-cli/examples/isis-tooling.yml  | 138 +++++++++++----------
 39 files changed, 875 insertions(+), 207 deletions(-)

diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc
index 2aa36d9..1959081 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Action.adoc
@@ -50,7 +50,7 @@ Indicates that an invocation of the action should be posted to the _org.apache.i
 <.> xref:#executionPublishing[executionPublishing]
 +
 --
-Whether _Execution_ s (triggered by action invocations), should be published to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
+Whether xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] s (triggered by action invocations), should be published to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
 --
 <.> xref:#hidden[hidden]
 +
@@ -139,7 +139,7 @@ This subclass must provide a no-arg constructor; the fields are set reflectively
 [#executionPublishing]
 === executionPublishing
 
-Whether _Execution_ s (triggered by action invocations), should be published to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
+Whether xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] s (triggered by action invocations), should be published to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
 
 [#hidden]
 === hidden
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
index 034df9c..4c83996 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Property.adoc
@@ -55,7 +55,7 @@ If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the
 <.> xref:#executionPublishing[executionPublishing]
 +
 --
-Whether _org.apache.isis.applib.services.iactn.Interaction.Execution_ s (triggered property edits), should be dispatched to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
+Whether xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] s (triggered property edits), should be dispatched to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
 --
 <.> xref:#fileAccept[fileAccept]
 +
@@ -154,7 +154,7 @@ If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the
 [#executionPublishing]
 === executionPublishing
 
-Whether _org.apache.isis.applib.services.iactn.Interaction.Execution_ s (triggered property edits), should be dispatched to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
+Whether xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] s (triggered property edits), should be dispatched to xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
 
 [#fileAccept]
 === fileAccept
diff --git a/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc b/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc
index 144157f..4e96a2e 100644
--- a/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/annotation/Publishing.adoc
@@ -11,7 +11,7 @@ The available policies as to whether data should be published to corresponding s
 * *xref:system:generated:index/applib/services/command/Command.adoc[Command] ... subscribed to via xref:system:generated:index/applib/services/publishing/spi/CommandSubscriber.adoc[CommandSubscriber]*
 
  *
-* *_org.apache.isis.applib.services.iactn.Interaction.Execution_ ... subscribed to via xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber]*
+* *xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] ... subscribed to via xref:system:generated:index/applib/services/publishing/spi/ExecutionSubscriber.adoc[ExecutionSubscriber]*
 
  ** * * * 
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc
new file mode 100644
index 0000000..d1d92a8
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Category.adoc
@@ -0,0 +1,93 @@
+:Notice: 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 ag [...]
+
+Categorises each exception that has been recognised, as per _Recognition#getCategory()_ .
+
+== API
+
+[source,java]
+.Category.java
+----
+enum Category {
+  CONSTRAINT_VIOLATION     // <.>
+  NOT_FOUND     // <.>
+  CONCURRENCY     // <.>
+  RETRYABLE     // <.>
+  CLIENT_ERROR     // <.>
+  SERVER_ERROR     // <.>
+  OTHER     // <.>
+}
+----
+
+<.> xref:#CONSTRAINT_VIOLATION[CONSTRAINT_VIOLATION]
++
+--
+A violation of some declarative constraint (eg uniqueness or referential integrity) was detected.
+--
+<.> xref:#NOT_FOUND[NOT_FOUND]
++
+--
+The object to be acted upon cannot be found (404)
+--
+<.> xref:#CONCURRENCY[CONCURRENCY]
++
+--
+A concurrency exception, in other words some other user has changed this object.
+--
+<.> xref:#RETRYABLE[RETRYABLE]
++
+--
+A previously failed operation might be able to succeed when the operation is retried. (eg. a query timeout or a temporary failure)
+--
+<.> xref:#CLIENT_ERROR[CLIENT_ERROR]
++
+--
+Recognized, but for some other reason... 40x error
+--
+<.> xref:#SERVER_ERROR[SERVER_ERROR]
++
+--
+50x error
+--
+<.> xref:#OTHER[OTHER]
++
+--
+Recognized, but uncategorized (typically: a recognizer of the original ExceptionRecognizer API).
+--
+
+== Members
+
+[#CONSTRAINT_VIOLATION]
+=== CONSTRAINT_VIOLATION
+
+A violation of some declarative constraint (eg uniqueness or referential integrity) was detected.
+
+[#NOT_FOUND]
+=== NOT_FOUND
+
+The object to be acted upon cannot be found (404)
+
+[#CONCURRENCY]
+=== CONCURRENCY
+
+A concurrency exception, in other words some other user has changed this object.
+
+[#RETRYABLE]
+=== RETRYABLE
+
+A previously failed operation might be able to succeed when the operation is retried. (eg. a query timeout or a temporary failure)
+
+[#CLIENT_ERROR]
+=== CLIENT_ERROR
+
+Recognized, but for some other reason... 40x error
+
+[#SERVER_ERROR]
+=== SERVER_ERROR
+
+50x error
+
+[#OTHER]
+=== OTHER
+
+Recognized, but uncategorized (typically: a recognizer of the original ExceptionRecognizer API).
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
index 3ef44bb..620ad35 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
@@ -15,6 +15,10 @@ interface ExceptionRecognizerService {
 ----
 
 <.> xref:#getExceptionRecognizers[getExceptionRecognizers]
++
+--
+All ExceptionRecognizer implementations as discovered by the IoC container, honoring order of precedence.
+--
 <.> xref:#recognize[recognize]
 +
 --
@@ -31,6 +35,8 @@ Takes into consideration ExceptionRecognizers as given by _recognizers_ .
 [#getExceptionRecognizers]
 === getExceptionRecognizers
 
+All ExceptionRecognizer implementations as discovered by the IoC container, honoring order of precedence.
+
 [#recognize]
 === recognize
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc
new file mode 100644
index 0000000..e640f13
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/Recognition.adoc
@@ -0,0 +1,75 @@
+:Notice: 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 ag [...]
+
+Represents a user-friendly representation of an exception that has been recognised by an available implementation of an xref:system:generated:index/applib/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer] .
+
+Returned by _ExceptionRecognizer#recognize(Throwable)_ when the exception recognizer has recognised the exception
+
+== API
+
+[source,java]
+.Recognition.java
+----
+class Recognition {
+  @NonNull
+Category category;     // <.>
+  @NonNull
+String reason;     // <.>
+  Optional<Recognition> of(final Category category, final String reason)     // <.>
+  String toMessage(TranslationService translationService)     // <.>
+  String toMessageNoCategory(TranslationService translationService)     // <.>
+}
+----
+
+<.> xref:#category[category]
++
+--
+Categorises the exception as per xref:system:generated:index/applib/services/exceprecog/Category.adoc[Category] .
+--
+<.> xref:#reason[reason]
++
+--
+The untranslated user-friendly reason for the exception.
+--
+<.> xref:#of[of]
+<.> xref:#toMessage[toMessage]
++
+--
+Translates the _#getReason() reason_ and prepends with a translation of _#getCategory() category_ , using the provided xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] ..
+--
+<.> xref:#toMessageNoCategory[toMessageNoCategory]
++
+--
+Translates the _#getReason() reason_ alone (ignoring the _#getCategory() category_ , using the provided xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] ..
+--
+
+== Members
+
+[#category]
+=== category
+
+Categorises the exception as per xref:system:generated:index/applib/services/exceprecog/Category.adoc[Category] .
+
+In essence, if an exception is recognized then it is also categorized. This lets the viewer act accordingly. If the implementation recognizes the exception then it returns a user-friendly message to be rendered (by the viewer) back to the user; otherwise it returns `null`. There is no need for the implementation to check for exception causes; the casual chain is unwrapped by Apache Isis core and each exception in the chain will also be passed through to the recognizer (from most specific [...]
+
+This category can also optionally be used in the translation of the _#getReason() reason_ for the exception.
+
+[#reason]
+=== reason
+
+The untranslated user-friendly reason for the exception.
+
+The reason can also be translated (prepended or not by the translation of the _#getCategory() category_ using _#toMessage(TranslationService)_ or _#toMessageNoCategory(TranslationService)_ . .
+
+[#of]
+=== of
+
+[#toMessage]
+=== toMessage
+
+Translates the _#getReason() reason_ and prepends with a translation of _#getCategory() category_ , using the provided xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] ..
+
+[#toMessageNoCategory]
+=== toMessageNoCategory
+
+Translates the _#getReason() reason_ alone (ignoring the _#getCategory() category_ , using the provided xref:system:generated:index/applib/services/i18n/TranslationService.adoc[TranslationService] ..
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc
index 482aff2..a691960 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/factory/FactoryService.adoc
@@ -1,5 +1,7 @@
 :Notice: 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 ag [...]
 
+Collects together methods for instantiating domain objects, also injecting them with any domain services and calling lifecycle methods if defined.
+
 == API
 
 [source,java]
@@ -22,7 +24,7 @@ interface FactoryService {
 <.> xref:#getOrCreate[getOrCreate]
 +
 --
-General purpose factory method, to automatically get or create an instance of _requiredType_ .
+Gets an instance (possibly shared or independent) of the specified type, with injection points resolved and any life-cycle callback processed.
 --
 <.> xref:#get[get]
 +
@@ -82,9 +84,7 @@ Creates a new instance of the specified class, but does not persist it.
 [#getOrCreate]
 === getOrCreate
 
-General purpose factory method, to automatically get or create an instance of _requiredType_ .
-
-Maps onto one of the specialized factory methods _#get(Class)_ or _#create(Class)_ based on the type's meta-data.
+Gets an instance (possibly shared or independent) of the specified type, with injection points resolved and any life-cycle callback processed.
 
 [#get]
 === get
@@ -96,6 +96,8 @@ Gets an instance (possibly shared or independent) of the specified _requiredType
 
 Creates a new detached entity instance, with injection points resolved and defaults applied.
 
+The entity will be detacted, in other words not yet persisted.
+
 [#detachedEntity]
 === detachedEntity
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc
index 0863b5f..40c6f3c 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridLoaderService.adoc
@@ -1,5 +1,7 @@
 :Notice: 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 ag [...]
 
+Provides the ability to load the XML layout (grid) for a domain class.
+
 == API
 
 [source,java]
@@ -37,7 +39,7 @@ Returns a new instance of a xref:system:generated:index/applib/layout/grid/Grid.
 <.> xref:#load[load]
 +
 --
-Returns a new instance of a xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] for the specified domain class, eg from a `layout.xml` file, else `null` .
+Loads a specic alternative xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] layout for the specified domain class.
 --
 
 == Members
@@ -47,16 +49,22 @@ Returns a new instance of a xref:system:generated:index/applib/layout/grid/Grid.
 
 Whether dynamic reloading of layouts is enabled.
 
+The default implementation enables reloading for prototyping mode, disables in production
+
 [#remove]
 === remove
 
 To support metamodel invalidation/rebuilding of spec.
 
+This is called by the _org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel_ mixin action.
+
 [#existsFor]
 === existsFor
 
 Whether any persisted layout metadata (eg a `.layout.xml` file) exists for this domain class.
 
+If none exists, will return null (and the calling xref:system:generated:index/applib/services/grid/GridService.adoc[GridService] will use xref:system:generated:index/applib/services/grid/GridSystemService.adoc[GridSystemService] to obtain a default grid for the domain class).
+
 [#load]
 === load
 
@@ -65,5 +73,7 @@ Returns a new instance of a xref:system:generated:index/applib/layout/grid/Grid.
 [#load]
 === load
 
-Returns a new instance of a xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] for the specified domain class, eg from a `layout.xml` file, else `null` .
+Loads a specic alternative xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] layout for the specified domain class.
+
+The layout alternative will typically be specified through a `layout()` method on the domain object, the value of which is used for the suffix of the layout file (eg "Customer-layout.archived.xml" to use a different layout for customers that have been archived).
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc
index 3847bbd..2d59e1d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/grid/GridSystemService.adoc
@@ -1,6 +1,8 @@
 :Notice: 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 ag [...]
 
-Provides an implementation of xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] .
+Encapsulates a single layout grid system which can be used to customize the layout of domain objects.
+
+In particular this means being able to return a "normalized" form (validating and associating domain object members into the various regions of the grid) and in providing a default grid if there is no other metadata available.
 
 == API
 
@@ -9,24 +11,49 @@ Provides an implementation of xref:system:generated:index/applib/layout/grid/Gri
 ----
 interface GridSystemService<G> {
   Class<G> gridImplementation()     // <.>
-  String tns()
-  String schemaLocation()
-  G defaultGrid(Class<?> domainClass)
+  String tns()     // <.>
+  String schemaLocation()     // <.>
+  G defaultGrid(Class<?> domainClass)     // <.>
   void normalize(G grid, Class<?> domainClass)     // <.>
-  void complete(G grid, Class<?> domainClass)
-  void minimal(G grid, Class<?> domainClass)
+  void complete(G grid, Class<?> domainClass)     // <.>
+  void minimal(G grid, Class<?> domainClass)     // <.>
 }
 ----
 
 <.> xref:#gridImplementation[gridImplementation]
 +
 --
-Which grid (implementation) is defined by this service.
+The concrete subclass of xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] supported by this implementation.
+--
+<.> xref:#tns[tns]
++
+--
+The target namespace for this grid system.
+--
+<.> xref:#schemaLocation[schemaLocation]
++
+--
+The schema location for the XSD.
+--
+<.> xref:#defaultGrid[defaultGrid]
++
+--
+A default grid, used when no grid layout can be found for the domain class.
 --
 <.> xref:#normalize[normalize]
 +
 --
-Validate the grid, derive any missing object members, and overwrite any facets in the metamodel based on the layout.
+Validates and normalizes a grid, modifying the grid so that all of the domain object's members (properties, collections, actions) are bound to regions of the grid.
+--
+<.> xref:#complete[complete]
++
+--
+Takes a normalized grid and enriches it with all the available metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML.
+--
+<.> xref:#minimal[minimal]
++
+--
+Takes a normalized grid and strips out removes all members, leaving only the grid structure.
 --
 
 == Members
@@ -34,10 +61,49 @@ Validate the grid, derive any missing object members, and overwrite any facets i
 [#gridImplementation]
 === gridImplementation
 
-Which grid (implementation) is defined by this service.
+The concrete subclass of xref:system:generated:index/applib/layout/grid/Grid.adoc[Grid] supported by this implementation.
+
+There can be multiple implementations of this service, this indicates the base class used by the implementation.
+
+[#tns]
+=== tns
+
+The target namespace for this grid system.
+
+This is used when generating the XML. The Bootstrap3 grid system provided by the framework returns the value `http://isis.apache.org/applib/layout/grid/bootstrap3`.
+
+[#schemaLocation]
+=== schemaLocation
+
+The schema location for the XSD.
+
+Every grid system is expected to provide a schema XSD in order to provide code completion in an IDE. The Bootstrap3 grid system provided by the framework returns the value `http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd`.
+
+[#defaultGrid]
+=== defaultGrid
+
+A default grid, used when no grid layout can be found for the domain class.
+
+For example, this layout could define two columns in ratio 4:8.
 
 [#normalize]
 === normalize
 
-Validate the grid, derive any missing object members, and overwrite any facets in the metamodel based on the layout.
+Validates and normalizes a grid, modifying the grid so that all of the domain object's members (properties, collections, actions) are bound to regions of the grid.
+
+This is done using existing metadata, most notably that of the _org.apache.isis.applib.annotation.MemberOrder_ annotation. Such a grid, if persisted as the layout XML file for the domain class, allows the _org.apache.isis.applib.annotation.MemberOrder_ annotation to be removed from the source code of the domain class (but other annotations must be retained).
+
+[#complete]
+=== complete
+
+Takes a normalized grid and enriches it with all the available metadata (taken from Apache Isis' internal metadata) that can be represented in the layout XML.
+
+Such a grid, if persisted as the layout XML file for the domain class, allows all layout annotations ( _org.apache.isis.applib.annotation.ActionLayout_ , _org.apache.isis.applib.annotation.PropertyLayout_ , _org.apache.isis.applib.annotation.CollectionLayout_ ) to be removed from the source code of the domain class.
+
+[#minimal]
+=== minimal
+
+Takes a normalized grid and strips out removes all members, leaving only the grid structure.
+
+Such a grid, if persisted as the layout XML file for the domain class, requires that the _org.apache.isis.applib.annotation.MemberOrder_ annotation is retained in the source code of said class in order to bind members to the regions of the grid.
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/health/HealthCheckService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/health/HealthCheckService.adoc
index 72bab43..4994441 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/health/HealthCheckService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/health/HealthCheckService.adoc
@@ -1,5 +1,11 @@
 :Notice: 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 ag [...]
 
+This SPI service allow runtime infrastructure such as Kubernetes or Docker Swarm to monitor the app and (potentially) restart it if required.
+
+This SPI service integrates with Spring Boot'sHealthIndicatorSPI, surfaced through theSpring Boot Actuator. It is therefore accessible from the `/actuator/health` endpoint (Spring allows the endpoint URL to be altered or suppressed).
+
+The service, when called, will be within the context of a special internal user ___health_ with the internal role ___health-role_ .
+
 == API
 
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/hint/HintIdProvider.adoc b/antora/components/system/modules/generated/pages/index/applib/services/hint/HintIdProvider.adoc
new file mode 100644
index 0000000..ab2450b
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/hint/HintIdProvider.adoc
@@ -0,0 +1,18 @@
+:Notice: 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 ag [...]
+
+Provides an SPI for view models to implement to represent their "logical" identity (stable even if the view model's state changes).
+
+Hints are stored against the `Bookmark` of a domain object, essentially the identifier of the domain object. For a domain entity this identifier is fixed and unchanging but for view models the identifier changes each time the view model's state changes (the identifier is basically a digest of the object's state). This means that any hints stored against the view model's bookmark are in effect lost as soon as the view model is modified.
+
+This SPI therefore allows a view model to take advantage of the hinting mechanism of the viewer by providing a "logical" identity stored which hints for the view model can be stored.
+
+== API
+
+[source,java]
+.HintIdProvider.java
+----
+interface HintIdProvider {
+  String hintId()
+}
+----
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc b/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc
index 6c9b8eb..669625b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/hint/HintStore.adoc
@@ -1,16 +1,75 @@
 :Notice: 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 ag [...]
 
+Defines a mechanism for viewers to store arbitrary UI hints on a per-object basis.
+
+This store _is_ used by the Wicket viewer. For example, the viewer remembers which tabs are selected, and for collections which view is selected (eg table or hidden), which page of a table to render, or whether "show all" (rows) is toggled.
+
 == API
 
 [source,java]
 .HintStore.java
 ----
 interface HintStore {
-  String get(final Bookmark bookmark, String hintKey)
-  void set(final Bookmark bookmark, String hintKey, String value)
-  void remove(final Bookmark bookmark, String hintKey)
-  void removeAll(Bookmark bookmark)
-  Set<String> findHintKeys(Bookmark bookmark)
+  String get(final Bookmark bookmark, String hintKey)     // <.>
+  void set(final Bookmark bookmark, String hintKey, String value)     // <.>
+  void remove(final Bookmark bookmark, String hintKey)     // <.>
+  void removeAll(Bookmark bookmark)     // <.>
+  Set<String> findHintKeys(Bookmark bookmark)     // <.>
 }
 ----
 
+<.> xref:#get[get]
++
+--
+Obtain a hint (eg which tab to open) for a particular object.
+--
+<.> xref:#set[set]
++
+--
+Set the state of a hint for the domain object
+--
+<.> xref:#remove[remove]
++
+--
+Removes hint for the domain object.
+--
+<.> xref:#removeAll[removeAll]
++
+--
+Remotes all hints for the domain object.
+--
+<.> xref:#findHintKeys[findHintKeys]
++
+--
+The keys of all available hints for the domain object.
+--
+
+== Members
+
+[#get]
+=== get
+
+Obtain a hint (eg which tab to open) for a particular object.
+
+Object identity is represented by xref:system:generated:index/applib/services/bookmark/Bookmark.adoc[Bookmark] so that alternative implementations can easily serialize this state to a string.
+
+[#set]
+=== set
+
+Set the state of a hint for the domain object
+
+[#remove]
+=== remove
+
+Removes hint for the domain object.
+
+[#removeAll]
+=== removeAll
+
+Remotes all hints for the domain object.
+
+[#findHintKeys]
+=== findHintKeys
+
+The keys of all available hints for the domain object.
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/homepage/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/homepage/HomePageResolverService.adoc
index fa2e0ae..f389238 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/homepage/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/homepage/HomePageResolverService.adoc
@@ -1,6 +1,6 @@
 :Notice: 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 ag [...]
 
-Returns a view model annotated with xref:system:generated:index/applib/annotation/HomePage.adoc[HomePage] .
+This service simply provides access to the home page object (if any) annotated with xref:system:generated:index/applib/annotation/HomePage.adoc[HomePage] .
 
 == API
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/ActionInvocation.adoc
similarity index 78%
copy from antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
copy to antora/components/system/modules/generated/pages/index/applib/services/iactn/ActionInvocation.adoc
index 209e179..e599931 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/ActionInvocation.adoc
@@ -3,11 +3,10 @@
 == API
 
 [source,java]
-.ExecutionLogger.java
+.ActionInvocation.java
 ----
-class ExecutionLogger {
-  boolean isEnabled()
-  void onExecution(final Interaction.Execution<?, ?> execution)
+class ActionInvocation {
+  ActionInvocation(final Interaction interaction, final String memberId, final Object target, final List<Object> args, final String targetMember, final String targetClass)
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc
new file mode 100644
index 0000000..a36b0f6
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Execution.adoc
@@ -0,0 +1,96 @@
+:Notice: 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 ag [...]
+
+Represents an action invocation/property edit as a node in a call-stack execution graph, with sub-interactions being made by way of the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] ).
+
+The xref:system:generated:index/applib/services/iactn/Interaction.adoc[Interaction] has a reference to a _Interaction#getCurrentExecution() top-level_ execution.
+
+== API
+
+[source,java]
+.Execution.java
+----
+class Execution<T, E> {
+  void setParent(final Execution<?, ?> parent)     // <.>
+  List<Execution<?, ?>> getChildren()     // <.>
+  void setEvent(final E event)     // <.>
+  Timestamp start(final ClockService clockService, final MetricsService metricsService)
+  void setCompletedAt(final Timestamp completedAt, final MetricsService metricsService)     // <.>
+  void setReturned(Object returned)     // <.>
+  void setThrew(Exception threw)     // <.>
+  void setDto(final T executionDto)     // <.>
+}
+----
+
+<.> xref:#setParent[setParent]
++
+--
+ *NOT API* : intended to be called only by the framework.
+--
+<.> xref:#getChildren[getChildren]
++
+--
+The actions/property edits made in turn via the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] .
+--
+<.> xref:#setEvent[setEvent]
++
+--
+ *NOT API* : intended to be called only by the framework.
+--
+<.> xref:#setCompletedAt[setCompletedAt]
++
+--
+ *NOT API* : intended to be called only by the framework.
+--
+<.> xref:#setReturned[setReturned]
++
+--
+ *NOT API* : intended to be called only by the framework.
+--
+<.> xref:#setThrew[setThrew]
++
+--
+ *NOT API* : intended to be called only by the framework.
+--
+<.> xref:#setDto[setDto]
++
+--
+ *NOT API* : Set by framework (implementation of _org.apache.isis.core.metamodel.execution.InternalInteraction.MemberExecutor_ )
+--
+
+== Members
+
+[#setParent]
+=== setParent
+
+ *NOT API* : intended to be called only by the framework.
+
+[#getChildren]
+=== getChildren
+
+The actions/property edits made in turn via the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] .
+
+[#setEvent]
+=== setEvent
+
+ *NOT API* : intended to be called only by the framework.
+
+[#setCompletedAt]
+=== setCompletedAt
+
+ *NOT API* : intended to be called only by the framework.
+
+[#setReturned]
+=== setReturned
+
+ *NOT API* : intended to be called only by the framework.
+
+[#setThrew]
+=== setThrew
+
+ *NOT API* : intended to be called only by the framework.
+
+[#setDto]
+=== setDto
+
+ *NOT API* : Set by framework (implementation of _org.apache.isis.core.metamodel.execution.InternalInteraction.MemberExecutor_ )
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc
index 63c7fc5..5dbe5b0 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/ExecutionContext.adoc
@@ -1,6 +1,6 @@
 :Notice: 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 ag [...]
 
-Provides the user and scenario specific environment for an _Interaction.Execution_
+Provides the user and scenario specific environment for an xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution]
 
 == API
 
@@ -8,10 +8,40 @@ Provides the user and scenario specific environment for an _Interaction.Executio
 .ExecutionContext.java
 ----
 class ExecutionContext {
+  @With
+@Getter
+@Builder.Default
+@NonNull
+UserMemento user;     // <.>
+  @With
+@Getter
+@Builder.Default
+@NonNull
+VirtualClock clock;     // <.>
+  @With
+@Getter
+@Builder.Default
+@NonNull
+Locale locale;
+  @With
+@Getter
+@Builder.Default
+@NonNull
+TimeZone timeZone;
   ExecutionContext ofUserWithSystemDefaults(final UserMemento user)     // <.>
 }
 ----
 
+<.> xref:#user[user]
++
+--
+The (programmatically) simulated (or actual) user.
+--
+<.> xref:#clock[clock]
++
+--
+The (programmatically) simulated (or actual) clock.
+--
 <.> xref:#ofUserWithSystemDefaults[ofUserWithSystemDefaults]
 +
 --
@@ -20,6 +50,16 @@ Creates a new xref:system:generated:index/applib/services/iactn/ExecutionContext
 
 == Members
 
+[#user]
+=== user
+
+The (programmatically) simulated (or actual) user.
+
+[#clock]
+=== clock
+
+The (programmatically) simulated (or actual) clock.
+
 [#ofUserWithSystemDefaults]
 === ofUserWithSystemDefaults
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc
index 07d3df3..685c53a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Interaction.adoc
@@ -2,29 +2,40 @@
 
 Represents an action invocation or property modification, resulting in some state change of the system. It captures not only the target object and arguments passed, but also builds up the call-graph, and captures metrics, eg for profiling.
 
+The `Interaction` can be used to obtain the xref:system:generated:index/applib/services/command/Command.adoc[Command] object representing the top-level invocation action/property edit.
+
 The distinction between xref:system:generated:index/applib/services/command/Command.adoc[Command] and this object is perhaps subtle: the former represents the intention to invoke an action/edit a property, whereas this represents the actual invocation/edit itself.
 
 To confuse matters slightly, historically the xref:system:generated:index/applib/services/command/Command.adoc[Command] interface defines members (specifically: _Command#getStartedAt()_ , _Command#getCompletedAt()_ , _Command#getResult()_ , _Command#getException()_ ) which logically belong to this class instead; they remain in xref:system:generated:index/applib/services/command/Command.adoc[Command] for backward compatibility only (and have been deprecated).
 
-NOTE: you could also think of this interface as being analogous to the (database) transaction. The name "Transaction" has not been used for the interface not chosen however because there is also the system-level transaction that manages the persistence of the xref:system:generated:index/applib/services/command/Command.adoc[Command] object itself.
-
 == API
 
 [source,java]
 .Interaction.java
 ----
 interface Interaction {
-  Command getCommand()
+  UUID getUniqueId()     // <.>
+  Command getCommand()     // <.>
   Execution<?, ?> getCurrentExecution()     // <.>
   Execution<?, ?> getPriorExecution()     // <.>
   int next(final String sequenceId)     // <.>
 }
 ----
 
+<.> xref:#getUniqueId[getUniqueId]
++
+--
+The unique identifier of this interaction (inherited from xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId] )
+--
+<.> xref:#getCommand[getCommand]
++
+--
+Represents the _intention_ to perform this interaction.
+--
 <.> xref:#getCurrentExecution[getCurrentExecution]
 +
 --
-The current (most recently pushed) _Execution_ .
+The current (most recently pushed) xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] .
 --
 <.> xref:#getPriorExecution[getPriorExecution]
 +
@@ -34,15 +45,27 @@ The execution that preceded the current one.
 <.> xref:#next[next]
 +
 --
-Generates numbers in a named sequence. The name of the sequence can be arbitrary, though note that the framework also uses this capability to generate sequence numbers corresponding to the sequences enumerated by the _Sequence_ enum.
+Generates numbers in a named sequence. The name of the sequence can be arbitrary, though note that the framework also uses this capability to generate sequence numbers corresponding to the sequences enumerated by the xref:system:generated:index/applib/services/iactn/Sequence.adoc[Sequence] enum.
 --
 
 == Members
 
+[#getUniqueId]
+=== getUniqueId
+
+The unique identifier of this interaction (inherited from xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId] )
+
+This can be used to correlate audit records and transactions happening as a consequence or within the interaction.
+
+[#getCommand]
+=== getCommand
+
+Represents the _intention_ to perform this interaction.
+
 [#getCurrentExecution]
 === getCurrentExecution
 
-The current (most recently pushed) _Execution_ .
+The current (most recently pushed) xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] .
 
 [#getPriorExecution]
 === getPriorExecution
@@ -52,5 +75,5 @@ The execution that preceded the current one.
 [#next]
 === next
 
-Generates numbers in a named sequence. The name of the sequence can be arbitrary, though note that the framework also uses this capability to generate sequence numbers corresponding to the sequences enumerated by the _Sequence_ enum.
+Generates numbers in a named sequence. The name of the sequence can be arbitrary, though note that the framework also uses this capability to generate sequence numbers corresponding to the sequences enumerated by the xref:system:generated:index/applib/services/iactn/Sequence.adoc[Sequence] enum.
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc
index 1321e16..d51ac99 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/InteractionContext.adoc
@@ -2,6 +2,8 @@
 
 Provides the current thread's xref:system:generated:index/applib/services/iactn/Interaction.adoc[Interaction] .
 
+An xref:system:generated:index/applib/services/iactn/Interaction.adoc[Interaction] contains a top-level xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] representing the invocation of an action or the editing of a property. If that top-level action or property uses the _org.apache.isis.applib.services.wrapper.WrapperFactory_ domain service to invoke child actions/properties, then those sub-executions are captured as a call-graph. The xref:system:generated:index [...]
+
 == API
 
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/PropertyEdit.adoc
similarity index 79%
copy from antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
copy to antora/components/system/modules/generated/pages/index/applib/services/iactn/PropertyEdit.adoc
index 209e179..2020122 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/PropertyEdit.adoc
@@ -3,11 +3,10 @@
 == API
 
 [source,java]
-.ExecutionLogger.java
+.PropertyEdit.java
 ----
-class ExecutionLogger {
-  boolean isEnabled()
-  void onExecution(final Interaction.Execution<?, ?> execution)
+class PropertyEdit {
+  PropertyEdit(final Interaction interaction, final String memberId, final Object target, final Object newValue, final String targetMember, final String targetClass)
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc
new file mode 100644
index 0000000..6f59479
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/iactn/Sequence.adoc
@@ -0,0 +1,50 @@
+:Notice: 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 ag [...]
+
+Enumerates the different reasons why multiple occurrences of a certain type might occur within a single (top-level) interaction.
+
+== API
+
+[source,java]
+.Sequence.java
+----
+enum Sequence {
+  INTERACTION     // <.>
+  PUBLISHED_EVENT     // <.>
+  TRANSACTION     // <.>
+  String id()
+}
+----
+
+<.> xref:#INTERACTION[INTERACTION]
++
+--
+Each interaction is either an action invocation or a property edit. There could be multiple of these, typically as the result of a nested calls using the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] . Another reason is support for bulk action invocations within a single transaction.
+--
+<.> xref:#PUBLISHED_EVENT[PUBLISHED_EVENT]
++
+--
+For objects: multiple such could be dirtied and thus published as separate events. For actions invocations/property edits : multiple sub-invocations could occur if sub-invocations are made through the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] .
+--
+<.> xref:#TRANSACTION[TRANSACTION]
++
+--
+There may be multiple transactions within a given interaction.
+--
+
+== Members
+
+[#INTERACTION]
+=== INTERACTION
+
+Each interaction is either an action invocation or a property edit. There could be multiple of these, typically as the result of a nested calls using the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] . Another reason is support for bulk action invocations within a single transaction.
+
+[#PUBLISHED_EVENT]
+=== PUBLISHED_EVENT
+
+For objects: multiple such could be dirtied and thus published as separate events. For actions invocations/property edits : multiple sub-invocations could occur if sub-invocations are made through the xref:system:generated:index/applib/services/wrapper/WrapperFactory.adoc[WrapperFactory] .
+
+[#TRANSACTION]
+=== TRANSACTION
+
+There may be multiple transactions within a given interaction.
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
index 209e179..428ef9e 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/log/ExecutionLogger.adoc
@@ -7,7 +7,7 @@
 ----
 class ExecutionLogger {
   boolean isEnabled()
-  void onExecution(final Interaction.Execution<?, ?> execution)
+  void onExecution(final Execution<?, ?> execution)
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc
index 03a3968..2f25609 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChanges.adoc
@@ -1,18 +1,119 @@
 :Notice: 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 ag [...]
 
+As used by xref:system:generated:index/applib/services/publishing/spi/EntityChangesSubscriber.adoc[EntityChangesSubscriber] , provides metrics on the "footprint" of an interaction, in other words the number of objects accessed or changed.
+
+The numbers of objects loaded, created, updated or deleted and the number of object properties modified (in other words the "size" or "weight" of the transaction).
+
 == API
 
 [source,java]
 .EntityChanges.java
 ----
 interface EntityChanges {
-  Timestamp getCompletedAt()
-  int getNumberLoaded()
-  int getNumberCreated()
-  int getNumberUpdated()
-  int getNumberDeleted()
-  int getNumberPropertiesModified()
-  ChangesDto getDto()
+  UUID getUniqueId()     // <.>
+  String getUsername()     // <.>
+  Timestamp getCompletedAt()     // <.>
+  int getNumberLoaded()     // <.>
+  int getNumberCreated()     // <.>
+  int getNumberUpdated()     // <.>
+  int getNumberDeleted()     // <.>
+  int getNumberPropertiesModified()     // <.>
+  ChangesDto getDto()     // <.>
 }
 ----
 
+<.> xref:#getUniqueId[getUniqueId]
++
+--
+inherited from xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId] , correlates back to the unique identifier of the transaction in which these objects were changed.
+--
+<.> xref:#getUsername[getUsername]
++
+--
+Inherited from xref:system:generated:index/commons/having/HasUsername.adoc[HasUsername] , is the user that initiated the transaction causing these objects to change.
+--
+<.> xref:#getCompletedAt[getCompletedAt]
++
+--
+Time that the interaction execution completed
+--
+<.> xref:#getNumberLoaded[getNumberLoaded]
++
+--
+Number of domain objects loaded in this interaction
+--
+<.> xref:#getNumberCreated[getNumberCreated]
++
+--
+Number of domain objects created in this interaction
+--
+<.> xref:#getNumberUpdated[getNumberUpdated]
++
+--
+Number of domain objects updated in this interaction
+--
+<.> xref:#getNumberDeleted[getNumberDeleted]
++
+--
+Number of domain objects deleted in this interaction
+--
+<.> xref:#getNumberPropertiesModified[getNumberPropertiesModified]
++
+--
+Number of domain objects properties that were changed in this interaction
+--
+<.> xref:#getDto[getDto]
++
+--
+Same details, but as an an instance of _ChangesDto_ .
+--
+
+== Members
+
+[#getUniqueId]
+=== getUniqueId
+
+inherited from xref:system:generated:index/commons/having/HasUniqueId.adoc[HasUniqueId] , correlates back to the unique identifier of the transaction in which these objects were changed.
+
+[#getUsername]
+=== getUsername
+
+Inherited from xref:system:generated:index/commons/having/HasUsername.adoc[HasUsername] , is the user that initiated the transaction causing these objects to change.
+
+[#getCompletedAt]
+=== getCompletedAt
+
+Time that the interaction execution completed
+
+[#getNumberLoaded]
+=== getNumberLoaded
+
+Number of domain objects loaded in this interaction
+
+[#getNumberCreated]
+=== getNumberCreated
+
+Number of domain objects created in this interaction
+
+[#getNumberUpdated]
+=== getNumberUpdated
+
+Number of domain objects updated in this interaction
+
+[#getNumberDeleted]
+=== getNumberDeleted
+
+Number of domain objects deleted in this interaction
+
+[#getNumberPropertiesModified]
+=== getNumberPropertiesModified
+
+Number of domain objects properties that were changed in this interaction
+
+[#getDto]
+=== getDto
+
+Same details, but as an an instance of _ChangesDto_ .
+
+This can be converted into a serializable XML representation using the _org.apache.isis.applib.util.schema.ChangesDtoUtils_ utility class.
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc
index 47d917b..452c735 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/EntityChangesSubscriber.adoc
@@ -1,6 +1,8 @@
 :Notice: 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 ag [...]
 
-SPI to receive the entire set of entities that are about to change as the result of a transaction.
+SPI to receive a summary of the number of entities that have changed as the result of an interaction (action invocation or property edit).
+
+One use case is for performance profiling: to determine the "footprint" of an interaction, which will have a direct impact on the response time of that interaction.
 
 Only those entities that have publishing enabled (using * _DomainObject#entityChangePublishing()_ ) are included.
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc
index a38a906..a1016bd 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/publishing/spi/ExecutionSubscriber.adoc
@@ -1,6 +1,10 @@
 :Notice: 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 ag [...]
 
-SPI that allows individual interactions (action invocations or property edits) to be _#onExecution(Interaction.Execution) published_ . Note that re-publishing is not part of this SPI.
+SPI that allows the execution of individual interactions (action invocations or property edits) to be subscribed to.
+
+The typical use case is to facilitate coarse-grained messaging for system-to-system interactions, that is from an Apache Isis application to some other system. This could be done using a pub/sub bus such asApache ActiveMQwithApache Camel.
+
+Only actions/properties annotated for publishing (using _Action#executionPublishing()_ or _Property#executionPublishing()_ are published.
 
 == API
 
@@ -8,14 +12,14 @@ SPI that allows individual interactions (action invocations or property edits) t
 .ExecutionSubscriber.java
 ----
 interface ExecutionSubscriber {
-  void onExecution(Interaction.Execution<?, ?> execution)     // <.>
+  void onExecution(Execution<?, ?> execution)     // <.>
 }
 ----
 
 <.> xref:#onExecution[onExecution]
 +
 --
-Publish each _org.apache.isis.applib.services.iactn.Interaction.Execution_ immediately after it completes.
+Callback to notify that an interaction (an action invocation or property edit, as represented by xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] ) has completed.
 --
 
 == Members
@@ -23,7 +27,9 @@ Publish each _org.apache.isis.applib.services.iactn.Interaction.Execution_ immed
 [#onExecution]
 === onExecution
 
-Publish each _org.apache.isis.applib.services.iactn.Interaction.Execution_ immediately after it completes.
+Callback to notify that an interaction (an action invocation or property edit, as represented by xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] ) has completed.
+
+This callback method is called by the framework immediately after the interaction (not at the end of the transaction, unlike some of the other subscribers).
 
-Most implementations are expected to use _org.apache.isis.applib.services.iactn.Interaction.Execution#getDto()_ to create a serializable XML representation of the execution. The easiest way to do this is using _InteractionDtoUtils#newInteractionDto(Interaction.Execution)_ . There is some flexibility here, though.
+Most implementations are expected to use _Execution#getDto()_ to create a serializable XML representation of the execution. The easiest way to do this is using _InteractionDtoUtils#newInteractionDto(Execution)_ .
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc b/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc
index 19e76f4..0af2687 100644
--- a/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/util/schema/InteractionDtoUtils.adoc
@@ -14,8 +14,8 @@ class InteractionDtoUtils {
   InteractionDto fromXml(final Class<?> contextClass, final String resourceName, final Charset charset)
   String toXml(final InteractionDto interactionDto)
   void toXml(final InteractionDto interactionDto, final Writer writer)
-  InteractionDto newInteractionDto(final Interaction.Execution<?, ?> execution)     // <.>
-  InteractionDto newInteractionDto(final Interaction.Execution<?, ?> execution, final Strategy strategy)     // <.>
+  InteractionDto newInteractionDto(final Execution<?, ?> execution)     // <.>
+  InteractionDto newInteractionDto(final Execution<?, ?> execution, final Strategy strategy)     // <.>
   ActionInvocationDto newActionInvocation(final int sequence, final Bookmark targetBookmark, final String targetTitle, final String actionIdentifier, final List<ParamDto> parameterDtos, final String user)
   PropertyEditDto newPropertyEdit(final int sequence, final Bookmark targetBookmark, final String targetTitle, final String propertyIdentifier, final ValueWithTypeDto newValueDto, final String user)
   String deriveLogicalMemberId(final Bookmark bookmark, final String memberId)
@@ -37,12 +37,12 @@ class InteractionDtoUtils {
 <.> xref:#newInteractionDto[newInteractionDto]
 +
 --
-Creates a _InteractionDto_ (serializable to XML) for the provided _org.apache.isis.applib.services.iactn.Interaction.Execution_ (the applib object).
+Creates a _InteractionDto_ (serializable to XML) for the provided xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] (the applib object).
 --
 <.> xref:#newInteractionDto[newInteractionDto]
 +
 --
-Creates a _InteractionDto_ (serializable to XML) for the provided _org.apache.isis.applib.services.iactn.Interaction.Execution_ (the applib object).
+Creates a _InteractionDto_ (serializable to XML) for the provided xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] (the applib object).
 --
 <.> xref:#addReturn[addReturn]
 
@@ -51,12 +51,12 @@ Creates a _InteractionDto_ (serializable to XML) for the provided _org.apache.is
 [#newInteractionDto]
 === newInteractionDto
 
-Creates a _InteractionDto_ (serializable to XML) for the provided _org.apache.isis.applib.services.iactn.Interaction.Execution_ (the applib object).
+Creates a _InteractionDto_ (serializable to XML) for the provided xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] (the applib object).
 
 [#newInteractionDto]
 === newInteractionDto
 
-Creates a _InteractionDto_ (serializable to XML) for the provided _org.apache.isis.applib.services.iactn.Interaction.Execution_ (the applib object).
+Creates a _InteractionDto_ (serializable to XML) for the provided xref:system:generated:index/applib/services/iactn/Execution.adoc[Execution] (the applib object).
 
 [#addReturn]
 === addReturn
diff --git a/antora/components/system/modules/generated/pages/index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc b/antora/components/system/modules/generated/pages/index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc
deleted file mode 100644
index e8bae66..0000000
--- a/antora/components/system/modules/generated/pages/index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-:Notice: 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 ag [...]
-
-Recognizes exceptions of type _DataAccessException_ if no one else does (fallback).
-
-== API
-
-[source,java]
-.ExceptionRecognizerForOtherDataAccessProblem.java
-----
-class ExceptionRecognizerForOtherDataAccessProblem {
-  ExceptionRecognizerForOtherDataAccessProblem(IsisConfiguration conf)
-}
-----
-
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc
index 9fb8a77..12b63cc 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.adoc
@@ -6,10 +6,11 @@
 .IsisModuleJdoDatanucleus.java
 ----
 class IsisModuleJdoDatanucleus {
-  DnJdoDialect getDnJdoDialect()     // <.>
+  DnJdoDialect getDnJdoDialect(final DataSource dataSource)     // <.>
   LocalPersistenceManagerFactoryBean getLocalPersistenceManagerFactoryBean(final IsisConfiguration isisConfiguration, final DataSource dataSource, final MetaModelContext metaModelContext, final EventBusService eventBusService, final Provider<EntityChangeTracker> entityChangeTrackerProvider, final DnSettings dnSettings)
   TransactionAwarePersistenceManagerFactoryProxy getTransactionAwarePersistenceManagerFactoryProxy(final LocalPersistenceManagerFactoryBean localPmfBean)
   JdoTransactionManager getTransactionManager(final JdoDialect jdoDialect, final LocalPersistenceManagerFactoryBean localPmfBean)
+  TransactionInterceptorFactory getTransactionInterceptorFactory()     // <.>
 }
 ----
 
@@ -18,6 +19,11 @@ class IsisModuleJdoDatanucleus {
 --
 Conveniently registers this dialect as a _PersistenceExceptionTranslator_ with _Spring_ .
 --
+<.> xref:#getTransactionInterceptorFactory[getTransactionInterceptorFactory]
++
+--
+AOP PATCH
+--
 
 == Members
 
@@ -26,3 +32,8 @@ Conveniently registers this dialect as a _PersistenceExceptionTranslator_ with _
 
 Conveniently registers this dialect as a _PersistenceExceptionTranslator_ with _Spring_ .
 
+[#getTransactionInterceptorFactory]
+=== getTransactionInterceptorFactory
+
+AOP PATCH
+
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/dialect/DnJdoDialect.adoc b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/dialect/DnJdoDialect.adoc
index e0bb1f0..db91f71 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/dialect/DnJdoDialect.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/dialect/DnJdoDialect.adoc
@@ -8,7 +8,8 @@ Vendor ( _Datanucleus_ ) specific implementation of _Spring's_ _JdoDialect_ inte
 .DnJdoDialect.java
 ----
 class DnJdoDialect {
-  DataAccessException translateExceptionIfPossible(RuntimeException ex)
+  DnJdoDialect(Object connectionFactory)
+  DataAccessException translateExceptionIfPossible(RuntimeException cause)
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.adoc b/antora/components/system/modules/generated/pages/index/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.adoc
index a86679e..ed218b5 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.adoc
@@ -10,7 +10,6 @@ Sets up EclipseLink as the implementation provider for Spring Data JPA.
 .IsisModuleJpaEclipselink.java
 ----
 class IsisModuleJpaEclipselink {
-  EclipseLinkJpaDialect eclipselinkJpaDialect()
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 3f096ae..04c230e 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -180,7 +180,7 @@ default (Java) programming model.
 [%collapsible]
 .Document Index Entries
 ====
-xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/IsisModuleApplib.adoc[IsisModuleApplib], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:syst [...]
+xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/IsisModuleApplib.adoc[IsisModuleApplib], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:syst [...]
 ====
 
 |Apache Isis Core - Code Gen (ByteBuddy)
@@ -413,11 +413,7 @@ Folder: \core\runtimeservices
 * o.a.i.core.runtimeservices.publish.ExecutionPublisherDefault
 * o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault
 * o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForDataAlreadyExists
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForObjectNotFound
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForOtherDataAccessProblem
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForRelatedDataExists
-* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForUnableToSaveData
+* o.a.i.core.runtimeservices.recognizer.dae.ExceptionRecognizerForDataAccessException
 * o.a.i.core.runtimeservices.repository.RepositoryServiceDefault
 * o.a.i.core.runtimeservices.routing.RoutingServiceDefault
 * o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault
@@ -443,7 +439,7 @@ Folder: \core\runtimeservices
 [%collapsible]
 .Document Index Entries
 ====
-xref:system:generated:index/core/runtimeservices/recognizer/dae/impl/ExceptionRecognizerForOtherDataAccessProblem.adoc[ExceptionRecognizerForOtherDataAccessProblem], xref:system:generated:index/core/runtimeservices/transaction/TransactionServiceSpring.adoc[TransactionServiceSpring], xref:system:generated:index/core/runtimeservices/xml/XmlServiceDefault.adoc[XmlServiceDefault]
+xref:system:generated:index/core/runtimeservices/transaction/TransactionServiceSpring.adoc[TransactionServiceSpring], xref:system:generated:index/core/runtimeservices/xml/XmlServiceDefault.adoc[XmlServiceDefault]
 ====
 
 |Apache Isis Core - Security
@@ -645,12 +641,12 @@ skinparam rectangle<<116>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<117>> {
+skinparam rectangle<<90>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<90>> {
+skinparam rectangle<<117>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -700,12 +696,12 @@ skinparam rectangle<<97>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<98>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<98>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -775,17 +771,12 @@ skinparam rectangle<<122>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<2>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 skinparam rectangle<<123>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<124>> {
+skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -795,7 +786,7 @@ skinparam rectangle<<3>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<125>> {
+skinparam rectangle<<124>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -805,7 +796,7 @@ skinparam rectangle<<4>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<126>> {
+skinparam rectangle<<125>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -815,7 +806,7 @@ skinparam rectangle<<5>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<127>> {
+skinparam rectangle<<126>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -825,6 +816,11 @@ skinparam rectangle<<6>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<127>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<128>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -835,12 +831,12 @@ skinparam rectangle<<7>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<129>> {
+skinparam rectangle<<8>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<8>> {
+skinparam rectangle<<129>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -1405,12 +1401,12 @@ skinparam rectangle<<108>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<82>> {
+skinparam rectangle<<109>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<109>> {
+skinparam rectangle<<82>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -3530,6 +3526,23 @@ Type: jar
 Folder: \regressiontests\stable
 ----
 |[%collapsible]
+.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.jdo.JdoInventoryDao
+* o.a.i.testdomain.jpa.JpaInventoryDao
+* o.a.i.testdomain.jpa.springdata.EmployeeRepository
+* o.a.i.testdomain.util.interaction.InteractionBoundaryProbe
+* o.a.i.testdomain.util.kv.KVStoreForTesting
+* o.a.i.testdomain.util.rest.RestEndpointService
+====
+[%collapsible]
 .Dependencies
 ====
 * org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed>
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc b/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
index a9dd072..457a809 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/Other.adoc
@@ -25,7 +25,7 @@ isis.persistence.schema. +
 additional-orm-files
 
 | 
-| Does lookup additional "mapping-files" in META-INF/orm-_name_.xml (equivalent to "mapping-file" entries in persistence.xml) and adds these to those that are already configured the _Spring Data_ way (if any).
+| Does lookup additional "mapping-files" in META-INF/orm-_name_.xml (equivalent to "mapping-file" entries in persistence.xml) and adds these to those that are already configured the _Spring Data_ way (if any). NOTE: not implemented for JDO
 
 
 |
@@ -47,12 +47,14 @@ isis.persistence.schema. +
 create-schema-sql-template
 
 |  CREATE SCHEMA IF NOT EXISTS %S
-| SQL syntax to create a DB schema.
+| Vendor specific SQL syntax to create a DB schema.
 
 This template is passed through schemaName) to make the actual SQL statement thats to be used against the configured data-source.
 
 Default template is \{@literal CREATE SCHEMA IF NOT EXISTS %S} with the schema name converted to upper-case.
 
+For MYSQL/MARIADB use escape like \{@code `%S`}
+
 
 
 |===
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc b/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
index 4ebc527..da1e6be 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/_nav.adoc
@@ -5,8 +5,6 @@
 ** xref:refguide:config:sections/isis.core.runtime.adoc[Core Runtime configurations]
 ** xref:refguide:config:sections/isis.core.runtime-services.adoc[Core Runtime Services configurations]
 ** xref:refguide:config:sections/isis.security.shiro.adoc[Shiro Security Implementation]
-** xref:refguide:config:sections/jdo-datanucleus.adoc[JDO DataNucleus]
-** xref:refguide:config:sections/jdo-datanucleus-conf.adoc[DataNucleus Configuration]
 ** xref:refguide:config:sections/isis.viewer.restfulobjects.adoc[Restful Objects Viewer]
 ** xref:refguide:config:sections/isis.viewer.wicket.adoc[Wicket Viewer]
 ** xref:refguide:config:sections/isis.extensions.adoc[Extensions]
diff --git a/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc b/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
index 9c23f1b..49993c5 100644
--- a/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
+++ b/core/config/src/main/adoc/modules/config/pages/sections/isis.applib.adoc
@@ -435,7 +435,7 @@ execution-publishing
 
 The service's publish method is called only once per transaction, with ``Execution`` collecting details of the identity of the target object, the property edited, and the new value of the property.
 
-This setting can be overridden on a case-by-case basis using \{ @link org.apache.isis.applib.annotation.Property#publishing()}.
+This setting can be overridden on a case-by-case basis using ``Property#publishing()``.
 
 
 |
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 5cd6a74..1c9389f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -167,7 +167,7 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
         private final ManagedObject newValueAdapter;
         private final OneToOneAssociation owningProperty;
         private final ManagedObject targetManagedObject;
-        //private final Interaction.PropertyEdit propertyEdit;
+        //private final PropertyEdit propertyEdit;
 //        private final Command command;
         private final InteractionInitiatedBy interactionInitiatedBy;
         private final InteractionHead head;
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
index f40dc60..ee1162e 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
@@ -219,7 +219,7 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
                 // for the result adapter, we could alternatively have used...
                 // (priorExecution populated by the push/pop within the interaction object)
                 //
-                // final Interaction.Execution priorExecution = backgroundInteraction.getPriorExecution();
+                // final Execution priorExecution = backgroundInteraction.getPriorExecution();
                 // Object unused = priorExecution.getReturned();
                 //
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
index 657282c..463a0f9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/ExecutionListenerToCaptureInteractionsInMemory.java
@@ -25,6 +25,7 @@ import java.util.stream.Stream;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.services.iactn.Interaction;
+import org.apache.isis.applib.services.iactn.Execution;
 import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.applib.util.schema.InteractionDtoUtils;
 import org.apache.isis.schema.ixn.v2.InteractionDto;
@@ -38,7 +39,7 @@ public class ExecutionListenerToCaptureInteractionsInMemory implements Execution
     private final List<InteractionDto> executions = new ArrayList<>();
 
     @Override
-    public void onExecution(Interaction.Execution<?, ?> execution) {
+    public void onExecution(Execution<?, ?> execution) {
         val dto = InteractionDtoUtils.newInteractionDto(            // <.>
                     execution, InteractionDtoUtils.Strategy.DEEP);
         executions.add(dto);
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java
index 1ac00d3..3152d24 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/jdo/JdoExecutionPublishingTest.java
@@ -30,7 +30,9 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.applib.services.iactn.Interaction.Execution;
+import org.apache.isis.applib.services.iactn.ActionInvocation;
+import org.apache.isis.applib.services.iactn.PropertyEdit;
+import org.apache.isis.applib.services.iactn.Execution;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.presets.IsisPresets;
@@ -50,7 +52,7 @@ import lombok.val;
                 Configuration_usingJdo.class,
                 Configuration_usingExecutionPublishing.class,
                 ApplicationLayerTestFactory.class
-        }, 
+        },
         properties = {
                 "logging.level.org.apache.isis.persistence.jdo.datanucleus5.persistence.IsisTransactionJdo=DEBUG",
                 "logging.level.org.apache.isis.core.runtimeservices.session.IsisInteractionFactoryDefault=DEBUG",
@@ -72,16 +74,16 @@ class JdoExecutionPublishingTest extends IsisIntegrationTestAbstract {
     private void given() {
         ExecutionSubscriberForTesting.clearPublishedEntries(kvStore);
     }
-    
+
     private void verify(VerificationStage verificationStage) {
         switch(verificationStage) {
-        
+
         case FAILURE_CASE:
             assertHasExecutionEntries(Can.empty());
             break;
         case POST_COMMIT:
-        
-            
+
+
             Interaction interaction = null;
             String propertyId = "org.apache.isis.testdomain.jdo.entities.JdoBook#name";
             Object target = null;
@@ -89,14 +91,14 @@ class JdoExecutionPublishingTest extends IsisIntegrationTestAbstract {
             String targetMemberName = "name???";
             String targetClass = "org.apache.isis.testdomain.jdo.entities.JdoBook";
             assertHasExecutionEntries(Can.of(
-                    new Interaction.PropertyEdit(interaction, propertyId, target, argValue, targetMemberName, targetClass)
+                    new PropertyEdit(interaction, propertyId, target, argValue, targetMemberName, targetClass)
                     ));
             break;
         default:
             // ignore ... no checks
         }
     }
-    
+
     // -- HELPER
 
     private void assertHasExecutionEntries(Can<Execution<?, ?>> expectedExecutions) {
@@ -104,40 +106,40 @@ class JdoExecutionPublishingTest extends IsisIntegrationTestAbstract {
         CollectionAssertions.assertComponentWiseEquals(
                 expectedExecutions, actualExecutions, this::executionDifference);
     }
-    
+
     private String executionDifference(Execution<?, ?> a, Execution<?, ?> b) {
         if(!Objects.equals(a.getMemberIdentifier(), b.getMemberIdentifier())) {
-            return String.format("differing member identifier %s != %s", 
+            return String.format("differing member identifier %s != %s",
                     a.getMemberIdentifier(), b.getMemberIdentifier());
         }
         if(!Objects.equals(a.getInteractionType(), b.getInteractionType())) {
-            return String.format("differing interaction type %s != %s", 
+            return String.format("differing interaction type %s != %s",
                     a.getInteractionType(), b.getInteractionType());
         }
-        
+
         switch(a.getInteractionType()) {
         case ACTION_INVOCATION:
             return actionInvocationDifference(
-                    (Interaction.ActionInvocation)a, (Interaction.ActionInvocation)b);
+                    (ActionInvocation)a, (ActionInvocation)b);
         case PROPERTY_EDIT:
             return porpertyEditDifference(
-                    (Interaction.PropertyEdit)a, (Interaction.PropertyEdit)b);
+                    (PropertyEdit)a, (Interaction.PropertyEdit)b);
         default:
             throw _Exceptions.unexpectedCodeReach();
         }
     }
-    
-    private String actionInvocationDifference(Interaction.ActionInvocation a, Interaction.ActionInvocation b) {
+
+    private String actionInvocationDifference(ActionInvocation a, ActionInvocation b) {
         return null; // no difference
     }
-    
-    
-    private String porpertyEditDifference(Interaction.PropertyEdit a, Interaction.PropertyEdit b) {
+
+
+    private String porpertyEditDifference(PropertyEdit a, PropertyEdit b) {
         if(!Objects.equals(a.getNewValue(), b.getNewValue())) {
-            return String.format("differing new value %s != %s", 
+            return String.format("differing new value %s != %s",
                     a.getNewValue(), b.getNewValue());
         }
-        
+
         return null; // no difference
     }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/ExecutionSubscriberForTesting.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/ExecutionSubscriberForTesting.java
index abc5760..27f951b 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/ExecutionSubscriberForTesting.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/ExecutionSubscriberForTesting.java
@@ -26,7 +26,7 @@ import javax.inject.Inject;
 
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.applib.services.iactn.Interaction.Execution;
+import org.apache.isis.applib.services.iactn.Execution;
 import org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber;
 import org.apache.isis.applib.util.schema.MemberExecutionDtoUtils;
 import org.apache.isis.commons.collections.Can;
@@ -37,7 +37,7 @@ import lombok.extern.log4j.Log4j2;
 
 @Service
 @Log4j2
-public class ExecutionSubscriberForTesting 
+public class ExecutionSubscriberForTesting
 implements ExecutionSubscriber {
 
     @Inject private KVStoreForTesting kvStore;
@@ -51,16 +51,16 @@ implements ExecutionSubscriber {
     public void onExecution(Execution<?, ?> execution) {
 
         @SuppressWarnings("unchecked")
-        val publishedEntries = 
+        val publishedEntries =
         (List<Execution<?, ?>>) kvStore.get(this, "publishedExecutions").orElseGet(ArrayList::new);
 
         publishedEntries.add(execution);
 
         kvStore.put(this, "publishedExecutions", publishedEntries);
         log.debug("publish execution {}", ()->MemberExecutionDtoUtils.toXml(execution.getDto()));
-        
+
         System.err.println("exec: " + MemberExecutionDtoUtils.toXml(execution.getDto()));
-        
+
     }
 
     // -- UTILITIES
@@ -76,4 +76,4 @@ implements ExecutionSubscriber {
         kvStore.clear(ExecutionSubscriberForTesting.class);
     }
 
-}
\ No newline at end of file
+}
diff --git a/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml b/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
index d3a1060..bd127f4 100644
--- a/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
+++ b/tooling/cli/adoc/modules/tooling-cli/examples/isis-tooling.yml
@@ -21,77 +21,77 @@ global:
   namespacePartsSkipCount: 3
 
   sections:
-    App: org.apache.isis.app.*
-    Mavendeps: org.apache.isis.mavendeps.*
-    Testing: org.apache.isis.testing.*
-    Examples: org.apache.isis.examples.*
-
-    Root: org.apache.isis
-    Commons: org.apache.isis.commons.*
+#    App: org.apache.isis.app.*
+#    Mavendeps: org.apache.isis.mavendeps.*
+#    Testing: org.apache.isis.testing.*
+#    Examples: org.apache.isis.examples.*
+#
+#    Root: org.apache.isis
+#    Commons: org.apache.isis.commons.*
 
     Core: org.apache.isis.core.*
 
-    Persistence: org.apache.isis.persistence
-    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
-    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
-
-    Security: org.apache.isis.security
-    Bypass: "org.apache.isis.security:isis-security-bypass.*"
-    Keycloak: "org.apache.isis.security:isis-security-keycloak.*"
-    Shiro: "org.apache.isis.security:isis-security-shiro.*"
-
-    Viewer: org.apache.isis.viewer
-    "Restful Objects": "org.apache.isis.viewer:isis-viewer-restfulobjects.*"
-    Wicket: "org.apache.isis.viewer:isis-viewer-wicket.*"
-
-    Valuetypes: org.apache.isis.valuetypes.*
-    "Asciidoc": "org.apache.isis.valuetypes:isis-valuetypes-asciidoc.*"
-    "Markdown": "org.apache.isis.valuetypes:isis-valuetypes-markdown.*"
-    "SSE": "org.apache.isis.valuetypes:isis-valuetypes-ssec.*"
-
-    Mappings: org.apache.isis.mappings
-    #"Outbox Publisher": org.apache.isis.mappings:isis-mappings-jaxrsclient.*
-    "JAX-RS Client Library": "org.apache.isis.mappings:isis-mappings-jaxrsclient.*"
-    #Minio: "org.apache.isis.mappings:isis-mappings-minio.*"
-    "REST Client": "org.apache.isis.mappings:isis-mappings-restclient.*"
-    #"Slack Library": "org.apache.isis.mappings:isis-mappings-slack.*"
-
-    Extensions: org.apache.isis.extensions
-    "Core: Command Log": "org.apache.isis.extensions:isis-extensions-command-log.*"
-    "Core: Command Replay": "org.apache.isis.extensions:isis-extensions-command-replay.*"
-    #"Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
-    "Core: Model Annotation": "org.apache.isis.extensions:isis-extensions-modelannotation.*"
-    "Core: Quartz": "org.apache.isis.extensions:isis-extensions-quartz.*"
-    #"Security: Audit Trail": "org.apache.isis.security:isis-extensions-audit-trail.*"
-    "Security: Secman": "org.apache.isis.security:isis-extensions-secman.*"
-    #"Security: Session Log": "org.apache.isis.security:isis-extensions-session-log.*"
-    "Security: Shiro LDAP Realm": "org.apache.isis.security:isis-extensions-shiro-realm-ldap.*"
-    "RO Viewer: CORS": "org.apache.isis.security:isis-extensions-cors.*"
-    "Wicket Viewer: Excel Download": "org.apache.isis.security:isis-extensions-exceldownload.*"
-    "Wicket Viewer: Full Calendar": "org.apache.isis.security:isis-extensions-fullcalendar.*"
-    #"Wicket Viewer: Gmap3": "org.apache.isis.security:isis-extensions-gmap3.*"
-    "Wicket Viewer: Pdf.js": "org.apache.isis.security:isis-extensions-fullcalendar.*"
-
-    Subdomains: org.apache.isis.subdomains
-    "Base": "org.apache.isis.subdomains:isis-subdomains-base.*"
-    #"docx": "org.apache.isis.subdomains:isis-subdomains-docx.*"
-    "Excel": "org.apache.isis.subdomains:isis-subdomains-excel.*"
-    #"Freemarker": "org.apache.isis.subdomains:isis-subdomains-freemarker.*"
-    #"OGNL": "org.apache.isis.subdomains:isis-subdomains-ognl.*"
-    #"PDF Box": "org.apache.isis.subdomains:isis-subdomains-pdfbox.*"
-    "Spring": "org.apache.isis.subdomains:isis-subdomains-spring.*"
-    "XDocReport": "org.apache.isis.subdomains:isis-subdomains-xdocreport.*"
-    #"Zip": "org.apache.isis.subdomains:isis-subdomains-zip.*"
-
-    "Tooling": org.apache.isis.tooling.*
-    "Regression Tests": org.apache.isis.regressiontests.*
-
-    Incubator: org.apache.isis.incubator
-    "Kroviz Client": "org.apache.isis.incubator.clients:isis-client-kroviz.*"
-    "JavaFX Viewer": "org.apache.isis.incubator.viewer:isis-viewer-javafx.*"
-    "Vaadin Viewer": "org.apache.isis.incubator.viewer:isis-viewer-vaadin.*"
-
-    Legacy: org.apache.isis.legacy.*
+#    Persistence: org.apache.isis.persistence
+#    JDO: "org.apache.isis.persistence:isis-persistence-jdo.*"
+#    JPA: "org.apache.isis.persistence:isis-persistence-jpa.*"
+#
+#    Security: org.apache.isis.security
+#    Bypass: "org.apache.isis.security:isis-security-bypass.*"
+#    Keycloak: "org.apache.isis.security:isis-security-keycloak.*"
+#    Shiro: "org.apache.isis.security:isis-security-shiro.*"
+#
+#    Viewer: org.apache.isis.viewer
+#    "Restful Objects": "org.apache.isis.viewer:isis-viewer-restfulobjects.*"
+#    Wicket: "org.apache.isis.viewer:isis-viewer-wicket.*"
+#
+#    Valuetypes: org.apache.isis.valuetypes.*
+#    "Asciidoc": "org.apache.isis.valuetypes:isis-valuetypes-asciidoc.*"
+#    "Markdown": "org.apache.isis.valuetypes:isis-valuetypes-markdown.*"
+#    "SSE": "org.apache.isis.valuetypes:isis-valuetypes-ssec.*"
+#
+#    Mappings: org.apache.isis.mappings
+#    #"Outbox Publisher": org.apache.isis.mappings:isis-mappings-jaxrsclient.*
+#    "JAX-RS Client Library": "org.apache.isis.mappings:isis-mappings-jaxrsclient.*"
+#    #Minio: "org.apache.isis.mappings:isis-mappings-minio.*"
+#    "REST Client": "org.apache.isis.mappings:isis-mappings-restclient.*"
+#    #"Slack Library": "org.apache.isis.mappings:isis-mappings-slack.*"
+#
+#    Extensions: org.apache.isis.extensions
+#    "Core: Command Log": "org.apache.isis.extensions:isis-extensions-command-log.*"
+#    "Core: Command Replay": "org.apache.isis.extensions:isis-extensions-command-replay.*"
+#    #"Core: Flyway": "org.apache.isis.extensions:isis-extensions-flyway.*"
+#    "Core: Model Annotation": "org.apache.isis.extensions:isis-extensions-modelannotation.*"
+#    "Core: Quartz": "org.apache.isis.extensions:isis-extensions-quartz.*"
+#    #"Security: Audit Trail": "org.apache.isis.security:isis-extensions-audit-trail.*"
+#    "Security: Secman": "org.apache.isis.security:isis-extensions-secman.*"
+#    #"Security: Session Log": "org.apache.isis.security:isis-extensions-session-log.*"
+#    "Security: Shiro LDAP Realm": "org.apache.isis.security:isis-extensions-shiro-realm-ldap.*"
+#    "RO Viewer: CORS": "org.apache.isis.security:isis-extensions-cors.*"
+#    "Wicket Viewer: Excel Download": "org.apache.isis.security:isis-extensions-exceldownload.*"
+#    "Wicket Viewer: Full Calendar": "org.apache.isis.security:isis-extensions-fullcalendar.*"
+#    #"Wicket Viewer: Gmap3": "org.apache.isis.security:isis-extensions-gmap3.*"
+#    "Wicket Viewer: Pdf.js": "org.apache.isis.security:isis-extensions-fullcalendar.*"
+#
+#    Subdomains: org.apache.isis.subdomains
+#    "Base": "org.apache.isis.subdomains:isis-subdomains-base.*"
+#    #"docx": "org.apache.isis.subdomains:isis-subdomains-docx.*"
+#    "Excel": "org.apache.isis.subdomains:isis-subdomains-excel.*"
+#    #"Freemarker": "org.apache.isis.subdomains:isis-subdomains-freemarker.*"
+#    #"OGNL": "org.apache.isis.subdomains:isis-subdomains-ognl.*"
+#    #"PDF Box": "org.apache.isis.subdomains:isis-subdomains-pdfbox.*"
+#    "Spring": "org.apache.isis.subdomains:isis-subdomains-spring.*"
+#    "XDocReport": "org.apache.isis.subdomains:isis-subdomains-xdocreport.*"
+#    #"Zip": "org.apache.isis.subdomains:isis-subdomains-zip.*"
+#
+#    "Tooling": org.apache.isis.tooling.*
+#    "Regression Tests": org.apache.isis.regressiontests.*
+#
+#    Incubator: org.apache.isis.incubator
+#    "Kroviz Client": "org.apache.isis.incubator.clients:isis-client-kroviz.*"
+#    "JavaFX Viewer": "org.apache.isis.incubator.viewer:isis-viewer-javafx.*"
+#    "Vaadin Viewer": "org.apache.isis.incubator.viewer:isis-viewer-vaadin.*"
+#
+#    Legacy: org.apache.isis.legacy.*
 
 
 commands:
@@ -100,4 +100,6 @@ commands:
 
   index:
     fixOrphanedAdocIncludeStatements: false
+    skipTitleHeader: true
+    formatter: JAVA_SOURCES_WITH_SECTIONS