You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/07/26 07:53:37 UTC

[isis] 02/02: ISIS-3085: update site index

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

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

commit a302eda4d501d0ec4f97c6cbaa9c4eb359ccdf7c
Author: andi-huber <ah...@apache.org>
AuthorDate: Tue Jul 26 09:53:27 2022 +0200

    ISIS-3085: update site index
---
 .../pages/index/annotation/ParameterLayout.adoc    |  39 --
 .../pages/index/annotation/PropertyLayout.adoc     |  40 --
 .../index/annotation/TimeZoneTranslation.adoc      |  39 ++
 .../pages/index/annotation/ValueSemantics.adoc     |  11 +
 .../applib/pages/index/events/ui/IconUiEvent.adoc  |   2 +-
 .../modules/applib/pages/index/id/LogicalType.adoc |   4 +-
 .../pages/index/mixins/security/HasUsername.adoc   |   2 +-
 .../appfeat/ApplicationFeatureRepository.adoc      |   1 +
 .../pages/index/services/command/Command.adoc      |   2 +-
 .../services/iactnlayer/InteractionContext.adoc    |  11 +
 .../services/iactnlayer/InteractionService.adoc    |  24 +
 .../index/services/wrapper/WrapperFactory.adoc     |  35 ++
 .../HasUsername_recentCommandsByUser.adoc          |   2 +-
 .../contributions/Object_recentCommands.adoc       |   6 +-
 .../jpa/IsisModuleExtCommandLogPersistenceJpa.adoc |   1 +
 .../mixins/CommandLogEntry_replayQueue.adoc        |   2 +-
 .../IsisModuleExtExecutionLogPersistenceJpa.adoc   |   1 +
 ...IsisModuleExtExecutionOutboxPersistenceJpa.adoc |   1 +
 .../applib/IsisModuleExtFullCalendarApplib.adoc    |   1 +
 .../jpa/IsisModuleExtSecmanPersistenceJpa.adoc     |   1 +
 .../teardown/jpa/TeardownFixtureJpaAbstract.adoc}  |   6 +-
 .../applib/IsisModuleValAsciidocApplib.adoc        |   1 +
 .../applib/IsisModuleValMarkdownApplib.adoc        |   1 +
 .../IsisModuleViewerRestfulObjectsApplib.adoc      |   1 +
 core/adoc/modules/_overview/pages/about.adoc       | 514 ++++++++++++++-------
 25 files changed, 486 insertions(+), 262 deletions(-)

diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc
index 788bbec223..427120d914 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc
@@ -14,8 +14,6 @@ Collects together all layout hints for action parameters in a single annotation.
   LabelPosition labelPosition() default LabelPosition.NOT_SPECIFIED;     // <.>
   String named() default "";     // <.>
   int multiLine() default -1;     // <.>
-  @Deprecated(forRemoval = true, since = "2.0.0-M7")
-RenderDay renderDay() default RenderDay.NOT_SPECIFIED;     // <.>
   int typicalLength() default -1;     // <.>
 }
 ----
@@ -45,18 +43,6 @@ Name of this action parameter.
 --
 For string parameters (and properties), whether to render as a text area over multiple lines.
 --
-<.> xref:#renderDay[renderDay]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-instead use _ValueSemantics#dateRenderAdjustDays()_
-====
-
-For date parameters (and properties) only, instructs the viewer that the date should be rendered as one day prior to the actually stored date.
---
 <.> xref:#typicalLength[typicalLength]
 +
 --
@@ -98,31 +84,6 @@ For string parameters (and properties), whether to render as a text area over mu
 
 If set to > 1, then _#labelPosition()_ defaults to _LabelPosition#TOP top_ .
 
