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 2021/04/09 10:01:17 UTC

[isis] branch master updated: ISIS-2602: regen docs

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 1fffb71  ISIS-2602: regen docs
1fffb71 is described below

commit 1fffb710859ff248253f24e770651b6958efd7d5
Author: ahuber@apache.org <ah...@luna>
AuthorDate: Fri Apr 9 12:01:07 2021 +0200

    ISIS-2602: regen docs
---
 .../applib/pages/index/annotation/Action.adoc      |  19 +-
 .../pages/index/annotation/ActionLayout.adoc       |  39 ++++
 .../pages/index/annotation/CollectionLayout.adoc   |  13 ++
 .../applib/pages/index/annotation/MemberOrder.adoc |  48 -----
 .../pages/index/annotation/PropertyLayout.adoc     |  51 +++++
 .../index/exceptions/RecoverableException.adoc     |   2 -
 .../index/exceptions/TranslatableException.adoc    |  11 --
 .../index/exceptions/UnrecoverableException.adoc   |   2 -
 .../index/mixins/system/HasTransactionId.adoc      |   2 +-
 .../pages/index/services/grid/GridService.adoc     |   6 +-
 .../index/services/i18n/HasTranslationContext.adoc |  25 +++
 .../index/services/i18n/TranslatableString.adoc    |   8 +-
 .../index/services/i18n/TranslationContext.adoc    |  19 ++
 .../index/services/i18n/TranslationService.adoc    |  16 +-
 .../pages/index/services/iactn/Interaction.adoc    |  11 --
 .../index/services/iactn/InteractionContext.adoc   |  22 +++
 .../pages/index/services/iactn/SequenceType.adoc   |  45 -----
 .../applib/pages/index/services/layout/Style.adoc  |   2 +-
 .../index/services/message/MessageService.adoc     |  24 +--
 .../commons/pages/index/collections/Can.adoc       |  51 ++++-
 .../interaction/session/InteractionFactory.adoc    |   8 +-
 .../transaction/TransactionServiceSpring.adoc      |  16 +-
 .../changetracking/EntityChangeTracker.adoc        |  12 +-
 .../changetracking/EntityChangeTrackerDefault.adoc |  15 +-
 core/adoc/modules/_overview/pages/about.adoc       | 208 +--------------------
 25 files changed, 279 insertions(+), 396 deletions(-)

diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc
index a388055..f8ff327 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc
@@ -10,7 +10,6 @@ Groups together all domain-specific metadata for an invokable action on a domain
 ----
 @interface Action {
   String associateWith() default "";     // <.>
-  String associateWithSequence() default "1";     // <.>
   Class<? extends CommandDtoProcessor> commandDtoProcessor() default CommandDtoProcessor.class;     // <.>
   Publishing commandPublishing() default Publishing.NOT_SPECIFIED;     // <.>
   Class<? extends ActionDomainEvent<?>> domainEvent() default ActionDomainEvent.Default.class;     // <.>
@@ -28,11 +27,6 @@ Groups together all domain-specific metadata for an invokable action on a domain
 --
 Associates this action with a property or collection, specifying its id.
 --
-<.> xref:#associateWithSequence[associateWithSequence]
-+
---
-Specifies the sequence/order in the UI for an action that's been associated with a property or collection.
---
 <.> xref:#commandDtoProcessor[commandDtoProcessor]
 +
 --
@@ -86,21 +80,12 @@ For downloading xref:refguide:applib:index/value/Blob.adoc[Blob] or xref:refguid
 
 Associates this action with a property or collection, specifying its id.
 
-This is an alternative to using _MemberOrder#name()_ . To specify the order (equivalent to _MemberOrder#sequence()_ }), use _#associateWithSequence()_ .
+To specify the layout order use _ActionLayout#sequence()_ .
 
-For example `@Action(associateWith="items", associateWithSequence="2.1")` 
+For example `@Action(associateWith="items") @ActionLayout(sequence="2.1")` 
 
 If an action is associated with a collection, then any matching parameters will have their choices automatically inferred from the collection (if not otherwise specified) and any collection parameter defaults can be specified using checkboxes (in the Wicket UI, at least).
 
-[#associateWithSequence]
-=== associateWithSequence
-
-Specifies the sequence/order in the UI for an action that's been associated with a property or collection.
-
-This is an alternative to using _MemberOrder#sequence()_ , but is ignored if _Action#associateWith()_ isn't also specified.
-
-For example: `@Action(associateWith="items", associateWithSequence="2.1")` 
-
 [#commandDtoProcessor]
 === commandDtoProcessor
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc
index 729e7d6..d247d4d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc
@@ -14,11 +14,14 @@ Layout hints for actions.
   String cssClassFa() default "";     // <.>
   CssClassFaPosition cssClassFaPosition() default CssClassFaPosition.LEFT;     // <.>
   String describedAs() default "";     // <.>
+  String fieldSetId() default "__infer";     // <.>
+  String fieldSetName() default "__infer";     // <.>
   Where hidden() default Where.NOT_SPECIFIED;     // <.>
   String named() default "";     // <.>
   Position position() default Position.NOT_SPECIFIED;     // <.>
   PromptStyle promptStyle() default PromptStyle.AS_CONFIGURED;     // <.>
   Redirect redirectPolicy() default Redirect.AS_CONFIGURED;     // <.>
+  String sequence() default "";     // <.>
 }
 ----
 
@@ -47,6 +50,16 @@ Indicates the position of theFont Awesomeicon.
 --
 Description of this action, eg to be rendered in a tooltip.
 --
+<.> xref:#fieldSetId[fieldSetId]
++
+--
+Specifies the *id* of associated _FieldSet_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+--
+<.> xref:#fieldSetName[fieldSetName]
++
+--
+Specifies the *friendly-name* of associated _FieldSet_ or _Collection_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+--
 <.> xref:#hidden[hidden]
 +
 --
@@ -72,6 +85,11 @@ How the parameters for this action are prompted, either _PromptStyle#DIALOG dial
 --
 If the action returns its target, then determines whether to update the page or instead to redirect (forcing a re-rendering of a new page).
 --
+<.> xref:#sequence[sequence]
++
+--
+The order of this member relative to other members in the same (layout) group, given in _Dewey-decimal_ notation.
+--
 
 == Members
 
@@ -106,6 +124,20 @@ The icon could be rendered on the left or the right of the action button
 
 Description of this action, eg to be rendered in a tooltip.
 
+[#fieldSetId]
+=== fieldSetId
+
+Specifies the *id* of associated _FieldSet_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+
+For a more in depth description see the analogous _PropertyLayout#fieldSetId()_ .
+
+[#fieldSetName]
+=== fieldSetName
+
+Specifies the *friendly-name* of associated _FieldSet_ or _Collection_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+
+For a more in depth description see the analogous _PropertyLayout#fieldSetId()_ ;
+
 [#hidden]
 === hidden
 
@@ -139,6 +171,13 @@ Not re-rendering can provide a smoother UI experience.
 
 Supported by the Wicket viewer.
 
+[#sequence]
+=== sequence
+
+The order of this member relative to other members in the same (layout) group, given in _Dewey-decimal_ notation.
+
+An alternative is to use the `Xxx.layout.xml` file, where `Xxx` is the domain object name.
+
 include::hooks/ActionLayout_010-examples-and-usage.adoc[]
 
 include::hooks/ActionLayout_021-promptStyle.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc
index fbb2964..cd32341 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc
@@ -16,6 +16,7 @@ Layout hints for collections.
   String named() default "";     // <.>
   boolean namedEscaped() default true;     // <.>
   int paged() default -1;     // <.>
+  String sequence() default "";     // <.>
   @SuppressWarnings("rawtypes")
 Class sortedBy() default Comparator.class;     // <.>
 }
@@ -56,6 +57,11 @@ A flag indicating whether the value of _#named()_ should be HTML escaped or not.
 --
 The page size for instances of this class when rendered within a table.
 --
+<.> xref:#sequence[sequence]
++
+--
+The order of this member relative to other members in the same (layout) group, given in _Dewey-decimal_ notation.
+--
 <.> xref:#sortedBy[sortedBy]
 +
 --
@@ -111,6 +117,13 @@ If annotated on a collection, then the page size refers to parented collections
 
 If annotated on a type, then the page size refers to standalone collections (eg as returned from a repository query).
 
+[#sequence]
+=== sequence
+
+The order of this member relative to other members in the same (layout) group, given in _Dewey-decimal_ notation.
+
+An alternative is to use the `Xxx.layout.xml` file, where `Xxx` is the domain object name.
+
 [#sortedBy]
 === sortedBy
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberOrder.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberOrder.adoc
deleted file mode 100644
index 28a5852..0000000
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberOrder.adoc
+++ /dev/null
@@ -1,48 +0,0 @@
-= @MemberOrder
-: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 [...]
-
-Indicates the position a method should be placed in.
-
-An alternative is to use the `Xxx.layout.xml` file, where `Xxx` is the domain object name.
-
-== API
-
-[source,java]
-.MemberOrder.java
-----
-@interface MemberOrder {
-  String name() default "";     // <.>
-  String sequence();     // <.>
-}
-----
-
-<.> xref:#name[name]
-+
---
-Groups or associate members with each other.
---
-<.> xref:#sequence[sequence]
-+
---
-The order of this member relative to other members in the same group, in Dewey-decimal notation.
---
-
-== Members
-
-[#name]
-=== name
-
-Groups or associate members with each other.
-
-The intepretation ofthis grouping depends on the member:
-
-* For actions, indicates the property or collection to associate.
-* For properties, indicates the property group
-* For collections, currently has no meaning
-
-[#sequence]
-=== sequence
-
-The order of this member relative to other members in the same group, in Dewey-decimal notation.
-
-include::hooks/MemberOrder_010-examples-and-usage.adoc[]
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 a5e0b1d..c26a339 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
@@ -11,6 +11,8 @@ Collects together all layout hints for a property of a domain object.
 @interface PropertyLayout {
   String cssClass() default "";     // <.>
   String describedAs() default "";     // <.>
+  String fieldSetId() default "__infer";     // <.>
+  String fieldSetName() default "__infer";     // <.>
   Where hidden() default Where.NOT_SPECIFIED;     // <.>
   LabelPosition labelPosition() default LabelPosition.NOT_SPECIFIED;     // <.>
   int multiLine() default -1;     // <.>
@@ -20,6 +22,7 @@ Collects together all layout hints for a property of a domain object.
   PromptStyle promptStyle() default PromptStyle.NOT_SPECIFIED;     // <.>
   RenderDay renderDay() default RenderDay.NOT_SPECIFIED;     // <.>
   Repainting repainting() default Repainting.NOT_SPECIFIED;     // <.>
+  String sequence() default "";     // <.>
   int typicalLength() default -1;     // <.>
 }
 ----
@@ -34,6 +37,16 @@ Indicates the css class that a property should have, to allow more targeted styl
 --
 Description of this property, eg to be rendered in a tooltip.
 --
+<.> xref:#fieldSetId[fieldSetId]
++
+--
+Specifies the *id* of associated _FieldSet_ .XML layout is presentXML layout is absent
+--
+<.> xref:#fieldSetName[fieldSetName]
++
+--
+Specifies the *friendly-name* of associated _FieldSet_ .
+--
 <.> xref:#hidden[hidden]
 +
 --
@@ -79,6 +92,11 @@ For date properties (and parameters) only, instructs the viewer that the date sh
 --
 Indicates that the value held by the property never changes over time, even when other properties of the object do change.
 --
+<.> xref:#sequence[sequence]
++
+--
+The order of this member relative to other members in the same (layout) group, given in _Dewey-decimal_ notation.
+--
 <.> xref:#typicalLength[typicalLength]
 +
 --
@@ -97,6 +115,32 @@ Indicates the css class that a property should have, to allow more targeted styl
 
 Description of this property, eg to be rendered in a tooltip.
 
+[#fieldSetId]
+=== fieldSetId
+
+Specifies the *id* of associated _FieldSet_ .XML layout is presentXML layout is absent
+
+A _FieldSet_ is a layout component for property grouping, that can either be specified via a `Xxx.layout.xml` file (with `Xxx` the domain object name) or is inferred by the framework via annotations (aka the programming model). _FieldSet_ s are represented in-memory and requires a framework internal unique id per domain object type.
+
+Following 2 scenarios have slightly different behavior:
+
+When a XML layout is present, every _FieldSet_  *id* is either explicitly specified in the file or may be inferred from a non-empty *name* . If the *name* is empty "" or missing, then the *id* within the file is mandatory.
+
+If this _Property_ is not already explicitly listed within the XML layout, we lookup the associated _FieldSet_ in the XML layout file first matching by *id* using _@PropertyLayout(fieldSetId=...)_ if any, then falling back to matching by (friendly) *name* using @PropertyLayout(fieldSetName=...)} if any.
+
+We reify (in-memory) the associated _FieldSet_ using _@PropertyLayout(fieldSetId=...)_ (if present) as its *id* and using _@PropertyLayout(fieldSetId=...)_ as its (friendly) *name* . While if no *id* is provided an *id* is inferred from the (friendly) *name* , in which case the (friendly) *name* must not be empty. Whereas if no (friendly) *name* is provided a (friendly) *name* is inferred from the *id* , in which case the *id* must not be empty.
+
+With _@PropertyLayout(sequence=...)_ the relative position within that _FieldSet_ can be specified.
+
+[#fieldSetName]
+=== fieldSetName
+
+Specifies the *friendly-name* of associated _FieldSet_ .
+
+Explicitly specifying an empty "" *friendly-name* will suppress the _FieldSet_ 's label from being rendered.
+
+For a more in depth description see _PropertyLayout#fieldSetId()_ .
+
 [#hidden]
 === hidden
 
@@ -170,6 +214,13 @@ Note that for this to work, the viewer will also ensure that none of the propert
 
 Design note: we considered implementing this an "immutable" flag on the xref:refguide:applib:index/annotation/Property.adoc[Property] annotation (because this flag is typically appropriate for immutable/unchanging properties of a domain object). However, we decided not to do that, on the basis that it might be interpreted as having a deeper impact within the framework than simply a hint for rendering.
 
+[#sequence]
+=== sequence
+
+The order of this member relative to other members in the same (layout) group, given in _Dewey-decimal_ notation.
+
+An alternative is to use the `Xxx.layout.xml` file, where `Xxx` is the domain object name.
+
 [#typicalLength]
 === typicalLength
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/exceptions/RecoverableException.adoc b/antora/components/refguide-index/modules/applib/pages/index/exceptions/RecoverableException.adoc
index beb8272..070ab36 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/exceptions/RecoverableException.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/exceptions/RecoverableException.adoc
@@ -21,8 +21,6 @@ class RecoverableException {
   RecoverableException(final String msg, final Throwable cause)
   RecoverableException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod, final Throwable cause)
   String getMessage()
-  TranslatableString getTranslatableMessage()
-  String getTranslationContext()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/exceptions/TranslatableException.adoc b/antora/components/refguide-index/modules/applib/pages/index/exceptions/TranslatableException.adoc
index e7c5798..c677cdf 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/exceptions/TranslatableException.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/exceptions/TranslatableException.adoc
@@ -12,7 +12,6 @@ The _org.apache.isis.applib.services.exceprecog.ExceptionRecognizer_ will automa
 ----
 interface TranslatableException {
   TranslatableString getTranslatableMessage()     // <.>
-  String getTranslationContext()     // <.>
 }
 ----
 
@@ -21,11 +20,6 @@ interface TranslatableException {
 --
 In the spirit of _Exception#getLocalizedMessage()_ , but using xref:refguide:applib:index/services/i18n/TranslatableString.adoc[TranslatableString] instead.
 --
-<.> xref:#getTranslationContext__[getTranslationContext()]
-+
---
-The context to use when translating the _#getTranslatableMessage() translatable message_ , as ultimately passed through to _org.apache.isis.applib.services.i18n.TranslationService#translate(String, String)_ .
---
 
 == Members
 
@@ -35,8 +29,3 @@ The context to use when translating the _#getTranslatableMessage() translatable
 In the spirit of _Exception#getLocalizedMessage()_ , but using xref:refguide:applib:index/services/i18n/TranslatableString.adoc[TranslatableString] instead.
 
 If returns `null` , then _Exception#getMessage()_ will be used as a fallback. This design allows the Isis-provided xref:refguide:applib:index/exceptions/RecoverableException.adoc[RecoverableException] and xref:refguide:applib:index/exceptions/UnrecoverableException.adoc[UnrecoverableException] to provide constructors that accept a xref:refguide:applib:index/services/i18n/TranslatableString.adoc[TranslatableString] , but can be left as null for any existing code.
-
-[#getTranslationContext__]
-=== getTranslationContext()
-
-The context to use when translating the _#getTranslatableMessage() translatable message_ , as ultimately passed through to _org.apache.isis.applib.services.i18n.TranslationService#translate(String, String)_ .
diff --git a/antora/components/refguide-index/modules/applib/pages/index/exceptions/UnrecoverableException.adoc b/antora/components/refguide-index/modules/applib/pages/index/exceptions/UnrecoverableException.adoc
index 2d84241..5a13060 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/exceptions/UnrecoverableException.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/exceptions/UnrecoverableException.adoc
@@ -17,8 +17,6 @@ class UnrecoverableException {
   UnrecoverableException(final String msg, final Throwable cause)
   UnrecoverableException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod, final Throwable cause)
   String getMessage()
-  TranslatableString getTranslatableMessage()
-  String getTranslationContext()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/mixins/system/HasTransactionId.adoc b/antora/components/refguide-index/modules/applib/pages/index/mixins/system/HasTransactionId.adoc
index ccbe858..5d2e8fb 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/mixins/system/HasTransactionId.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/mixins/system/HasTransactionId.adoc
@@ -28,4 +28,4 @@ Holds the sequence number uniquely identifying the transaction number within the
 
 Holds the sequence number uniquely identifying the transaction number within the overall _org.apache.isis.applib.services.iactn.Interaction_ .
 
-The values in this sequence are ultimately obtained from the non-API method _org.apache.isis.applib.services.iactn.Interaction#next(SequenceType)_ , with a xref:refguide:applib:index/services/iactn/SequenceType.adoc[SequenceType] of _SequenceType#TRANSACTION_ .
+The values in this sequence are ultimately obtained from the non-API method _org.apache.isis.core.metamodel.execution.InteractionInternal#getTransactionSequence_ .
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/grid/GridService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/grid/GridService.adoc
index 6399676..1fa47a9 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/grid/GridService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/grid/GridService.adoc
@@ -122,21 +122,21 @@ The default implementation searches through all available xref:refguide:applib:i
 
 Returns a normalized grid for the domain class obtained previously using _#load(Class)_ .
 
-If a "normalized" grid is persisted as the `layout.xml` , then the expectation is that the xref:refguide:applib:index/annotation/MemberOrder.adoc[MemberOrder] annotation can be removed from the domain class because the binding of properties/collections/actions will be within the XML. However, the layout annotations ( xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[DomainObjectLayout] , xref:refguide:applib:index/annotation/ActionLayout.adoc[ActionLayout] , xref:refguide:app [...]
+If a "normalized" grid is persisted as the `layout.xml` , then the expectation is that the _MemberOrder_ annotation can be removed from the domain class because the binding of properties/collections/actions will be within the XML. However, the layout annotations ( xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[DomainObjectLayout] , xref:refguide:applib:index/annotation/ActionLayout.adoc[ActionLayout] , xref:refguide:applib:index/annotation/PropertyLayout.adoc[PropertyLayou [...]
 
 [#complete__Grid]
 === complete(Grid)
 
 Modifies the provided xref:refguide:applib:index/layout/grid/Grid.adoc[Grid] with additional metadata, broadly speaking corresponding to the xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[DomainObjectLayout] , xref:refguide:applib:index/annotation/ActionLayout.adoc[ActionLayout] , xref:refguide:applib:index/annotation/PropertyLayout.adoc[PropertyLayout] and xref:refguide:applib:index/annotation/CollectionLayout.adoc[CollectionLayout] .
 
-If a "completed" grid is persisted as the `layout.xml` , then there should be no need for any of the layout annotations, nor the xref:refguide:applib:index/annotation/MemberOrder.adoc[MemberOrder] annotations, to be required in the domain class itself.
+If a "completed" grid is persisted as the `layout.xml` , then there should be no need for any of the layout annotations, nor the _MemberOrder_ annotations, to be required in the domain class itself.
 
 [#minimal__Grid]
 === minimal(Grid)
 
 Modifies the provided xref:refguide:applib:index/layout/grid/Grid.adoc[Grid] , removing all metadata except the basic grid structure.
 
-If a "minimal" grid is persisted as the `layout.xml` , then the expectation is that most of the layout annotations ( xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[DomainObjectLayout] , xref:refguide:applib:index/annotation/ActionLayout.adoc[ActionLayout] , xref:refguide:applib:index/annotation/PropertyLayout.adoc[PropertyLayout] , xref:refguide:applib:index/annotation/CollectionLayout.adoc[CollectionLayout] , but also xref:refguide:applib:index/annotation/MemberOrder.adoc [...]
+If a "minimal" grid is persisted as the `layout.xml` , then the expectation is that most of the layout annotations ( xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[DomainObjectLayout] , xref:refguide:applib:index/annotation/ActionLayout.adoc[ActionLayout] , xref:refguide:applib:index/annotation/PropertyLayout.adoc[PropertyLayout] , xref:refguide:applib:index/annotation/CollectionLayout.adoc[CollectionLayout] , but also _MemberOrder_ ) will still be retained in the domain c [...]
 
 include::hooks/GridService_010-implementation.adoc[]
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/HasTranslationContext.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/HasTranslationContext.adoc
new file mode 100644
index 0000000..81c8177
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/HasTranslationContext.adoc
@@ -0,0 +1,25 @@
+= HasTranslationContext _(interface)_
+: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]
+.HasTranslationContext.java
+----
+interface HasTranslationContext {
+  TranslationContext getTranslationContext()     // <.>
+}
+----
+
+<.> xref:#getTranslationContext__[getTranslationContext()]
++
+--
+The context to use when translating text, as ultimately passed through to _org.apache.isis.applib.services.i18n.TranslationService#translate(TranslationContext, String)_ .
+--
+
+== Members
+
+[#getTranslationContext__]
+=== getTranslationContext()
+
+The context to use when translating text, as ultimately passed through to _org.apache.isis.applib.services.i18n.TranslationService#translate(TranslationContext, String)_ .
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslatableString.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslatableString.adoc
index 528e21d..99390e1 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslatableString.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslatableString.adoc
@@ -13,7 +13,7 @@ class TranslatableString {
   String getPluralText()     // <.>
   boolean isPluralForm()
   Map<String, Object> getArgumentsByParameterName()     // <.>
-  String translate(final TranslationService translationService, final String context)     // <.>
+  String translate(final TranslationService translationService, final TranslationContext context)     // <.>
   String getPattern()     // <.>
   String translated(final String translatedText)
   String format(String format, Map<String, Object> values)
@@ -48,7 +48,7 @@ The plural text as provided in the _#trn(String, String, int, Object...) factory
 --
 The arguments; excluded from _#equals(Object)_ comparison.
 --
-<.> xref:#translate__TranslationService_String[translate(TranslationService, String)]
+<.> xref:#translate__TranslationService_TranslationContext[translate(TranslationService, TranslationContext)]
 +
 --
 Translates this string using the provided xref:refguide:applib:index/services/i18n/TranslationService.adoc[TranslationService] , selecting either the single or plural form as per _#getPattern()_ .
@@ -86,8 +86,8 @@ The plural text as provided in the _#trn(String, String, int, Object...) factory
 
 The arguments; excluded from _#equals(Object)_ comparison.
 
-[#translate__TranslationService_String]
-=== translate(TranslationService, String)
+[#translate__TranslationService_TranslationContext]
+=== translate(TranslationService, TranslationContext)
 
 Translates this string using the provided xref:refguide:applib:index/services/i18n/TranslationService.adoc[TranslationService] , selecting either the single or plural form as per _#getPattern()_ .
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc
new file mode 100644
index 0000000..ebc485c
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc
@@ -0,0 +1,19 @@
+= TranslationContext
+: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]
+.TranslationContext.java
+----
+class TranslationContext {
+  TranslationContext forTranslationContextHolder(final HasTranslationContext hasTranslationContext)
+  TranslationContext forClassName(final Class<?> contextClass)
+  TranslationContext forMethod(final Class<?> contextClass, final String contextMethodName)
+  TranslationContext forMethod(final Method method)
+  TranslationContext forEnum(final Enum<?> objectAsEnum)
+  TranslationContext empty()
+  TranslationContext forTabIdentifier(Identifier identifier)
+}
+----
+
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationService.adoc
index f41a0b3..95c1796 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationService.adoc
@@ -11,18 +11,18 @@ As such, this domain service is the cornerstone of the framework's i18n support.
 .TranslationService.java
 ----
 interface TranslationService {
-  String translate(final String context, final String text)     // <.>
-  String translate(final String context, final String singularText, final String pluralText, int num)     // <.>
+  String translate(final TranslationContext context, final String text)     // <.>
+  String translate(final TranslationContext context, final String singularText, final String pluralText, int num)     // <.>
   Mode getMode()     // <.>
 }
 ----
 
-<.> xref:#translate__String_String[translate(String, String)]
+<.> xref:#translate__TranslationContext_String[translate(TranslationContext, String)]
 +
 --
 Return a translation of the text, in the locale of the "current user".
 --
-<.> xref:#translate__String_String_String_int[translate(String, String, String, int)]
+<.> xref:#translate__TranslationContext_String_String_int[translate(TranslationContext, String, String, int)]
 +
 --
 Return a translation of either the singular or the plural text, dependent on the `num` parameter, in the locale of the "current user".
@@ -35,15 +35,15 @@ Whether this implementation is operating in read or in write mode.
 
 == Members
 
-[#translate__String_String]
-=== translate(String, String)
+[#translate__TranslationContext_String]
+=== translate(TranslationContext, String)
 
 Return a translation of the text, in the locale of the "current user".
 
 The mechanism to determine the locale is implementation-specific.
 
-[#translate__String_String_String_int]
-=== translate(String, String, String, int)
+[#translate__TranslationContext_String_String_int]
+=== translate(TranslationContext, String, String, int)
 
 Return a translation of either the singular or the plural text, dependent on the `num` parameter, in the locale of the "current user".
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Interaction.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Interaction.adoc
index 3b992ad..a886b04 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Interaction.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Interaction.adoc
@@ -19,7 +19,6 @@ interface Interaction {
   Command getCommand()     // <.>
   Execution<?, ?> getCurrentExecution()     // <.>
   Execution<?, ?> getPriorExecution()     // <.>
-  int next(final SequenceType sequenceType)     // <.>
 }
 ----
 
@@ -43,11 +42,6 @@ The current (most recently pushed) xref:refguide:applib:index/services/iactn/Exe
 --
 The execution that preceded the current one.
 --
-<.> xref:#next__SequenceType[next(SequenceType)]
-+
---
-Framework use only: generates numbers for a named sequence type.
---
 
 == Members
 
@@ -73,11 +67,6 @@ The current (most recently pushed) xref:refguide:applib:index/services/iactn/Exe
 
 The execution that preceded the current one.
 
-[#next__SequenceType]
-=== next(SequenceType)
-
-Framework use only: generates numbers for a named sequence type.
-
 include::hooks/Interaction_010-implementation.adoc[]
 
 include::hooks/Interaction_020-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/InteractionContext.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/InteractionContext.adoc
index d73c930..be398d3 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/InteractionContext.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/InteractionContext.adoc
@@ -11,24 +11,46 @@ An xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] conta
 .InteractionContext.java
 ----
 interface InteractionContext {
+  boolean isInInteraction()     // <.>
   Optional<Interaction> currentInteraction()     // <.>
+  Optional<UUID> getInteractionId()     // <.>
   Interaction currentInteractionElseFail()
 }
 ----
 
+<.> xref:#isInInteraction__[isInInteraction()]
++
+--
+Whether there is a currently active xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] for the calling thread.
+--
 <.> xref:#currentInteraction__[currentInteraction()]
 +
 --
 Optionally, the currently active xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] for the calling thread.
 --
+<.> xref:#getInteractionId__[getInteractionId()]
++
+--
+Unique id of the current request- or test-scoped xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
+--
 
 == Members
 
+[#isInInteraction__]
+=== isInInteraction()
+
+Whether there is a currently active xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] for the calling thread.
+
 [#currentInteraction__]
 === currentInteraction()
 
 Optionally, the currently active xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] for the calling thread.
 
+[#getInteractionId__]
+=== getInteractionId()
+
+Unique id of the current request- or test-scoped xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
+
 include::hooks/InteractionContext_010-implementation.adoc[]
 
 include::hooks/InteractionContext_020-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/SequenceType.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/SequenceType.adoc
deleted file mode 100644
index f284970..0000000
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/SequenceType.adoc
+++ /dev/null
@@ -1,45 +0,0 @@
-= SequenceType _(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 [...]
-
-Enumerates the different reasons for a sequence of occurrences within a single (top-level) xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
-
-== API
-
-[source,java]
-.SequenceType.java
-----
-enum SequenceType {
-  EXECUTION     // <.>
-  TRANSACTION     // <.>
-  String id()
-}
-----
-
-<.> xref:#EXECUTION[EXECUTION]
-+
---
-Numbers the executions (an action invocation or property edit) within a given xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
---
-<.> xref:#TRANSACTION[TRANSACTION]
-+
---
-Numbers the transactions within a given xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
---
-
-== Members
-
-[#EXECUTION]
-=== EXECUTION
-
-Numbers the executions (an action invocation or property edit) within a given xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
-
-Each xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] is initiated by an execution of action invocation or a property edit. Thereafter there could be multiple other executions as the result of nested calls using the xref:refguide:applib:index/services/wrapper/WrapperFactory.adoc[WrapperFactory] .
-
-Another possible reason is support for bulk action invocations.
-
-[#TRANSACTION]
-=== TRANSACTION
-
-Numbers the transactions within a given xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] .
-
-Each xref:refguide:applib:index/services/iactn/Interaction.adoc[Interaction] is executed within the context of a transaction, but the (occasionally) the transaction may be committed and a new one started as the result of the domain object using the _org.apache.isis.applib.services.xactn.TransactionService_ .
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/layout/Style.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/layout/Style.adoc
index a9fd90e..581fa8f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/layout/Style.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/layout/Style.adoc
@@ -64,7 +64,7 @@ The intention here is that any layout metadata annotations can be removed from t
 
 Default, whereby missing properties/collections/actions are added to regions, and unused/empty regions are removed/trimmed.
 
-It should be possible to remove any xref:refguide:applib:index/annotation/MemberOrder.adoc[MemberOrder] annotation but any property/collection/action layout annotations would need to be retained.
+It should be possible to remove any _MemberOrder_ annotation but any property/collection/action layout annotations would need to be retained.
 
 * _@MemberGroupLayout_ : *serialized as XML*
 * _@MemberOrder_ : *serialized as XML*
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc
index 35d4149..161825d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc
@@ -13,13 +13,13 @@ These messages can either be simple strings, or can be translated.
 interface MessageService {
   void informUser(String message)     // <.>
   String informUser(TranslatableString message, final Class<?> contextClass, final String contextMethod)     // <.>
-  String informUser(TranslatableString message, final String translationContext)     // <.>
+  String informUser(TranslatableString message, final TranslationContext translationContext)     // <.>
   void warnUser(String message)     // <.>
   String warnUser(TranslatableString message, final Class<?> contextClass, final String contextMethod)     // <.>
-  String warnUser(TranslatableString message, final String translationContext)     // <.>
+  String warnUser(TranslatableString message, final TranslationContext translationContext)     // <.>
   void raiseError(String message)     // <.>
   String raiseError(TranslatableString message, final Class<?> contextClass, final String contextMethod)     // <.>
-  String raiseError(TranslatableString message, final String translationContext)     // <.>
+  String raiseError(TranslatableString message, final TranslationContext translationContext)     // <.>
 }
 ----
 
@@ -33,7 +33,7 @@ Make the specified message available to the user, intended to be useful but opti
 --
 As _#informUser(String)_ , but with the message translated (if possible) to user's _java.util.Locale_ .
 --
-<.> xref:#informUser__TranslatableString_String[informUser(TranslatableString, String)]
+<.> xref:#informUser__TranslatableString_TranslationContext[informUser(TranslatableString, TranslationContext)]
 +
 --
 Override of _MessageService#informUser(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
@@ -48,7 +48,7 @@ Warn the user about a situation with the specified message.
 --
 As _#warnUser(String)_ , but with the message translated (if possible) to user's _java.util.Locale_ .
 --
-<.> xref:#warnUser__TranslatableString_String[warnUser(TranslatableString, String)]
+<.> xref:#warnUser__TranslatableString_TranslationContext[warnUser(TranslatableString, TranslationContext)]
 +
 --
 Override of _MessageService#warnUser(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
@@ -63,7 +63,7 @@ Notify the user of an application error with the specified message.
 --
 As _#raiseError(String)_ , but with the message translated (if possible) to user's _java.util.Locale_ .
 --
-<.> xref:#raiseError__TranslatableString_String[raiseError(TranslatableString, String)]
+<.> xref:#raiseError__TranslatableString_TranslationContext[raiseError(TranslatableString, TranslationContext)]
 +
 --
 Override of _MessageService#raiseError(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
@@ -85,8 +85,8 @@ As _#informUser(String)_ , but with the message translated (if possible) to user
 
 More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LocaleProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
 
-[#informUser__TranslatableString_String]
-=== informUser(TranslatableString, String)
+[#informUser__TranslatableString_TranslationContext]
+=== informUser(TranslatableString, TranslationContext)
 
 Override of _MessageService#informUser(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
 
@@ -106,8 +106,8 @@ As _#warnUser(String)_ , but with the message translated (if possible) to user's
 
 More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LocaleProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
 
-[#warnUser__TranslatableString_String]
-=== warnUser(TranslatableString, String)
+[#warnUser__TranslatableString_TranslationContext]
+=== warnUser(TranslatableString, TranslationContext)
 
 Override of _MessageService#warnUser(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
 
@@ -127,8 +127,8 @@ As _#raiseError(String)_ , but with the message translated (if possible) to user
 
 More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LocaleProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
 
-[#raiseError__TranslatableString_String]
-=== raiseError(TranslatableString, String)
+[#raiseError__TranslatableString_TranslationContext]
+=== raiseError(TranslatableString, TranslationContext)
 
 Override of _MessageService#raiseError(TranslatableString, Class, String)_ , but with an arbitrary translation context (rather than inferred from the context class and method).
 
diff --git a/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc b/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc
index 3b0a393..1dec8f8 100644
--- a/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc
+++ b/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc
@@ -32,10 +32,11 @@ interface Can<T> {
   Can<T> empty()     // <.>
   Can<T> ofNullable(T element)     // <.>
   Can<T> ofSingleton(T element)     // <.>
-  Can<T> of(T... array)
-  Can<T> ofArray(T[] array)
+  Can<T> of(T... array)     // <.>
+  Can<T> ofArray(T[] array)     // <.>
   Can<T> ofCollection(Collection<T> collection)     // <.>
-  Can<T> ofIterable(Iterable<T> iterable)
+  Can<T> ofIterable(Iterable<T> iterable)     // <.>
+  Can<T> ofEnumeration(Enumeration<T> enumeration)     // <.>
   Can<T> ofStream(Stream<T> stream)     // <.>
   Can<T> ofInstance(Instance<T> instance)     // <.>
   Can<T> reverse()     // <.>
@@ -121,11 +122,31 @@ Returns either a _Can_ with the given _element_ or an empty _Can_ if the _elemen
 --
 Returns either a _Can_ with the given _element_ or throws if the _element_ is _null_ .
 --
+<.> xref:#of__T[of(T)]
++
+--
+Var-arg version of _Can#ofArray(Object[])_ .
+--
+<.> xref:#ofArray__T[][ofArray(T[])]
++
+--
+Returns either a _Can_ with all the elements from given _array_ or an empty _Can_ if the _array_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
+--
 <.> xref:#ofCollection__Collection[ofCollection(Collection)]
 +
 --
 Returns either a _Can_ with all the elements from given _collection_ or an empty _Can_ if the _collection_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
 --
+<.> xref:#ofIterable__Iterable[ofIterable(Iterable)]
++
+--
+Returns either a _Can_ with all the elements from given _iterable_ or an empty _Can_ if the _iterable_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
+--
+<.> xref:#ofEnumeration__Enumeration[ofEnumeration(Enumeration)]
++
+--
+Returns either a _Can_ with all the elements from given _enumeration_ or an empty _Can_ if the _enumeration_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
+--
 <.> xref:#ofStream__Stream[ofStream(Stream)]
 +
 --
@@ -270,16 +291,40 @@ Returns either a _Can_ with the given _element_ or an empty _Can_ if the _elemen
 
 Returns either a _Can_ with the given _element_ or throws if the _element_ is _null_ .
 
+[#of__T]
+=== of(T)
+
+Var-arg version of _Can#ofArray(Object[])_ .
+
+[#ofArray__T[]]
+=== ofArray(T[])
+
+Returns either a _Can_ with all the elements from given _array_ or an empty _Can_ if the _array_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
+
 [#ofCollection__Collection]
 === ofCollection(Collection)
 
 Returns either a _Can_ with all the elements from given _collection_ or an empty _Can_ if the _collection_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
 
+[#ofIterable__Iterable]
+=== ofIterable(Iterable)
+
+Returns either a _Can_ with all the elements from given _iterable_ or an empty _Can_ if the _iterable_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
+
+[#ofEnumeration__Enumeration]
+=== ofEnumeration(Enumeration)
+
+Returns either a _Can_ with all the elements from given _enumeration_ or an empty _Can_ if the _enumeration_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
+
+As side-effect, consumes given _enumeration_ .
+
 [#ofStream__Stream]
 === ofStream(Stream)
 
 Returns either a _Can_ with all the elements from given _stream_ or an empty _Can_ if the _stream_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
 
+As side-effect, consumes given _stream_ .
+
 [#ofInstance__Instance]
 === ofInstance(Instance)
 
diff --git a/antora/components/refguide-index/modules/core/pages/index/interaction/session/InteractionFactory.adoc b/antora/components/refguide-index/modules/core/pages/index/interaction/session/InteractionFactory.adoc
index 1f7eb342..df8885f 100644
--- a/antora/components/refguide-index/modules/core/pages/index/interaction/session/InteractionFactory.adoc
+++ b/antora/components/refguide-index/modules/core/pages/index/interaction/session/InteractionFactory.adoc
@@ -13,7 +13,7 @@ The implementation is a singleton service.
 interface InteractionFactory {
   AuthenticationLayer openInteraction()     // <.>
   AuthenticationLayer openInteraction(Authentication authentication)     // <.>
-  boolean isInInteractionSession()     // <.>
+  boolean isInInteraction()     // <.>
   R callAuthenticated(Authentication authentication, Callable<R> callable)     // <.>
   void runAuthenticated(Authentication authentication, ThrowingRunnable runnable)     // <.>
   R callAnonymous(Callable<R> callable)     // <.>
@@ -32,7 +32,7 @@ If present, reuses the current top level _AuthenticationLayer_ , otherwise creat
 --
 Returns a new or reused _AuthenticationLayer_ that is a holder of xref:refguide:core:index/security/authentication/Authentication.adoc[Authentication] on top of the current thread's authentication layer stack.
 --
-<.> xref:#isInInteractionSession__[isInInteractionSession()]
+<.> xref:#isInInteraction__[isInInteraction()]
 <.> xref:#callAuthenticated__Authentication_Callable[callAuthenticated(Authentication, Callable)]
 +
 --
@@ -75,8 +75,8 @@ If available reuses an existing _InteractionSession_ , otherwise creates a new o
 
 The _InteractionSession_ represents a user's span of activities interacting with the application. The session's stack is later closed using _#closeSessionStack()_ .
 
-[#isInInteractionSession__]
-=== isInInteractionSession()
+[#isInInteraction__]
+=== isInInteraction()
 
 [#callAuthenticated__Authentication_Callable]
 === callAuthenticated(Authentication, Callable)
diff --git a/antora/components/refguide-index/modules/core/pages/index/runtimeservices/transaction/TransactionServiceSpring.adoc b/antora/components/refguide-index/modules/core/pages/index/runtimeservices/transaction/TransactionServiceSpring.adoc
index 9073354..47441f2 100644
--- a/antora/components/refguide-index/modules/core/pages/index/runtimeservices/transaction/TransactionServiceSpring.adoc
+++ b/antora/components/refguide-index/modules/core/pages/index/runtimeservices/transaction/TransactionServiceSpring.adoc
@@ -13,13 +13,13 @@ class TransactionServiceSpring {
   void flushTransaction()
   Optional<TransactionId> currentTransactionId()
   TransactionState currentTransactionState()
-  void beforeEnteringTransactionalBoundary(InteractionSession interactionSession)     // <.>
+  void beforeEnteringTransactionalBoundary(Interaction interaction)     // <.>
   void onTransactionEnded(TransactionAfterCompletionEvent event)     // <.>
-  void afterLeavingTransactionalBoundary(InteractionSession interactionSession)     // <.>
+  void afterLeavingTransactionalBoundary(Interaction interaction)     // <.>
 }
 ----
 
-<.> xref:#beforeEnteringTransactionalBoundary__InteractionSession[beforeEnteringTransactionalBoundary(InteractionSession)]
+<.> xref:#beforeEnteringTransactionalBoundary__Interaction[beforeEnteringTransactionalBoundary(Interaction)]
 +
 --
 INTERACTION BEGIN BOUNDARY
@@ -29,7 +29,7 @@ INTERACTION BEGIN BOUNDARY
 --
 TRANSACTION END BOUNDARY
 --
-<.> xref:#afterLeavingTransactionalBoundary__InteractionSession[afterLeavingTransactionalBoundary(InteractionSession)]
+<.> xref:#afterLeavingTransactionalBoundary__Interaction[afterLeavingTransactionalBoundary(Interaction)]
 +
 --
 INTERACTION END BOUNDARY
@@ -37,8 +37,8 @@ INTERACTION END BOUNDARY
 
 == Members
 
-[#beforeEnteringTransactionalBoundary__InteractionSession]
-=== beforeEnteringTransactionalBoundary(InteractionSession)
+[#beforeEnteringTransactionalBoundary__Interaction]
+=== beforeEnteringTransactionalBoundary(Interaction)
 
 INTERACTION BEGIN BOUNDARY
 
@@ -47,7 +47,7 @@ INTERACTION BEGIN BOUNDARY
 
 TRANSACTION END BOUNDARY
 
-[#afterLeavingTransactionalBoundary__InteractionSession]
-=== afterLeavingTransactionalBoundary(InteractionSession)
+[#afterLeavingTransactionalBoundary__Interaction]
+=== afterLeavingTransactionalBoundary(Interaction)
 
 INTERACTION END BOUNDARY
diff --git a/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTracker.adoc b/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTracker.adoc
index a83fb79..92b6a5b 100644
--- a/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTracker.adoc
+++ b/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTracker.adoc
@@ -21,17 +21,17 @@ interface EntityChangeTracker {
 <.> xref:#enlistCreated__ManagedObject[enlistCreated(ManagedObject)]
 +
 --
-Auditing and publishing support: for object stores to enlist an object that has just been created, capturing a dummy value `'[NEW]'` for the pre-modification value.
+Publishing support: for object stores to enlist an object that has just been created, capturing a dummy value `'[NEW]'` for the pre-modification value.
 --
 <.> xref:#enlistDeleting__ManagedObject[enlistDeleting(ManagedObject)]
 +
 --
-Auditing and publishing support: for object stores to enlist an object that is about to be deleted, capturing the pre-deletion value of the properties of the _ManagedObject_ .
+Publishing support: for object stores to enlist an object that is about to be deleted, capturing the pre-deletion value of the properties of the _ManagedObject_ .
 --
 <.> xref:#enlistUpdating__ManagedObject[enlistUpdating(ManagedObject)]
 +
 --
-Auditing and publishing support: for object stores to enlist an object that is about to be updated, capturing the pre-modification values of the properties of the _ManagedObject_ .
+Publishing support: for object stores to enlist an object that is about to be updated, capturing the pre-modification values of the properties of the _ManagedObject_ .
 --
 <.> xref:#recognizeLoaded__ManagedObject[recognizeLoaded(ManagedObject)]
 +
@@ -54,7 +54,7 @@ Fires the appropriate event and lifecycle callback: _UPDATING_
 [#enlistCreated__ManagedObject]
 === enlistCreated(ManagedObject)
 
-Auditing and publishing support: for object stores to enlist an object that has just been created, capturing a dummy value `'[NEW]'` for the pre-modification value.
+Publishing support: for object stores to enlist an object that has just been created, capturing a dummy value `'[NEW]'` for the pre-modification value.
 
 Fires the appropriate event and lifecycle callback: _PERSISTED_
 
@@ -63,7 +63,7 @@ The post-modification values are captured when the transaction commits.
 [#enlistDeleting__ManagedObject]
 === enlistDeleting(ManagedObject)
 
-Auditing and publishing support: for object stores to enlist an object that is about to be deleted, capturing the pre-deletion value of the properties of the _ManagedObject_ .
+Publishing support: for object stores to enlist an object that is about to be deleted, capturing the pre-deletion value of the properties of the _ManagedObject_ .
 
 Fires the appropriate event and lifecycle callback: _REMOVING_
 
@@ -72,7 +72,7 @@ The post-modification values are captured when the transaction commits. In the c
 [#enlistUpdating__ManagedObject]
 === enlistUpdating(ManagedObject)
 
-Auditing and publishing support: for object stores to enlist an object that is about to be updated, capturing the pre-modification values of the properties of the _ManagedObject_ .
+Publishing support: for object stores to enlist an object that is about to be updated, capturing the pre-modification values of the properties of the _ManagedObject_ .
 
 Fires the appropriate event and lifecycle callback: _UPDATING_
 
diff --git a/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTrackerDefault.adoc b/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTrackerDefault.adoc
index 1a91092..612917e 100644
--- a/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTrackerDefault.adoc
+++ b/antora/components/refguide-index/modules/core/pages/index/transaction/changetracking/EntityChangeTrackerDefault.adoc
@@ -7,24 +7,23 @@
 .EntityChangeTrackerDefault.java
 ----
 class EntityChangeTrackerDefault {
-  void onPreCommit(TransactionBeforeCompletionEvent event)     // <.>
-  EntityChanges getEntityChanges(final java.sql.Timestamp timestamp, final String userName)
+  void onTransactionCompleting(TransactionBeforeCompletionEvent event)     // <.>
+  Optional<EntityChanges> getEntityChanges(final java.sql.Timestamp timestamp, final String userName)
   Interaction currentInteraction()
-  String asString(Object object)
   int numberEntitiesLoaded()
   int numberEntitiesDirtied()
-  int numberAuditedEntityPropertiesModified()
+  int propertyChangeRecordCount()
   void enlistCreated(ManagedObject entity)
   void enlistDeleting(ManagedObject entity)
   void enlistUpdating(ManagedObject entity)
   void recognizeLoaded(ManagedObject entity)
   void recognizePersisting(ManagedObject entity)
   void recognizeUpdating(ManagedObject entity)
-  Stream<EntityPropertyChange> streamPropertyChanges(final java.sql.Timestamp timestamp, final String userName, final TransactionId txId)
+  Can<EntityPropertyChange> getPropertyChanges(final java.sql.Timestamp timestamp, final String userName, final TransactionId txId)
 }
 ----
 
-<.> xref:#onPreCommit__TransactionBeforeCompletionEvent[onPreCommit(TransactionBeforeCompletionEvent)]
+<.> xref:#onTransactionCompleting__TransactionBeforeCompletionEvent[onTransactionCompleting(TransactionBeforeCompletionEvent)]
 +
 --
 TRANSACTION END BOUNDARY
@@ -32,7 +31,7 @@ TRANSACTION END BOUNDARY
 
 == Members
 
-[#onPreCommit__TransactionBeforeCompletionEvent]
-=== onPreCommit(TransactionBeforeCompletionEvent)
+[#onTransactionCompleting__TransactionBeforeCompletionEvent]
+=== onTransactionCompleting(TransactionBeforeCompletionEvent)
 
 TRANSACTION END BOUNDARY
diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc
index 65ac959..8276e60 100644
--- a/core/adoc/modules/_overview/pages/about.adoc
+++ b/core/adoc/modules/_overview/pages/about.adoc
@@ -1424,7 +1424,7 @@ org.jmock:jmock:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:applib:index/AbstractViewModel.adoc[AbstractViewModel], xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:refguide:applib:index/adapters/DefaultsProvider.adoc [...]
+xref:refguide:applib:index/AbstractViewModel.adoc[AbstractViewModel], xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:refguide:applib:index/adapters/DefaultsProvider.adoc [...]
 ****
 
 |Apache Isis Core - Code Gen (ByteBuddy)
@@ -2270,12 +2270,6 @@ Directory: /security/spring
 ----
 |Authentication using Spring Security
 
-.Components
-****
-o.a.i.security.spring.authentication.AuthenticatorSpring +
-o.a.i.security.spring.webmodule.WebModuleSpringSecurity +
-****
-
 .Dependencies
 ****
 org.apache.isis.core:isis-core-runtimeservices:jar:<managed> +
@@ -3754,22 +3748,22 @@ skinparam {
 }
 hide stereotype
 left to right direction
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<11>> {
+skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<12>> {
+skinparam rectangle<<23>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<23>> {
+skinparam rectangle<<12>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -4552,6 +4546,7 @@ org.apache.isis.core:isis-core-config:jar:<managed> +
 org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
 org.apache.isis.core:isis-core-runtime:jar:<managed> +
 org.apache.isis.core:isis-schema:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-quartz-impl:jar:<managed> +
 org.apache.isis.mappings:isis-mappings-jaxrsclient-applib:jar:<managed> +
 org.apache.isis.mappings:isis-mappings-jaxrsclient-impl:jar:<managed> +
@@ -4685,7 +4680,6 @@ Directory: /extensions/core/quartz/impl
 ****
 org.apache.isis.core:isis-core-config:jar:<managed> +
 org.apache.isis.core:isis-core-security:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed> +
 org.springframework.boot:spring-boot-starter-quartz:jar:<managed> +
 ****
 
@@ -6016,193 +6010,3 @@ Directory: /incubator/viewers/vaadin/viewer
 org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:<managed> +
 ****
 |===
-
-== Legacy
-
-[plantuml,Legacy,svg]
-----
-@startuml(id=Legacy)
-title Legacy - Containers
-caption Artifact Hierarchy (Maven)
-
-skinparam {
-  shadowing false
-  arrowFontSize 10
-  defaultTextAlignment center
-  wrapWidth 200
-  maxMessageSize 100
-}
-hide stereotype
-left to right direction
-skinparam rectangle<<2>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<3>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<4>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<6>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-skinparam rectangle<<7>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
-package "Legacy\n[Software System]" {
-  rectangle "==Apache Isis Legacy\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Legacy - Applib\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis Legacy - Commons\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Legacy - Metamodel\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Legacy - REST Client\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Legacy - Runtime\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-}
-2 .[#707070].> 3 : ""
-2 .[#707070].> 4 : ""
-2 .[#707070].> 5 : ""
-2 .[#707070].> 6 : ""
-2 .[#707070].> 7 : ""
-@enduml
-----
-.Projects/Modules (Legacy)
-[cols="3a,5a", options="header"]
-|===
-|Coordinates |Description 
-
-|Apache Isis Legacy
-[source,yaml]
-----
-Group: org.apache.isis.legacy
-Artifact: isis-legacy
-Type: pom
-Directory: /legacy
-----
-|Collection of deprecated Apache Isis functionality, for removal.
-
-.Dependencies
-****
-org.projectlombok:lombok:jar:<managed> +
-****
-
-|Apache Isis Legacy - Applib
-[source,yaml]
-----
-Group: org.apache.isis.legacy
-Artifact: isis-legacy-applib
-Type: jar
-Directory: /legacy/extensions/core/applib
-----
-|To ease migration from Apache Isis versions 1.16+ to 2.0.0.
-
-.Components
-****
-o.a.i.legacy.applib.DomainObjectContainer +
-****
-
-.Dependencies
-****
-com.google.guava:guava:jar:<managed> +
-org.apache.isis.core:isis-applib:jar:<managed> +
-org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
-org.apache.isis.core:isis-core-runtime:jar:<managed> +
-org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
-****
-
-|Apache Isis Legacy - Commons
-[source,yaml]
-----
-Group: org.apache.isis.legacy
-Artifact: isis-legacy-commons
-Type: jar
-Directory: /legacy/extensions/core/commons
-----
-|To ease migration from Apache Isis versions 1.16+ to 2.0.0.
-
-.Dependencies
-****
-com.google.guava:guava:jar:<managed> +
-org.apache.isis.core:isis-applib:jar:<managed> +
-org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
-org.apache.isis.core:isis-core-runtime:jar:<managed> +
-org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
-****
-
-|Apache Isis Legacy - Metamodel
-[source,yaml]
-----
-Group: org.apache.isis.legacy
-Artifact: isis-legacy-metamodel
-Type: jar
-Directory: /legacy/extensions/core/metamodel
-----
-|To ease migration from Apache Isis versions 1.16+ to 2.0.0.
-
-.Dependencies
-****
-com.google.guava:guava:jar:<managed> +
-org.apache.isis.core:isis-applib:jar:<managed> +
-org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
-org.apache.isis.core:isis-core-metamodel:jar:<managed> +
-org.apache.isis.legacy:isis-legacy-applib:jar:<managed> +
-org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
-****
-
-|Apache Isis Legacy - REST Client
-[source,yaml]
-----
-Group: org.apache.isis.legacy
-Artifact: isis-legacy-restclient
-Type: jar
-Directory: /legacy/mappings/restclient
-----
-|As defined in Isis v1.x RO Applib.
-
-.Dependencies
-****
-org.apache.isis.commons:isis-commons:jar:<managed> +
-org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
-org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed> +
-org.projectlombok:lombok:jar:<managed> +
-****
-
-|Apache Isis Legacy - Runtime
-[source,yaml]
-----
-Group: org.apache.isis.legacy
-Artifact: isis-legacy-runtime
-Type: jar
-Directory: /legacy/extensions/core/runtime
-----
-|To ease migration from Apache Isis versions 1.16+ to 2.0.0.
-
-.Dependencies
-****
-com.google.guava:guava:jar:<managed> +
-org.apache.isis.core:isis-applib:jar:<managed> +
-org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
-org.apache.isis.core:isis-core-runtime:jar:<managed> +
-org.apache.isis.legacy:isis-legacy-applib:jar:<managed> +
-org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed> +
-org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
-org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed> +
-org.datanucleus:javax.jdo:jar:<managed> +
-****
-|===