-[#renderDay]
-=== renderDay
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-instead use _ValueSemantics#dateRenderAdjustDays()_
-====
-
-For date parameters (and properties) only, instructs the viewer that the date should be rendered as one day prior to the actually stored date.
-
-This is intended to be used so that an exclusive end date of an interval can be rendered as 1 day before the actual value stored.
-
-For example:
-
-----
-
-public void updateDates(
-    @ParameterLayout(named="From") LocalDate startDate,
-    @ParameterLayout(named="To"), renderDay=RenderDay.AS_DAY_BEFORE) LocalDate endDate) { ... }
-----
-
-Here, the interval of the [1-may-2013,1-jun-2013) would be rendered as the dates 1-may-2013 for the start date but using 31-may-2013 (the day before) for the end date. What is stored In the domain object, itself, however, the value stored is 1-jun-2013.
-
 [#typicalLength]
 === typicalLength
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/PropertyLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/PropertyLayout.adoc
index 852032ee3a..5ed5569d1a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/PropertyLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/PropertyLayout.adoc
@@ -19,8 +19,6 @@ Collects together all layout hints for a property of a domain object.
   String named() default "";     // <.>
   Navigable navigable() default Navigable.NOT_SPECIFIED;     // <.>
   PromptStyle promptStyle() default PromptStyle.NOT_SPECIFIED;     // <.>
-  @Deprecated(forRemoval = true, since = "2.0.0-M7")
-RenderDay renderDay() default RenderDay.NOT_SPECIFIED;     // <.>
   Repainting repainting() default Repainting.NOT_SPECIFIED;     // <.>
   String sequence() default "";     // <.>
   int typicalLength() default -1;     // <.>
@@ -77,18 +75,6 @@ Whether this property should be used to construct the navigable chain of breadcr
 --
 How the properties of this domain object are be edited, either _PromptStyle#DIALOG dialog_ or _PromptStyle#INLINE inline_ .
 --
-<.> xref:#renderDay[renderDay]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-instead use _ValueSemantics#dateRenderAdjustDays()_
-====
-
-For date properties (and parameters) only, instructs the viewer that the date should be rendered as one day prior to the actually stored date.
---
 <.> xref:#repainting[repainting]
 +
 --
@@ -181,32 +167,6 @@ Only one property can be annotated as such per domain class.
 
 How the properties of this domain object are be edited, either _PromptStyle#DIALOG dialog_ or _PromptStyle#INLINE inline_ .
 
-[#renderDay]
-=== renderDay
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-instead use _ValueSemantics#dateRenderAdjustDays()_
-====
-
-For date properties (and parameters) only, instructs the viewer that the date should be rendered as one day prior to the actually stored date.
-
-This is intended to be used so that an exclusive end date of an interval can be rendered as 1 day before the actual value stored.
-
-For example:
-
-----
-
-public LocalDate getStartDate() { ... }
-
-@PropertyLayout(renderDay=RenderDay.AS_DAY_BEFORE)
-public LocalDate getEndDate() { ... }
-----
-
-Here, the interval of the [1-may-2013,1-jun-2013) would be rendered as the dates 1-may-2013 for the start date but using 31-may-2013 (the day before) for the end date. What is stored In the domain object, itself, however, the value stored is 1-jun-2013.
-
 [#repainting]
 === repainting
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/TimeZoneTranslation.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/TimeZoneTranslation.adoc
new file mode 100644
index 0000000000..7e41f036ea
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/TimeZoneTranslation.adoc
@@ -0,0 +1,39 @@
+= TimeZoneTranslation _(enum)_
+: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 [...]
+
+Rendering mode for temporals ( _time instants_ ) with time-zone or time-offset information.
+
+== API
+
+[source,java]
+.TimeZoneTranslation.java
+----
+enum TimeZoneTranslation {
+  UNSPECIFIED
+  TO_LOCAL_TIMEZONE     // <.>
+  NONE     // <.>
+}
+----
+
+<.> xref:#TO_LOCAL_TIMEZONE[TO_LOCAL_TIMEZONE]
++
+--
+Renders temporals( _time instants_ ) - that have time-zone or time-offset information - transformed to the user's local/current time-zone, optionally with a tooltip providing information on the originating (non transformed) _time instant_ .
+--
+<.> xref:#NONE[NONE]
++
+--
+Renders temporals ( _time instants_ ) - that have time-zone or time-offset information - as is, optionally with a tooltip providing information on the _time instant_ as transformed to the user's local/current time-zone.
+--
+
+== Members
+
+[#TO_LOCAL_TIMEZONE]
+=== TO_LOCAL_TIMEZONE
+
+Renders temporals( _time instants_ ) - that have time-zone or time-offset information - transformed to the user's local/current time-zone, optionally with a tooltip providing information on the originating (non transformed) _time instant_ .
+
+[#NONE]
+=== NONE
+
+Renders temporals ( _time instants_ ) - that have time-zone or time-offset information - as is, optionally with a tooltip providing information on the _time instant_ as transformed to the user's local/current time-zone.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc
index a70688f6e4..036ab08352 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc
@@ -18,6 +18,7 @@ Collects all the value-type specific customization attributes.
   FormatStyle dateFormatStyle() default FormatStyle.MEDIUM;     // <.>
   FormatStyle timeFormatStyle() default FormatStyle.MEDIUM;     // <.>
   TimePrecision timePrecision() default TimePrecision.SECOND;     // <.>
+  TimeZoneTranslation timeZoneTranslation() default TimeZoneTranslation.TO_LOCAL_TIMEZONE;     // <.>
   int dateRenderAdjustDays() default 0;     // <.>
 }
 ----
@@ -67,6 +68,11 @@ If associated with a temporal time value, the rendering style of a localized tim
 --
 If associated with a temporal time value, the time of day precision, used for editing a time field in the UI.default = _TimePrecision#SECOND_
 --
+<.> xref:#timeZoneTranslation[timeZoneTranslation]
++
+--
+If associated with a temporal value, that has time-zone or time-offset information, the rendering mode, as to whether to transform the rendered value to the user's local/current time-zone or not.default = _TimeZoneTranslation#TO_LOCAL_TIMEZONE_
+--
 <.> xref:#dateRenderAdjustDays[dateRenderAdjustDays]
 +
 --
@@ -120,6 +126,11 @@ If associated with a temporal time value, the rendering style of a localized tim
 
 If associated with a temporal time value, the time of day precision, used for editing a time field in the UI.default = _TimePrecision#SECOND_
 
+[#timeZoneTranslation]
+=== timeZoneTranslation
+
+If associated with a temporal value, that has time-zone or time-offset information, the rendering mode, as to whether to transform the rendered value to the user's local/current time-zone or not.default = _TimeZoneTranslation#TO_LOCAL_TIMEZONE_
+
 [#dateRenderAdjustDays]
 === dateRenderAdjustDays
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/events/ui/IconUiEvent.adoc b/antora/components/refguide-index/modules/applib/pages/index/events/ui/IconUiEvent.adoc
index 08c5040aa8..ca1f1cfaea 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/events/ui/IconUiEvent.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/events/ui/IconUiEvent.adoc
@@ -1,7 +1,7 @@
 = IconUiEvent
 :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 [...]
 
-Emitted for subscribers to provide a cssClass hint (equivalent to the `iconName()` supporting method).* If the domain object defines its own xref:refguide:applib-methods:ui-hints.adoc#iconName[iconName()] supporting method, or if it has the xref:refguide:applib:index/annotation/DomainObjectLayout.adoc#cssClassFa[@DomainObjectLayout#cssClassFa()] attribute, then these will take precedence.
+Emitted for subscribers to provide a cssClass hint (equivalent to the `iconName()` supporting method).* If the domain object defines its own xref:refguide:applib-methods:reserved.adoc#iconName[iconName()] supporting method, or if it has the xref:refguide:applib:index/annotation/DomainObjectLayout.adoc#cssClassFa[@DomainObjectLayout#cssClassFa()] attribute, then these will take precedence.
 
 The class has a number of responsibilities:
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/id/LogicalType.adoc b/antora/components/refguide-index/modules/applib/pages/index/id/LogicalType.adoc
index ef6be02fe7..46cc49e21b 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/id/LogicalType.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/id/LogicalType.adoc
@@ -32,7 +32,7 @@ class LogicalType {
 <.> xref:#lazy_Class_Supplier[lazy(Class, Supplier)]
 +
 --
-Returns a new TypeIdentifier based on the corresponding class and a _logicalNameProvider_ for lazy logical name lookup.
+Returns a new xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] based on the corresponding class and a _logicalNameProvider_ for lazy logical name lookup.
 --
 <.> xref:#eager_Class_String[eager(Class, String)]
 +
@@ -80,7 +80,7 @@ The logical type name consists of 2 parts, the _namespace_ and the _logical simp
 [#lazy_Class_Supplier]
 === lazy(Class, Supplier)
 
-Returns a new TypeIdentifier based on the corresponding class and a _logicalNameProvider_ for lazy logical name lookup.
+Returns a new xref:refguide:applib:index/id/LogicalType.adoc[LogicalType] based on the corresponding class and a _logicalNameProvider_ for lazy logical name lookup.
 
 [#eager_Class_String]
 === eager(Class, String)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/mixins/security/HasUsername.adoc b/antora/components/refguide-index/modules/applib/pages/index/mixins/security/HasUsername.adoc
index eb8ceb3db7..c81f591e2a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/mixins/security/HasUsername.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/mixins/security/HasUsername.adoc
@@ -1,7 +1,7 @@
 = HasUsername
 :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 [...]
 
-Allows domain objects that were created, updated or are otherwise associated with a named user to act as a mixee in order that other modules may contribute behaviour.
+Allows domain objects that were created, updated or are otherwise associated with a named user to act as a mixee in order that other modules may contribute behavior.
 
 The xref:refguide:applib:index/mixins/updates/OnUpdatedBy.adoc[OnUpdatedBy] interface is for entities to be automatically updated by the framework when persisted.
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/ApplicationFeatureRepository.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/ApplicationFeatureRepository.adoc
index 3ab2010767..ab5432b061 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/ApplicationFeatureRepository.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/appfeat/ApplicationFeatureRepository.adoc
@@ -18,6 +18,7 @@ interface ApplicationFeatureRepository {
   Collection<ApplicationFeature> allNamespaces()
   Collection<ApplicationFeature> allTypes()
   Collection<ApplicationFeature> allMembers()
+  SortedSet<ApplicationFeatureId> propertyIdsFor(LogicalType logicalType)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/command/Command.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/command/Command.adoc
index 3cb336b47a..c6aa604e44 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/command/Command.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/command/Command.adoc
@@ -58,7 +58,7 @@ Derived from _#getCommandDto()_ , holds a string representation of the invoked a
 
 The user that created the command.
 
-Derived from _#getCommandDto()_ 's _CommandDto#getUser()_
+Derived from _#getCommandDto()_ 's _CommandDto#getUsername()_ ()}
 
 [#getTimestamp_]
 === getTimestamp()
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc
index d4a16ffc5b..7b92c97fd9 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc
@@ -17,6 +17,7 @@ class InteractionContext {
   UnaryOperator<InteractionContext> switchTimeZone(ZoneId timeZone)     // <.>
   UnaryOperator<T> combine(UnaryOperator<T>... mappers)     // <.>
   UnaryOperator<T> combine(Stream<UnaryOperator<T>> mappers)     // <.>
+  ZoneOffset getTimeZoneOffsetNow()     // <.>
 }
 ----
 
@@ -55,6 +56,11 @@ Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser
 --
 Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(ZoneId)_ . credit: https://stackoverflow.com/a/51065029/56880
 --
+<.> xref:#getTimeZoneOffsetNow_[getTimeZoneOffsetNow()]
++
+--
+Returns the _ZoneOffset_ at the current time _Instant_ (at which _ZoneId_ rules apply to calculate the offset).
+--
 
 == Members
 
@@ -94,3 +100,8 @@ NOTE: this implementation can result in heap pollution; better to use the _#comb
 === combine(Stream)
 
 Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(ZoneId)_ . credit: https://stackoverflow.com/a/51065029/56880
+
+[#getTimeZoneOffsetNow_]
+=== getTimeZoneOffsetNow()
+
+Returns the _ZoneOffset_ at the current time _Instant_ (at which _ZoneId_ rules apply to calculate the offset).
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionService.adoc
index 54bf50a1cd..a5555d060b 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionService.adoc
@@ -27,6 +27,8 @@ interface InteractionService {
   Try<Void> runAndCatch(InteractionContext interactionContext, ThrowingRunnable runnable)     // <.>
   Try<R> callAnonymousAndCatch(Callable<R> callable)     // <.>
   Try<Void> runAnonymousAndCatch(ThrowingRunnable runnable)     // <.>
+  InteractionLayer nextInteraction()     // <.>
+  InteractionLayer nextInteraction(InteractionContext interactionContext)     // <.>
 }
 ----
 
@@ -86,6 +88,16 @@ Variant of _#callAnonymous(Callable)_ that wraps the return value with a xref:re
 --
 Variant of _#runAnonymous(ThrowingRunnable)_ that returns a xref:refguide:commons:index/functional/Try.adoc[Try] of _Try_ , also catching any exception, that might have occurred.
 --
+<.> xref:#nextInteraction_[nextInteraction()]
++
+--
+Primarily for testing, closes the current interaction and opens a new one.
+--
+<.> xref:#nextInteraction_InteractionContext[nextInteraction(InteractionContext)]
++
+--
+Primarily for testing, closes the current interaction and opens a new one with the specified xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] .
+--
 
 == Members
 
@@ -154,3 +166,15 @@ Variant of _#callAnonymous(Callable)_ that wraps the return value with a xref:re
 === runAnonymousAndCatch(ThrowingRunnable)
 
 Variant of _#runAnonymous(ThrowingRunnable)_ that returns a xref:refguide:commons:index/functional/Try.adoc[Try] of _Try_ , also catching any exception, that might have occurred.
+
+[#nextInteraction_]
+=== nextInteraction()
+
+Primarily for testing, closes the current interaction and opens a new one.
+
+In tests, this is a good way to simulate multiple interactions within a scenario. If you use the popular given/when/then structure, consider using at the end of each "given" or "when" block.
+
+[#nextInteraction_InteractionContext]
+=== nextInteraction(InteractionContext)
+
+Primarily for testing, closes the current interaction and opens a new one with the specified xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] .
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc
index 7f3d6d89c0..96fdda7549 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc
@@ -31,11 +31,14 @@ interface WrapperFactory {
   T wrap(T domainObject, SyncControl syncControl)     // <.>
   T wrap(T domainObject)     // <.>
   T wrapMixin(Class<T> mixinClass, Object mixee, SyncControl syncControl)     // <.>
+  T wrapMixinT(Class<T> mixinClass, MIXEE mixee, SyncControl syncControl)     // <.>
   T wrapMixin(Class<T> mixinClass, Object mixee)     // <.>
+  T wrapMixinT(Class<T> mixinClass, MIXEE mixee)     // <.>
   T unwrap(T possibleWrappedDomainObject)     // <.>
   boolean isWrapper(T possibleWrappedDomainObject)     // <.>
   T asyncWrap(T domainObject, AsyncControl<R> asyncControl)     // <.>
   T asyncWrapMixin(Class<T> mixinClass, Object mixee, AsyncControl<R> asyncControl)     // <.>
+  T asyncWrapMixinT(Class<T> mixinClass, MIXEE mixee, AsyncControl<R> asyncControl)     // <.>
   List<InteractionListener> getListeners()     // <.>
   boolean addInteractionListener(InteractionListener listener)     // <.>
   boolean removeInteractionListener(InteractionListener listener)     // <.>
@@ -58,11 +61,21 @@ A convenience overload for _#wrap(Object, SyncControl)_ , returning a wrapper to
 --
 Provides the wrapper for a _FactoryService#mixin(Class, Object) mixin_ , against which to invoke the action.
 --
+<.> xref:#wrapMixinT_Class_MIXEE_SyncControl[wrapMixinT(Class, MIXEE, SyncControl)]
++
+--
+Provides the wrapper for a _Mixin typesafe_ _FactoryService#mixin(Class, Object) mixin_ , against which to invoke the action.
+--
 <.> xref:#wrapMixin_Class_Object[wrapMixin(Class, Object)]
 +
 --
 A convenience overload for _#wrapMixin(Class, Object, SyncControl)_ , returning a wrapper to invoke the action synchronously, enforcing business rules. Any exceptions will be propagated, not swallowed.
 --
+<.> xref:#wrapMixinT_Class_MIXEE[wrapMixinT(Class, MIXEE)]
++
+--
+A convenience overload for _#wrapMixinT(Class, Object, SyncControl)_ , returning a wrapper to invoke the action synchronously, enforcing business rules. Any exceptions will be propagated, not swallowed.
+--
 <.> xref:#unwrap_T[unwrap(T)]
 +
 --
@@ -83,6 +96,11 @@ Returns a proxy object for the provided _domainObject_ , through which can execu
 --
 Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously (in another thread).
 --
+<.> xref:#asyncWrapMixinT_Class_MIXEE_AsyncControl[asyncWrapMixinT(Class, MIXEE, AsyncControl)]
++
+--
+Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously (in another thread).
+--
 <.> xref:#getListeners_[getListeners()]
 +
 --
@@ -128,11 +146,23 @@ Provides the wrapper for a _FactoryService#mixin(Class, Object) mixin_ , against
 
 The provided xref:refguide:applib:index/services/wrapper/control/SyncControl.adoc[SyncControl] determines whether business rules are checked first, and conversely whether the action is executed. See _#wrap(Object, SyncControl)_ for more details on this.
 
+[#wrapMixinT_Class_MIXEE_SyncControl]
+=== wrapMixinT(Class, MIXEE, SyncControl)
+
+Provides the wrapper for a _Mixin typesafe_ _FactoryService#mixin(Class, Object) mixin_ , against which to invoke the action.
+
+The provided xref:refguide:applib:index/services/wrapper/control/SyncControl.adoc[SyncControl] determines whether business rules are checked first, and conversely whether the action is executed. See _#wrap(Object, SyncControl)_ for more details on this.
+
 [#wrapMixin_Class_Object]
 === wrapMixin(Class, Object)
 
 A convenience overload for _#wrapMixin(Class, Object, SyncControl)_ , returning a wrapper to invoke the action synchronously, enforcing business rules. Any exceptions will be propagated, not swallowed.
 
+[#wrapMixinT_Class_MIXEE]
+=== wrapMixinT(Class, MIXEE)
+
+A convenience overload for _#wrapMixinT(Class, Object, SyncControl)_ , returning a wrapper to invoke the action synchronously, enforcing business rules. Any exceptions will be propagated, not swallowed.
+
 [#unwrap_T]
 === unwrap(T)
 
@@ -155,6 +185,11 @@ Returns a proxy object for the provided _domainObject_ , through which can execu
 
 Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously (in another thread).
 
+[#asyncWrapMixinT_Class_MIXEE_AsyncControl]
+=== asyncWrapMixinT(Class, MIXEE, AsyncControl)
+
+Returns a proxy object for the provided _mixinClass_ , through which can execute the action asynchronously (in another thread).
+
 [#getListeners_]
 === getListeners()
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/HasUsername_recentCommandsByUser.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/HasUsername_recentCommandsByUser.adoc
index c5823a460d..a9d9c60c90 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/HasUsername_recentCommandsByUser.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/HasUsername_recentCommandsByUser.adoc
@@ -8,7 +8,7 @@
 ----
 class HasUsername_recentCommandsByUser {
   HasUsername_recentCommandsByUser(HasUsername hasUsername)
-  List<CommandLogEntry> coll()
+  List<? extends CommandLogEntry> coll()
   boolean hideColl()
 }
 ----
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/Object_recentCommands.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/Object_recentCommands.adoc
index e9256ed815..5161dfbc01 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/Object_recentCommands.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/applib/contributions/Object_recentCommands.adoc
@@ -9,7 +9,7 @@ This mixin contributes a `recentCommands` action to any domain object (unless al
 .Object_recentCommands.java
 ----
 class Object_recentCommands {
-  List<CommandLogEntry> act()
+  List<? extends CommandLogEntry> act()
   boolean hideAct()     // <.>
 }
 ----
@@ -17,7 +17,7 @@ class Object_recentCommands {
 <.> xref:#hideAct_[hideAct()]
 +
 --
-Hide if the mixee is itself xref:refguide:applib:index/mixins/system/HasInteractionId.adoc[HasInteractionId] (commands don't have commands).
+Hide if the mixee itself implements xref:refguide:applib:index/mixins/system/HasInteractionId.adoc[HasInteractionId] . (commands don't have commands).
 --
 
 == Members
@@ -25,4 +25,4 @@ Hide if the mixee is itself xref:refguide:applib:index/mixins/system/HasInteract
 [#hideAct_]
 === hideAct()
 
-Hide if the mixee is itself xref:refguide:applib:index/mixins/system/HasInteractionId.adoc[HasInteractionId] (commands don't have commands).
+Hide if the mixee itself implements xref:refguide:applib:index/mixins/system/HasInteractionId.adoc[HasInteractionId] . (commands don't have commands).
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jpa/IsisModuleExtCommandLogPersistenceJpa.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jpa/IsisModuleExtCommandLogPersistenceJpa.adoc
index 98f079e1a3..4a99cf5085 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jpa/IsisModuleExtCommandLogPersistenceJpa.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/commandlog/jpa/IsisModuleExtCommandLogPersistenceJpa.adoc
@@ -9,6 +9,7 @@
 class IsisModuleExtCommandLogPersistenceJpa {
   public static final String NAMESPACE;
   public static final String SCHEMA;
+  FixtureScript getTeardownFixture()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/mixins/CommandLogEntry_replayQueue.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/mixins/CommandLogEntry_replayQueue.adoc
index 6016b1c1aa..66681aab0a 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/mixins/CommandLogEntry_replayQueue.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/mixins/CommandLogEntry_replayQueue.adoc
@@ -7,7 +7,7 @@
 .CommandLogEntry_replayQueue.java
 ----
 class CommandLogEntry_replayQueue {
-  List<CommandLogEntry> coll()
+  List<? extends CommandLogEntry> coll()
   boolean hideColl()
 }
 ----
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.adoc
index e084017bcb..2f3a0986b7 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/executionlog/jpa/IsisModuleExtExecutionLogPersistenceJpa.adoc
@@ -9,6 +9,7 @@
 class IsisModuleExtExecutionLogPersistenceJpa {
   public static final String NAMESPACE;
   public static final String SCHEMA;
+  FixtureScript getTeardownFixture()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.adoc b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.adoc
index 66403f6c55..8d2bb293d1 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/executionoutbox/jpa/IsisModuleExtExecutionOutboxPersistenceJpa.adoc
@@ -9,6 +9,7 @@
 class IsisModuleExtExecutionOutboxPersistenceJpa {
   public static final String NAMESPACE;
   public static final String SCHEMA;
+  FixtureScript getTeardownFixture()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/IsisModuleExtFullCalendarApplib.adoc b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/IsisModuleExtFullCalendarApplib.adoc
index c34a0ad65b..849816bc4e 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/IsisModuleExtFullCalendarApplib.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/IsisModuleExtFullCalendarApplib.adoc
@@ -7,6 +7,7 @@
 .IsisModuleExtFullCalendarApplib.java
 ----
 class IsisModuleExtFullCalendarApplib {
+  public static final String NAMESPACE;
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/jpa/IsisModuleExtSecmanPersistenceJpa.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/jpa/IsisModuleExtSecmanPersistenceJpa.adoc
index bada101b09..59ccb21bca 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/jpa/IsisModuleExtSecmanPersistenceJpa.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/jpa/IsisModuleExtSecmanPersistenceJpa.adoc
@@ -7,6 +7,7 @@
 .IsisModuleExtSecmanPersistenceJpa.java
 ----
 class IsisModuleExtSecmanPersistenceJpa {
+  FixtureScript getTeardownFixture()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jpa/TeardownFixtureJpaAbstract.adoc
similarity index 88%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc
copy to antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jpa/TeardownFixtureJpaAbstract.adoc
index 4c12e582bf..932a152942 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/teardown/jpa/TeardownFixtureJpaAbstract.adoc
@@ -1,12 +1,12 @@
-= IsisModuleValAsciidocApplib
+= TeardownFixtureJpaAbstract
 :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 [...]
 
 == API
 
 [source,java]
-.IsisModuleValAsciidocApplib.java
+.TeardownFixtureJpaAbstract.java
 ----
-class IsisModuleValAsciidocApplib {
+class TeardownFixtureJpaAbstract {
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc
index 4c12e582bf..40017d7fdb 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/IsisModuleValAsciidocApplib.adoc
@@ -7,6 +7,7 @@
 .IsisModuleValAsciidocApplib.java
 ----
 class IsisModuleValAsciidocApplib {
+  public static final String NAMESPACE;
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/IsisModuleValMarkdownApplib.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/IsisModuleValMarkdownApplib.adoc
index b2b1d12778..c4c56827f2 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/IsisModuleValMarkdownApplib.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/IsisModuleValMarkdownApplib.adoc
@@ -7,6 +7,7 @@
 .IsisModuleValMarkdownApplib.java
 ----
 class IsisModuleValMarkdownApplib {
+  public static final String NAMESPACE;
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/IsisModuleViewerRestfulObjectsApplib.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/IsisModuleViewerRestfulObjectsApplib.adoc
index f33c986c50..53a47cdb22 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/IsisModuleViewerRestfulObjectsApplib.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/IsisModuleViewerRestfulObjectsApplib.adoc
@@ -7,6 +7,7 @@
 .IsisModuleViewerRestfulObjectsApplib.java
 ----
 class IsisModuleViewerRestfulObjectsApplib {
+  public static final String NAMESPACE;
 }
 ----
 
diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc
index 70c729d9b5..e6e44fd074 100644
--- a/core/adoc/modules/_overview/pages/about.adoc
+++ b/core/adoc/modules/_overview/pages/about.adoc
@@ -436,7 +436,7 @@ org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:testing:index/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.adoc[IsisIntegrationTestAbstractWithFixtures], xref:refguide:testing:index/fixtures/applib/IsisModuleTestingFixturesApplib.adoc[IsisModuleTestingFixturesApplib], xref:refguide:testing:index/fixtures/applib/events/FixturesInstalledEvent.adoc[FixturesInstalledEvent], xref:refguide:testing:index/fixtures/applib/events/FixturesInstallingEvent.adoc[FixturesInstallingEvent], xref:refguide:testing:index/fixtures [...]
+xref:refguide:testing:index/fixtures/applib/IsisIntegrationTestAbstractWithFixtures.adoc[IsisIntegrationTestAbstractWithFixtures], xref:refguide:testing:index/fixtures/applib/IsisModuleTestingFixturesApplib.adoc[IsisModuleTestingFixturesApplib], xref:refguide:testing:index/fixtures/applib/events/FixturesInstalledEvent.adoc[FixturesInstalledEvent], xref:refguide:testing:index/fixtures/applib/events/FixturesInstallingEvent.adoc[FixturesInstallingEvent], xref:refguide:testing:index/fixtures [...]
 ****
 
 |Apache Isis Tst - H2 Console (parent)
@@ -1498,7 +1498,7 @@ org.jmock:jmock:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/IsisModuleApplibChangeAndExecutionLoggers.adoc[IsisModuleApplibChangeAndExecutionLoggers], xref:refguide:applib:index/IsisModuleApplibMixins.adoc[IsisModuleApplibMixins], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/annotation/Action.adoc[Action], xref:refguide:applib:index/annotation/ActionLayout.adoc[A [...]
+xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/IsisModuleApplibChangeAndExecutionLoggers.adoc[IsisModuleApplibChangeAndExecutionLoggers], xref:refguide:applib:index/IsisModuleApplibMixins.adoc[IsisModuleApplibMixins], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/annotation/Action.adoc[Action], xref:refguide:applib:index/annotation/ActionLayout.adoc[A [...]
 ****
 
 |Apache Isis Core - Code Gen (ByteBuddy)
@@ -3367,29 +3367,22 @@ skinparam rectangle<<9>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 package "Asciidoc\n[Software System]" {
   rectangle "==Apache Isis Val - Asciidoctor (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Val - Asciidoctor (Persistence JDO)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Val - Asciidoctor (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
+  rectangle "==Apache Isis Val - Asciidoctor (Persistence JDO)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
   rectangle "==Apache Isis Val - Asciidoctor (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
   rectangle "==Apache Isis Val - Asciidoctor (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Val - Asciidoctor (persistence jpa)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Val - Asciidoctor (ui vaadin)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Val - Asciidoctor (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Val - Asciidoctor (ui)\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
+  rectangle "==Apache Isis Val - Asciidoctor (persistence jpa)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Val - Asciidoctor (ui vaadin)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Val - Asciidoctor (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
+  rectangle "==Apache Isis Val - Asciidoctor (ui)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
 }
-5 .[#707070].> 6 : ""
-5 .[#707070].> 7 : ""
 2 .[#707070].> 4 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 3 : ""
-2 .[#707070].> 8 : ""
-8 .[#707070].> 10 : ""
+2 .[#707070].> 6 : ""
+2 .[#707070].> 7 : ""
+7 .[#707070].> 9 : ""
 @enduml
 ----
 .Projects/Modules (Asciidoc)
@@ -3454,30 +3447,18 @@ org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed> +
 xref:refguide:valuetypes:index/asciidoc/metamodel/IsisModuleValAsciidocMetaModel.adoc[IsisModuleValAsciidocMetaModel]
 ****
 
-|Apache Isis Val - Asciidoctor (Persistence)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-persistence
-Type: pom
-Directory: /valuetypes/asciidoc/persistence
-----
-|.Dependencies
-****
-org.apache.isis.core:isis-core-metamodel:jar:<managed> +
-org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed> +
-****
-
 |Apache Isis Val - Asciidoctor (Persistence JDO)
 [source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-persistence-jdo
 Type: jar
-Directory: /valuetypes/asciidoc/persistence/jdo
+Directory: /valuetypes/asciidoc/persistence-jdo
 ----
 |.Dependencies
 ****
+org.apache.isis.core:isis-core-metamodel:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed> +
 org.datanucleus:datanucleus-core:jar:<managed> +
 ****
 
@@ -3492,9 +3473,15 @@ xref:refguide:valuetypes:index/asciidoc/persistence/jdo/dn/IsisModuleValAsciidoc
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-asciidoc-persistence-jpa
 Type: jar
-Directory: /valuetypes/asciidoc/persistence/jpa
+Directory: /valuetypes/asciidoc/persistence-jpa
 ----
-|.Document Index Entries
+|.Dependencies
+****
+org.apache.isis.core:isis-core-metamodel:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed> +
+****
+
+.Document Index Entries
 ****
 xref:refguide:valuetypes:index/asciidoc/persistence/jpa/IsisModuleValAsciidocPersistenceJpa.adoc[IsisModuleValAsciidocPersistenceJpa], xref:refguide:valuetypes:index/asciidoc/persistence/jpa/converters/IsisAsciiDocConverter.adoc[IsisAsciiDocConverter]
 ****
@@ -3616,28 +3603,21 @@ skinparam rectangle<<8>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<9>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 package "Markdown\n[Software System]" {
   rectangle "==Apache Isis Val - Markdown (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Val - Markdown (Persistence JDO)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Val - Markdown (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
+  rectangle "==Apache Isis Val - Markdown (Persistence JDO)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
   rectangle "==Apache Isis Val - Markdown (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
   rectangle "==Apache Isis Val - Markdown (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Val - Markdown (persistence jpa)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Val - Markdown (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis Val - Markdown (ui)\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
+  rectangle "==Apache Isis Val - Markdown (persistence jpa)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Val - Markdown (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Val - Markdown (ui)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
 }
-5 .[#707070].> 6 : ""
-5 .[#707070].> 7 : ""
 2 .[#707070].> 4 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 3 : ""
-2 .[#707070].> 8 : ""
-8 .[#707070].> 9 : ""
+2 .[#707070].> 6 : ""
+2 .[#707070].> 7 : ""
+7 .[#707070].> 8 : ""
 @enduml
 ----
 .Projects/Modules (Markdown)
@@ -3699,30 +3679,17 @@ org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed> +
 xref:refguide:valuetypes:index/markdown/metamodel/IsisModuleValMarkdownMetaModel.adoc[IsisModuleValMarkdownMetaModel]
 ****
 
-|Apache Isis Val - Markdown (Persistence)
-[source,yaml]
-----
-Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-persistence
-Type: pom
-Directory: /valuetypes/markdown/persistence
-----
-|.Dependencies
-****
-org.apache.isis.core:isis-core-metamodel:jar:<managed> +
-org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed> +
-****
-
 |Apache Isis Val - Markdown (Persistence JDO)
 [source,yaml]
 ----
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-persistence-jdo
 Type: jar
-Directory: /valuetypes/markdown/persistence/jdo
+Directory: /valuetypes/markdown/persistence-jdo
 ----
 |.Dependencies
 ****
+org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed> +
 org.datanucleus:datanucleus-core:jar:<managed> +
 ****
@@ -3738,10 +3705,11 @@ xref:refguide:valuetypes:index/markdown/persistence/jdo/dn/IsisModuleValMarkdown
 Group: org.apache.isis.valuetypes
 Artifact: isis-valuetypes-markdown-persistence-jpa
 Type: jar
-Directory: /valuetypes/markdown/persistence/jpa
+Directory: /valuetypes/markdown/persistence-jpa
 ----
 |.Dependencies
 ****
+org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed> +
 ****
 
@@ -3961,6 +3929,11 @@ skinparam {
 }
 hide stereotype
 left to right direction
+skinparam rectangle<<44>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -3971,11 +3944,26 @@ skinparam rectangle<<23>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<45>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<46>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<24>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<47>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<25>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -4021,12 +4009,12 @@ skinparam rectangle<<10>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<11>> {
+skinparam rectangle<<33>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<33>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -4051,12 +4039,12 @@ skinparam rectangle<<35>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<14>> {
+skinparam rectangle<<36>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<36>> {
+skinparam rectangle<<14>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -4081,12 +4069,12 @@ skinparam rectangle<<16>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<17>> {
+skinparam rectangle<<39>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<39>> {
+skinparam rectangle<<17>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -4151,111 +4139,119 @@ skinparam rectangle<<41>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<42>> {
+skinparam rectangle<<20>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<20>> {
+skinparam rectangle<<42>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<43>> {
+skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<21>> {
+skinparam rectangle<<43>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
 package "Extensions\n[Software System]" {
-  rectangle "==Apache Isis Ext - CORS (impl)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Ext - CORS (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Ext - Execution Log\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
-  rectangle "==Apache Isis Ext - Execution Log API\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Ext - Execution Log Implementation (JDO)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Ext - Execution Log Implementation (JPA)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis Ext - Execution Outbox\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
-  rectangle "==Apache Isis Ext - Execution Outbox API\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis Ext - Execution Outbox Implementation (JDO)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis Ext - Execution Outbox Implementation (JPA)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis Ext - Execution Outbox REST Client\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis Ext - Execution Outbox Republisher\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis Ext - Execution Republisher\n<size:10>[Container: packaging: pom]</size>" <<14>> as 14
-  rectangle "==Apache Isis Ext - Flyway\n<size:10>[Container: packaging: pom]</size>" <<16>> as 16
-  rectangle "==Apache Isis Ext - Flyway Impl\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
-  rectangle "==Apache Isis Ext - FullCalendar (applib)\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
-  rectangle "==Apache Isis Ext - FullCalendar (parent)\n<size:10>[Container: packaging: pom]</size>" <<18>> as 18
-  rectangle "==Apache Isis Ext - FullCalendar Wicket\n<size:10>[Container: packaging: pom]</size>" <<20>> as 20
-  rectangle "==Apache Isis Ext - FullCalendar Wicket (Integration)\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
-  rectangle "==Apache Isis Ext - FullCalendar Wicket (UI)\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
-  rectangle "==Apache Isis Ext - Sec Man\n<size:10>[Container: packaging: pom]</size>" <<29>> as 29
-  rectangle "==Apache Isis Ext - Sec Man Applib\n<size:10>[Container: packaging: jar]</size>" <<30>> as 30
-  rectangle "==Apache Isis Ext - Sec Man Encryption (Using Spring)\n<size:10>[Container: packaging: jar]</size>" <<32>> as 32
-  rectangle "==Apache Isis Ext - Sec Man Encryption (Using jbcrypt)\n<size:10>[Container: packaging: jar]</size>" <<31>> as 31
-  rectangle "==Apache Isis Ext - Sec Man Integration\n<size:10>[Container: packaging: jar]</size>" <<33>> as 33
-  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JDO)\n<size:10>[Container: packaging: jar]</size>" <<34>> as 34
-  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JPA)\n<size:10>[Container: packaging: jar]</size>" <<35>> as 35
-  rectangle "==Apache Isis Ext - Sec Man Realm (Using Shiro)\n<size:10>[Container: packaging: jar]</size>" <<36>> as 36
-  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (impl)\n<size:10>[Container: packaging: jar]</size>" <<42>> as 42
-  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (parent)\n<size:10>[Container: packaging: pom]</size>" <<41>> as 41
-  rectangle "==Apache Isis Ext - Security - Spring Oauth2\n<size:10>[Container: packaging: jar]</size>" <<43>> as 43
-  rectangle "==Apache Isis Ext - Session Log\n<size:10>[Container: packaging: pom]</size>" <<37>> as 37
-  rectangle "==Apache Isis Ext - Session Log Applib\n<size:10>[Container: packaging: jar]</size>" <<38>> as 38
-  rectangle "==Apache Isis Ext - Session Log Persistence (using JDO)\n<size:10>[Container: packaging: jar]</size>" <<39>> as 39
-  rectangle "==Apache Isis Ext - Session Log Persistence (using JPA)\n<size:10>[Container: packaging: jar]</size>" <<40>> as 40
-  rectangle "==Apache Isis Ext - pdf.js - Applib\n<size:10>[Container: packaging: jar]</size>" <<24>> as 24
-  rectangle "==Apache Isis Ext - pdf.js - Metamodel\n<size:10>[Container: packaging: jar]</size>" <<25>> as 25
-  rectangle "==Apache Isis Ext - pdf.js - Parent\n<size:10>[Container: packaging: pom]</size>" <<23>> as 23
-  rectangle "==Apache Isis Ext - pdf.js - Wicket (Integration)\n<size:10>[Container: packaging: jar]</size>" <<27>> as 27
-  rectangle "==Apache Isis Ext - pdf.js - Wicket (UI)\n<size:10>[Container: packaging: jar]</size>" <<28>> as 28
-  rectangle "==Apache Isis Ext - pdf.js Wicket\n<size:10>[Container: packaging: pom]</size>" <<26>> as 26
+  rectangle "==Apache Isis Ext - Audit Trail\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Ext - Audit Trail Applib\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Ext - Audit Trail Persistence (using JDO)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Ext - Audit Trail Persistence (using JPA)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis Ext - CORS (impl)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Ext - CORS (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
+  rectangle "==Apache Isis Ext - Execution Log\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
+  rectangle "==Apache Isis Ext - Execution Log API\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis Ext - Execution Log Implementation (JDO)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
+  rectangle "==Apache Isis Ext - Execution Log Implementation (JPA)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis Ext - Execution Outbox\n<size:10>[Container: packaging: pom]</size>" <<13>> as 13
+  rectangle "==Apache Isis Ext - Execution Outbox API\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
+  rectangle "==Apache Isis Ext - Execution Outbox Implementation (JDO)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
+  rectangle "==Apache Isis Ext - Execution Outbox Implementation (JPA)\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
+  rectangle "==Apache Isis Ext - Execution Outbox REST Client\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
+  rectangle "==Apache Isis Ext - Execution Outbox Republisher\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
+  rectangle "==Apache Isis Ext - Execution Republisher\n<size:10>[Container: packaging: pom]</size>" <<18>> as 18
+  rectangle "==Apache Isis Ext - Flyway\n<size:10>[Container: packaging: pom]</size>" <<20>> as 20
+  rectangle "==Apache Isis Ext - Flyway Impl\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
+  rectangle "==Apache Isis Ext - FullCalendar (applib)\n<size:10>[Container: packaging: jar]</size>" <<23>> as 23
+  rectangle "==Apache Isis Ext - FullCalendar (parent)\n<size:10>[Container: packaging: pom]</size>" <<22>> as 22
+  rectangle "==Apache Isis Ext - FullCalendar Wicket\n<size:10>[Container: packaging: pom]</size>" <<24>> as 24
+  rectangle "==Apache Isis Ext - FullCalendar Wicket (Integration)\n<size:10>[Container: packaging: jar]</size>" <<25>> as 25
+  rectangle "==Apache Isis Ext - FullCalendar Wicket (UI)\n<size:10>[Container: packaging: jar]</size>" <<26>> as 26
+  rectangle "==Apache Isis Ext - Sec Man\n<size:10>[Container: packaging: pom]</size>" <<33>> as 33
+  rectangle "==Apache Isis Ext - Sec Man Applib\n<size:10>[Container: packaging: jar]</size>" <<34>> as 34
+  rectangle "==Apache Isis Ext - Sec Man Encryption (Using Spring)\n<size:10>[Container: packaging: jar]</size>" <<36>> as 36
+  rectangle "==Apache Isis Ext - Sec Man Encryption (Using jbcrypt)\n<size:10>[Container: packaging: jar]</size>" <<35>> as 35
+  rectangle "==Apache Isis Ext - Sec Man Integration\n<size:10>[Container: packaging: jar]</size>" <<37>> as 37
+  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JDO)\n<size:10>[Container: packaging: jar]</size>" <<38>> as 38
+  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JPA)\n<size:10>[Container: packaging: jar]</size>" <<39>> as 39
+  rectangle "==Apache Isis Ext - Sec Man Realm (Using Shiro)\n<size:10>[Container: packaging: jar]</size>" <<40>> as 40
+  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (impl)\n<size:10>[Container: packaging: jar]</size>" <<46>> as 46
+  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (parent)\n<size:10>[Container: packaging: pom]</size>" <<45>> as 45
+  rectangle "==Apache Isis Ext - Security - Spring Oauth2\n<size:10>[Container: packaging: jar]</size>" <<47>> as 47
+  rectangle "==Apache Isis Ext - Session Log\n<size:10>[Container: packaging: pom]</size>" <<41>> as 41
+  rectangle "==Apache Isis Ext - Session Log Applib\n<size:10>[Container: packaging: jar]</size>" <<42>> as 42
+  rectangle "==Apache Isis Ext - Session Log Persistence (using JDO)\n<size:10>[Container: packaging: jar]</size>" <<43>> as 43
+  rectangle "==Apache Isis Ext - Session Log Persistence (using JPA)\n<size:10>[Container: packaging: jar]</size>" <<44>> as 44
+  rectangle "==Apache Isis Ext - pdf.js - Applib\n<size:10>[Container: packaging: jar]</size>" <<28>> as 28
+  rectangle "==Apache Isis Ext - pdf.js - Metamodel\n<size:10>[Container: packaging: jar]</size>" <<29>> as 29
+  rectangle "==Apache Isis Ext - pdf.js - Parent\n<size:10>[Container: packaging: pom]</size>" <<27>> as 27
+  rectangle "==Apache Isis Ext - pdf.js - Wicket (Integration)\n<size:10>[Container: packaging: jar]</size>" <<31>> as 31
+  rectangle "==Apache Isis Ext - pdf.js - Wicket (UI)\n<size:10>[Container: packaging: jar]</size>" <<32>> as 32
+  rectangle "==Apache Isis Ext - pdf.js Wicket\n<size:10>[Container: packaging: pom]</size>" <<30>> as 30
   rectangle "==Apache Isis Extensions\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
 3 .[#707070].> 4 : ""
-5 .[#707070].> 6 : ""
-5 .[#707070].> 7 : ""
-5 .[#707070].> 8 : ""
+3 .[#707070].> 5 : ""
+3 .[#707070].> 6 : ""
+7 .[#707070].> 8 : ""
 9 .[#707070].> 10 : ""
 9 .[#707070].> 11 : ""
 9 .[#707070].> 12 : ""
-9 .[#707070].> 13 : ""
-14 .[#707070].> 15 : ""
-16 .[#707070].> 17 : ""
+13 .[#707070].> 14 : ""
+13 .[#707070].> 15 : ""
+13 .[#707070].> 16 : ""
+13 .[#707070].> 17 : ""
 18 .[#707070].> 19 : ""
-18 .[#707070].> 20 : ""
 20 .[#707070].> 21 : ""
-20 .[#707070].> 22 : ""
-29 .[#707070].> 30 : ""
-29 .[#707070].> 32 : ""
-29 .[#707070].> 31 : ""
-29 .[#707070].> 33 : ""
-29 .[#707070].> 34 : ""
-29 .[#707070].> 35 : ""
-29 .[#707070].> 36 : ""
+22 .[#707070].> 23 : ""
+22 .[#707070].> 24 : ""
+24 .[#707070].> 25 : ""
+24 .[#707070].> 26 : ""
+33 .[#707070].> 34 : ""
+33 .[#707070].> 36 : ""
+33 .[#707070].> 35 : ""
+33 .[#707070].> 37 : ""
+33 .[#707070].> 38 : ""
+33 .[#707070].> 39 : ""
+33 .[#707070].> 40 : ""
+45 .[#707070].> 46 : ""
 41 .[#707070].> 42 : ""
-37 .[#707070].> 38 : ""
-37 .[#707070].> 39 : ""
-37 .[#707070].> 40 : ""
-23 .[#707070].> 24 : ""
-23 .[#707070].> 25 : ""
-23 .[#707070].> 26 : ""
-26 .[#707070].> 27 : ""
-26 .[#707070].> 28 : ""
+41 .[#707070].> 43 : ""
+41 .[#707070].> 44 : ""
+27 .[#707070].> 28 : ""
+27 .[#707070].> 29 : ""
+27 .[#707070].> 30 : ""
+30 .[#707070].> 31 : ""
+30 .[#707070].> 32 : ""
 2 .[#707070].> 3 : ""
-2 .[#707070].> 5 : ""
+2 .[#707070].> 7 : ""
 2 .[#707070].> 9 : ""
-2 .[#707070].> 14 : ""
-2 .[#707070].> 16 : ""
+2 .[#707070].> 13 : ""
 2 .[#707070].> 18 : ""
-2 .[#707070].> 29 : ""
+2 .[#707070].> 20 : ""
+2 .[#707070].> 22 : ""
+2 .[#707070].> 33 : ""
+2 .[#707070].> 45 : ""
+2 .[#707070].> 47 : ""
 2 .[#707070].> 41 : ""
-2 .[#707070].> 43 : ""
-2 .[#707070].> 37 : ""
-2 .[#707070].> 23 : ""
+2 .[#707070].> 27 : ""
 @enduml
 ----
 .Projects/Modules (Extensions)
@@ -4279,6 +4275,84 @@ These are _not_ intended to be called by the domain logic of an Apache Isis appl
 org.projectlombok:lombok:jar:<managed> +
 ****
 
+|Apache Isis Ext - Audit Trail
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-audittrail
+Type: pom
+Directory: /extensions/security/audittrail
+----
+|.Dependencies
+****
+org.apache.isis.core:isis-core-metamodel:jar:<managed> +
+****
+
+|Apache Isis Ext - Audit Trail Applib
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-audittrail-applib
+Type: jar
+Directory: /extensions/security/audittrail/applib
+----
+|.Components
+****
+o.a.i.extensions.audittrail.applib.spiimpl.EntityPropertyChangeSubscriberForAuditTrail +
+****
+
+.Dependencies
+****
+org.apache.isis.core:isis-core-runtime:jar:<managed> +
+org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed> +
+****
+
+|Apache Isis Ext - Audit Trail Persistence (using JDO)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-audittrail-persistence-jdo
+Type: jar
+Directory: /extensions/security/audittrail/persistence-jdo
+----
+|.Components
+****
+o.a.i.extensions.audittrail.jdo.dom.AuditTrailEntryRepository +
+****
+
+.Dependencies
+****
+org.apache.isis.core:isis-core-runtime:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-audittrail-applib:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-audittrail-applib:test-jar:<managed> +
+org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed> +
+****
+
+|Apache Isis Ext - Audit Trail Persistence (using JPA)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-audittrail-persistence-jpa
+Type: jar
+Directory: /extensions/security/audittrail/persistence-jpa
+----
+|.Components
+****
+o.a.i.extensions.audittrail.jpa.dom.AuditTrailEntryRepository +
+****
+
+.Dependencies
+****
+org.apache.isis.core:isis-core-runtime:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-audittrail-applib:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-audittrail-applib:test-jar:<managed> +
+org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed> +
+****
+
 |Apache Isis Ext - CORS (parent)
 [source,yaml]
 ----
@@ -4353,7 +4427,7 @@ xref:refguide:extensions:index/executionlog/applib/app/ExecutionLogMenu.adoc[Exe
 [source,yaml]
 ----
 Group: org.apache.isis.extensions
-Artifact: isis-extensions-executionlog-jdo
+Artifact: isis-extensions-executionlog-persistence-jdo
 Type: jar
 Directory: /extensions/core/executionlog/persistence-jdo
 ----
@@ -5008,8 +5082,8 @@ Directory: /extensions/security/sessionlog/applib
 ----
 |.Components
 ****
-o.a.i.sessionlog.applib.spiimpl.SessionLogServiceDefault +
-o.a.i.sessionlog.applib.spiimpl.SessionLogServiceInitializer +
+o.a.i.extensions.sessionlog.applib.spiimpl.SessionLogServiceInitializer +
+o.a.i.extensions.sessionlog.applib.spiimpl.SessionSubscriberForSessionLog +
 ****
 
 .Dependencies
@@ -5028,7 +5102,7 @@ Directory: /extensions/security/sessionlog/persistence-jdo
 ----
 |.Components
 ****
-o.a.i.sessionlog.jdo.dom.SessionLogEntryRepository +
+o.a.i.extensions.sessionlog.jdo.dom.SessionLogEntryRepository +
 ****
 
 .Dependencies
@@ -5051,7 +5125,8 @@ Directory: /extensions/security/sessionlog/persistence-jpa
 ----
 |.Components
 ****
-o.a.i.sessionlog.jpa.dom.SessionLogEntryRepository +
+o.a.i.extensions.sessionlog.jpa.dom.SessionLogEntryPK$Stringifier +
+o.a.i.extensions.sessionlog.jpa.dom.SessionLogEntryRepository +
 ****
 
 .Dependencies
@@ -5821,6 +5896,11 @@ skinparam rectangle<<11>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<22>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<12>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -5856,6 +5936,11 @@ skinparam rectangle<<18>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<19>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -5896,6 +5981,16 @@ skinparam rectangle<<9>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<20>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<21>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -5903,29 +5998,33 @@ skinparam rectangle<<10>> {
 }
 package "Regression Tests\n[Software System]" {
   rectangle "==Apache Isis - Regression Tests\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis - Regression Tests (stable)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis - Regression Tests (stable) - Bootstrapping\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis - Regression Tests (stable) - Config\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis - Regression Tests (stable) - Cucumber\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis - Regression Tests (stable) - Domain Model\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis - Regression Tests (stable) - Event Handling\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
-  rectangle "==Apache Isis - Regression Tests (stable) - Factory\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis - Regression Tests (stable) - Interact\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JDO)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JPA)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis - Regression Tests (stable) - Publishing (JPA)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis - Regression Tests (stable) - Rest\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
-  rectangle "==Apache Isis - Regression Tests (stable) - Value Types\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis - Regression Tests (stable) - Viewers Common\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
-  rectangle "==Apache Isis - Regression Tests (stable) - Viewers JDO\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
-  rectangle "==Apache Isis - Regression Tests (stable) - Viewers JPA\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
+  rectangle "==Apache Isis - Regression Tests (stable)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+  rectangle "==Apache Isis - Regression Tests (stable) - Bootstrapping\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session - Generic\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session - JDO\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session - JPA\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis - Regression Tests (stable) - Config\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
+  rectangle "==Apache Isis - Regression Tests (stable) - Cucumber\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis - Regression Tests (stable) - Domain Model\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
+  rectangle "==Apache Isis - Regression Tests (stable) - Event Handling\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis - Regression Tests (stable) - Factory\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
+  rectangle "==Apache Isis - Regression Tests (stable) - Interact\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
+  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JDO)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
+  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JPA)\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
+  rectangle "==Apache Isis - Regression Tests (stable) - Publishing (JPA)\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
+  rectangle "==Apache Isis - Regression Tests (stable) - Rest\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
+  rectangle "==Apache Isis - Regression Tests (stable) - Value Types\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
+  rectangle "==Apache Isis - Regression Tests (stable) - Viewers Common\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
+  rectangle "==Apache Isis - Regression Tests (stable) - Viewers JDO\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
+  rectangle "==Apache Isis - Regression Tests (stable) - Viewers JPA\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
 }
-2 .[#707070].> 3 : ""
-2 .[#707070].> 4 : ""
-2 .[#707070].> 5 : ""
-2 .[#707070].> 6 : ""
+3 .[#707070].> 4 : ""
+3 .[#707070].> 5 : ""
+3 .[#707070].> 6 : ""
 2 .[#707070].> 7 : ""
 2 .[#707070].> 8 : ""
+2 .[#707070].> 3 : ""
 2 .[#707070].> 9 : ""
 2 .[#707070].> 10 : ""
 2 .[#707070].> 11 : ""
@@ -5936,6 +6035,10 @@ package "Regression Tests\n[Software System]" {
 2 .[#707070].> 16 : ""
 2 .[#707070].> 17 : ""
 2 .[#707070].> 18 : ""
+2 .[#707070].> 19 : ""
+2 .[#707070].> 20 : ""
+2 .[#707070].> 21 : ""
+2 .[#707070].> 22 : ""
 @enduml
 ----
 .Projects/Modules (Regression Tests)
@@ -5961,6 +6064,77 @@ org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed> +
 org.projectlombok:lombok:jar:<managed> +
 ****
 
+|Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session
+[source,yaml]
+----
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-cmdexecauditsess
+Type: pom
+Directory: /regressiontests/stable-cmdexecauditsess
+----
+|
+
+|Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session - Generic
+[source,yaml]
+----
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-cmdexecauditsess-generic
+Type: jar
+Directory: /regressiontests/stable-cmdexecauditsess/generic
+----
+|.Dependencies
+****
+org.apache.isis.core:isis-applib:jar:<managed> +
+org.apache.isis.core:isis-core-config:jar:<managed> +
+org.apache.isis.core:isis-core-runtimeservices:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-audittrail-applib:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-commandlog-applib:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-executionlog-applib:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-executionoutbox-applib:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-sessionlog-applib:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+****
+
+|Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session - JDO
+[source,yaml]
+----
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-cmdexecauditsess-persistence-jdo
+Type: jar
+Directory: /regressiontests/stable-cmdexecauditsess/persistence-jdo
+----
+|.Dependencies
+****
+org.apache.isis.extensions:isis-extensions-audittrail-persistence-jdo:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-commandlog-persistence-jdo:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-executionlog-persistence-jdo:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-executionoutbox-persistence-jdo:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-sessionlog-persistence-jdo:jar:<managed> +
+org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
+org.apache.isis.regressiontests:isis-regressiontests-cmdexecauditsess-generic:jar:<managed> +
+org.apache.isis.security:isis-security-bypass:jar:<managed> +
+****
+
+|Apache Isis - Regression Tests (stable) - Cmd/Exec/Audit/Session - JPA
+[source,yaml]
+----
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-cmdexecauditsess-persistence-jpa
+Type: jar
+Directory: /regressiontests/stable-cmdexecauditsess/persistence-jpa
+----
+|.Dependencies
+****
+org.apache.isis.extensions:isis-extensions-audittrail-persistence-jpa:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-commandlog-persistence-jpa:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-executionlog-persistence-jpa:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-executionoutbox-persistence-jpa:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-sessionlog-persistence-jpa:jar:<managed> +
+org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
+org.apache.isis.regressiontests:isis-regressiontests-cmdexecauditsess-generic:jar:<managed> +
+org.apache.isis.security:isis-security-bypass:jar:<managed> +
+****
+
 |Apache Isis - Regression Tests (stable)
 [source,yaml]
 ----