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

[isis] branch master updated (89f2f20 -> 07a6f95)

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

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


    from 89f2f20  ISIS-2473: j2adoc: adds support for annotation types
     new 705e860  ISIS-2473: fix field formatting
     new 07a6f95  ISIS-2473: re-gen adoc index

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../modules/generated/pages/index/Action.adoc      | 114 +++++++++++++
 .../generated/pages/index/ActionLayout.adoc        |  89 ++++++++++
 .../modules/generated/pages/index/BeanSort.adoc    |  58 ++-----
 .../{UserDataKeys.adoc => BookmarkPolicy.adoc}     |  35 +++-
 ...{HomePageResolverService.adoc => Bounding.adoc} |  12 +-
 .../modules/generated/pages/index/Collection.adoc  |  54 ++++++
 .../generated/pages/index/CollectionLayout.adoc    |  84 +++++++++
 .../pages/index/CommandOutcomeHandler.adoc         |  24 +--
 .../modules/generated/pages/index/Defaulted.adoc   |  35 ++++
 .../generated/pages/index/DomainObject.adoc        | 188 +++++++++++++++++++++
 .../generated/pages/index/DomainObjectLayout.adoc  | 111 ++++++++++++
 .../{ExecutionMode.adoc => DomainService.adoc}     |  35 ++--
 ...{UserDataKeys.adoc => DomainServiceLayout.adoc} |  23 ++-
 .../index/{ExecutionMode.adoc => Editing.adoc}     |  49 +++---
 ...eResolverService.adoc => EntityChangeKind.adoc} |  12 +-
 .../generated/pages/index/EqualByContent.adoc      |  18 ++
 .../generated/pages/index/ExecutionMode.adoc       |  13 +-
 .../modules/generated/pages/index/Facets.adoc      |  33 ++++
 .../modules/generated/pages/index/GridService.adoc |   8 +-
 ...{HomePageResolverService.adoc => HomePage.adoc} |  10 +-
 .../pages/index/HomePageResolverService.adoc       |   2 +-
 ...UserDataKeys.adoc => IsisInteractionScope.adoc} |  14 +-
 .../{UserDataKeys.adoc => LabelPosition.adoc}      |  29 +++-
 .../index/{ExecutionMode.adoc => MemberOrder.adoc} |  39 ++---
 ...xecutionMode.adoc => MementoSerialization.adoc} |  40 +++--
 ...HomePageResolverService.adoc => MinLength.adoc} |   8 +-
 .../pages/index/{UserDataKeys.adoc => Module.adoc} |  14 +-
 .../modules/generated/pages/index/Nature.adoc      |  71 ++++++++
 .../{ExecutionMode.adoc => NatureOfService.adoc}   |  47 +++---
 .../index/{UserDataKeys.adoc => Navigable.adoc}    |  14 +-
 .../modules/generated/pages/index/Optionality.adoc |  47 ++++++
 .../generated/pages/index/OrderPrecedence.adoc     |  46 +++++
 .../modules/generated/pages/index/Parameter.adoc   |  72 ++++++++
 .../generated/pages/index/ParameterLayout.adoc     |  77 +++++++++
 .../index/{UserDataKeys.adoc => Programmatic.adoc} |  14 +-
 ...omePageResolverService.adoc => Projecting.adoc} |  21 ++-
 .../modules/generated/pages/index/PromptStyle.adoc |  81 +++++++++
 .../modules/generated/pages/index/Property.adoc    | 149 ++++++++++++++++
 .../generated/pages/index/PropertyLayout.adoc      | 113 +++++++++++++
 .../modules/generated/pages/index/Publishing.adoc  |  56 ++++++
 .../index/{ExecutionMode.adoc => Redirect.adoc}    |  40 +++--
 .../index/{UserDataKeys.adoc => RenderDay.adoc}    |  23 ++-
 .../index/{UserDataKeys.adoc => Repainting.adoc}   |  23 ++-
 ...omePageResolverService.adoc => RestrictTo.adoc} |  12 +-
 .../modules/generated/pages/index/SemanticsOf.adoc | 124 ++++++++++++++
 .../modules/generated/pages/index/SudoService.adoc |  10 +-
 .../modules/generated/pages/index/Title.adoc       |  41 +++++
 .../generated/pages/index/TransactionState.adoc    |  49 +-----
 .../generated/pages/index/UserDataKeys.adoc        |   4 +-
 .../modules/generated/pages/index/Value.adoc       |  44 +++++
 .../modules/generated/pages/index/Where.adoc       | 122 +++++++++++++
 .../modules/generated/pages/system-overview.adoc   |  10 +-
 .../isis/tooling/j2adoc/test/J2AdocTest.java       |   3 +-
 .../tooling/javamodel/ast/FieldDeclarations.java   |  24 ++-
 54 files changed, 2137 insertions(+), 351 deletions(-)
 create mode 100644 antora/components/system/modules/generated/pages/index/Action.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/ActionLayout.adoc
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => BookmarkPolicy.adoc} (57%)
 copy antora/components/system/modules/generated/pages/index/{HomePageResolverService.adoc => Bounding.adoc} (84%)
 create mode 100644 antora/components/system/modules/generated/pages/index/Collection.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/CollectionLayout.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Defaulted.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/DomainObject.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/DomainObjectLayout.adoc
 copy antora/components/system/modules/generated/pages/index/{ExecutionMode.adoc => DomainService.adoc} (52%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => DomainServiceLayout.adoc} (62%)
 copy antora/components/system/modules/generated/pages/index/{ExecutionMode.adoc => Editing.adoc} (52%)
 copy antora/components/system/modules/generated/pages/index/{HomePageResolverService.adoc => EntityChangeKind.adoc} (84%)
 create mode 100644 antora/components/system/modules/generated/pages/index/EqualByContent.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Facets.adoc
 copy antora/components/system/modules/generated/pages/index/{HomePageResolverService.adoc => HomePage.adoc} (69%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => IsisInteractionScope.adoc} (64%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => LabelPosition.adoc} (62%)
 copy antora/components/system/modules/generated/pages/index/{ExecutionMode.adoc => MemberOrder.adoc} (53%)
 copy antora/components/system/modules/generated/pages/index/{ExecutionMode.adoc => MementoSerialization.adoc} (53%)
 copy antora/components/system/modules/generated/pages/index/{HomePageResolverService.adoc => MinLength.adoc} (84%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => Module.adoc} (53%)
 create mode 100644 antora/components/system/modules/generated/pages/index/Nature.adoc
 copy antora/components/system/modules/generated/pages/index/{ExecutionMode.adoc => NatureOfService.adoc} (53%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => Navigable.adoc} (73%)
 create mode 100644 antora/components/system/modules/generated/pages/index/Optionality.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/OrderPrecedence.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Parameter.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/ParameterLayout.adoc
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => Programmatic.adoc} (57%)
 copy antora/components/system/modules/generated/pages/index/{HomePageResolverService.adoc => Projecting.adoc} (74%)
 create mode 100644 antora/components/system/modules/generated/pages/index/PromptStyle.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Property.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/PropertyLayout.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Publishing.adoc
 copy antora/components/system/modules/generated/pages/index/{ExecutionMode.adoc => Redirect.adoc} (53%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => RenderDay.adoc} (66%)
 copy antora/components/system/modules/generated/pages/index/{UserDataKeys.adoc => Repainting.adoc} (64%)
 copy antora/components/system/modules/generated/pages/index/{HomePageResolverService.adoc => RestrictTo.adoc} (83%)
 create mode 100644 antora/components/system/modules/generated/pages/index/SemanticsOf.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Title.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Value.adoc
 create mode 100644 antora/components/system/modules/generated/pages/index/Where.adoc


[isis] 01/02: ISIS-2473: fix field formatting

Posted by ah...@apache.org.
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 705e86032a2f62281ac25ac635b42f5deefaf07b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Dec 13 09:49:40 2020 +0100

    ISIS-2473: fix field formatting
---
 .../isis/tooling/j2adoc/test/J2AdocTest.java       |  3 ++-
 .../tooling/javamodel/ast/FieldDeclarations.java   | 24 ++++++++++++++++++++--
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
index 8f83183..d6d1931 100644
--- a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
+++ b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
@@ -60,7 +60,8 @@ class J2AdocTest {
         .stream()
         //.filter(source->source.toString().contains("ExecutionMode"))
         //.filter(source->source.toString().contains("FactoryService"))
-        .filter(source->source.toString().contains("Action"))
+        //.filter(source->source.toString().contains("Action"))
+        .filter(source->source.toString().contains("SudoService"))
         //.peek(source->System.out.println("parsing source: " + source))
         .forEach(j2aContext::add);
         
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java
index de8d298..67ba114 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/FieldDeclarations.java
@@ -18,27 +18,47 @@
  */
 package org.apache.isis.tooling.javamodel.ast;
 
+import java.util.stream.Collectors;
+
 import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
 import com.github.javaparser.ast.body.EnumDeclaration;
 import com.github.javaparser.ast.body.FieldDeclaration;
+import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.expr.Expression;
 import com.github.javaparser.ast.type.TypeParameter;
+import com.github.javaparser.printer.PrettyPrinterConfiguration;
 
 import org.apache.isis.commons.collections.Can;
 
 import lombok.NonNull;
+import lombok.val;
 
 //TODO effective public might require more context
 public final class FieldDeclarations {
     
+    private static PrettyPrinterConfiguration printingConf = new PrettyPrinterConfiguration();
+    static {
+        printingConf.setPrintJavadoc(false);
+    }
+    
     /**
      * Returns given {@link FieldDeclaration} as normal text, without formatting.
      */
     public static String asNormalized(final @NonNull FieldDeclaration fd) {
-        return fd.toString().trim(); //TODO might miss the fields type here
+        
+        //suppress initializer printing (that is assignments)
+        val clone = fd.clone();
+        clone.getVariables().stream()
+                .forEach(vd->vd.setInitializer((Expression)null));
+        
+        return clone.toString(printingConf).trim();
     }
     
     public static String asNormalizedName(final @NonNull FieldDeclaration fd) {
-        return fd.toString().trim(); //TODO might have the fields type to remove here
+        return fd.getVariables().stream()
+                .map(VariableDeclarator::getNameAsString)
+                .collect(Collectors.joining(", "))
+                .trim();
     }
     
     public static Can<TypeParameter> getTypeParameters(final @NonNull FieldDeclaration fd) {


[isis] 02/02: ISIS-2473: re-gen adoc index

Posted by ah...@apache.org.
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 07a6f955de721777306cece9ccd0b758beb36b35
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Dec 13 09:51:34 2020 +0100

    ISIS-2473: re-gen adoc index
---
 .../modules/generated/pages/index/Action.adoc      | 114 +++++++++++++
 .../generated/pages/index/ActionLayout.adoc        |  89 ++++++++++
 .../modules/generated/pages/index/BeanSort.adoc    |  58 ++-----
 .../{UserDataKeys.adoc => BookmarkPolicy.adoc}     |  35 +++-
 ...{HomePageResolverService.adoc => Bounding.adoc} |  12 +-
 .../modules/generated/pages/index/Collection.adoc  |  54 ++++++
 .../generated/pages/index/CollectionLayout.adoc    |  84 +++++++++
 .../pages/index/CommandOutcomeHandler.adoc         |  24 +--
 .../modules/generated/pages/index/Defaulted.adoc   |  35 ++++
 .../generated/pages/index/DomainObject.adoc        | 188 +++++++++++++++++++++
 .../generated/pages/index/DomainObjectLayout.adoc  | 111 ++++++++++++
 .../{ExecutionMode.adoc => DomainService.adoc}     |  35 ++--
 ...{UserDataKeys.adoc => DomainServiceLayout.adoc} |  23 ++-
 .../index/{ExecutionMode.adoc => Editing.adoc}     |  49 +++---
 ...eResolverService.adoc => EntityChangeKind.adoc} |  12 +-
 .../generated/pages/index/EqualByContent.adoc      |  18 ++
 .../generated/pages/index/ExecutionMode.adoc       |  13 +-
 .../modules/generated/pages/index/Facets.adoc      |  33 ++++
 .../modules/generated/pages/index/GridService.adoc |   8 +-
 ...{HomePageResolverService.adoc => HomePage.adoc} |  10 +-
 .../pages/index/HomePageResolverService.adoc       |   2 +-
 ...UserDataKeys.adoc => IsisInteractionScope.adoc} |  14 +-
 .../{UserDataKeys.adoc => LabelPosition.adoc}      |  29 +++-
 .../index/{ExecutionMode.adoc => MemberOrder.adoc} |  39 ++---
 ...xecutionMode.adoc => MementoSerialization.adoc} |  40 +++--
 ...HomePageResolverService.adoc => MinLength.adoc} |   8 +-
 .../pages/index/{UserDataKeys.adoc => Module.adoc} |  14 +-
 .../modules/generated/pages/index/Nature.adoc      |  71 ++++++++
 .../{ExecutionMode.adoc => NatureOfService.adoc}   |  47 +++---
 .../index/{UserDataKeys.adoc => Navigable.adoc}    |  14 +-
 .../modules/generated/pages/index/Optionality.adoc |  47 ++++++
 .../generated/pages/index/OrderPrecedence.adoc     |  46 +++++
 .../modules/generated/pages/index/Parameter.adoc   |  72 ++++++++
 .../generated/pages/index/ParameterLayout.adoc     |  77 +++++++++
 .../index/{UserDataKeys.adoc => Programmatic.adoc} |  14 +-
 ...omePageResolverService.adoc => Projecting.adoc} |  21 ++-
 .../modules/generated/pages/index/PromptStyle.adoc |  81 +++++++++
 .../modules/generated/pages/index/Property.adoc    | 149 ++++++++++++++++
 .../generated/pages/index/PropertyLayout.adoc      | 113 +++++++++++++
 .../modules/generated/pages/index/Publishing.adoc  |  56 ++++++
 .../index/{ExecutionMode.adoc => Redirect.adoc}    |  40 +++--
 .../index/{UserDataKeys.adoc => RenderDay.adoc}    |  23 ++-
 .../index/{UserDataKeys.adoc => Repainting.adoc}   |  23 ++-
 ...omePageResolverService.adoc => RestrictTo.adoc} |  12 +-
 .../modules/generated/pages/index/SemanticsOf.adoc | 124 ++++++++++++++
 .../modules/generated/pages/index/SudoService.adoc |  10 +-
 .../modules/generated/pages/index/Title.adoc       |  41 +++++
 .../generated/pages/index/TransactionState.adoc    |  49 +-----
 .../generated/pages/index/UserDataKeys.adoc        |   4 +-
 .../modules/generated/pages/index/Value.adoc       |  44 +++++
 .../modules/generated/pages/index/Where.adoc       | 122 +++++++++++++
 .../modules/generated/pages/system-overview.adoc   |  10 +-
 52 files changed, 2113 insertions(+), 348 deletions(-)

diff --git a/antora/components/system/modules/generated/pages/index/Action.adoc b/antora/components/system/modules/generated/pages/index/Action.adoc
new file mode 100644
index 0000000..711405c
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Action.adoc
@@ -0,0 +1,114 @@
+= Action : _annotation_
+: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 [...]
+
+Domain semantics for domain object collection.
+
+.Java Sources
+[source,java]
+----
+@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; // <.>
+
+  Publishing executionPublishing() default Publishing.NOT_SPECIFIED; // <.>
+
+  Where hidden() default Where.NOT_SPECIFIED; // <.>
+
+  RestrictTo restrictTo() default RestrictTo.NOT_SPECIFIED; // <.>
+
+  SemanticsOf semantics() default SemanticsOf.NOT_SPECIFIED; // <.>
+
+  Class<?> typeOf() default Object.class; // <.>
+
+  String fileAccept() default ""; // <.>
+}
+----
+
+<.> `[teal]#*_associateWith_*#` : `String`
++
+--
+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()_ .
+
+For example@Action(associateWith="items", associateWithSequence="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).
+--
+<.> `[teal]#*_associateWithSequence_*#` : `String`
++
+--
+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")
+--
+<.> `[teal]#*_commandDtoProcessor_*#` : `Class<? extends CommandDtoProcessor>`
++
+--
+The xref:system:generated:index/CommandDtoProcessor.adoc[CommandDtoProcessor] to process this command's DTO.
+
+The processor itself is used by xref:system:generated:index/ContentMappingServiceForCommandDto.adoc[ContentMappingServiceForCommandDto] and xref:system:generated:index/ContentMappingServiceForCommandsDto.adoc[ContentMappingServiceForCommandsDto] to dynamically transform the DTOs.
+--
+<.> `[teal]#*_commandPublishing_*#` : `xref:system:generated:index/Publishing.adoc[Publishing]`
++
+--
+Whether action invocations, captured as xref:system:generated:index/Command.adoc[Command] s, should be published to xref:system:generated:index/CommandSubscriber.adoc[CommandSubscriber] s.
+--
+<.> `[teal]#*_domainEvent_*#` : `Class<? extends ActionDomainEvent<?>>`
++
+--
+Indicates that an invocation of the action should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.domain.ActionDomainEvent_ .
+
+For example:public class SomeObject{ public static class ChangeStartDateDomainEvent extends ActionDomainEvent<SomeObject> { ... } @Action(domainEvent=ChangedStartDateDomainEvent.class) public void changeStartDate(final Date startDate) { ...} ... }
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_executionPublishing_*#` : `xref:system:generated:index/Publishing.adoc[Publishing]`
++
+--
+Whether _Interaction.Execution_ s (triggered by action invocations), should be published to xref:system:generated:index/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
+--
+<.> `[teal]#*_hidden_*#` : `xref:system:generated:index/Where.adoc[Where]`
++
+--
+Indicates where (in the UI) the action is not visible to the user.
+
+It is also possible to suppress an action's visibility using _ActionLayout#hidden()_ .
+
+For _DomainService domain service_ actions, the action's visibility is dependent upon its _DomainService#nature() nature_ and for contributed actions on how it is _ActionLayout#contributed()_ .
+--
+<.> `[teal]#*_restrictTo_*#` : `xref:system:generated:index/RestrictTo.adoc[RestrictTo]`
++
+--
+Whether the action is restricted to prototyping.
+
+By default there are no restrictions, with the action being available in all environments.
+--
+<.> `[teal]#*_semantics_*#` : `xref:system:generated:index/SemanticsOf.adoc[SemanticsOf]`
++
+--
+The action semantics, either _SemanticsOf#SAFE_AND_REQUEST_CACHEABLE cached_ , _SemanticsOf#SAFE safe_ (query-only), _SemanticsOf#IDEMPOTENT idempotent_ or _SemanticsOf#NON_IDEMPOTENT non-idempotent_ .
+--
+<.> `[teal]#*_typeOf_*#` : `Class<?>`
++
+--
+The type-of the elements returned by the action.
+--
+<.> `[teal]#*_fileAccept_*#` : `String`
++
+--
+For downloading _Blob_ or _Clob_ , optionally restrict the files accepted (eg `.xslx` ).
+
+The value should be of the form "file_extension|audio/*|video/*|image/*|media_type".
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ActionLayout.adoc b/antora/components/system/modules/generated/pages/index/ActionLayout.adoc
new file mode 100644
index 0000000..b677b29
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/ActionLayout.adoc
@@ -0,0 +1,89 @@
+= ActionLayout : _annotation_
+: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 [...]
+
+Layout hints for actions.
+
+.Java Sources
+[source,java]
+----
+@interface ActionLayout {
+
+  BookmarkPolicy bookmarking() default BookmarkPolicy.NOT_SPECIFIED; // <.>
+
+  String cssClass() default ""; // <.>
+
+  String cssClassFa() default ""; // <.>
+
+  CssClassFaPosition cssClassFaPosition() default CssClassFaPosition.LEFT; // <.>
+
+  String describedAs() default ""; // <.>
+
+  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; // <.>
+}
+----
+
+<.> `[teal]#*_bookmarking_*#` : `xref:system:generated:index/BookmarkPolicy.adoc[BookmarkPolicy]`
++
+--
+Whether (and how) this action can be bookmarked in the UI.
+
+For bookmarkable actions, either _org.apache.isis.applib.annotation.BookmarkPolicy#AS_ROOT_ and _org.apache.isis.applib.annotation.BookmarkPolicy#AS_CHILD_ can be used (they are treated identically).
+--
+<.> `[teal]#*_cssClass_*#` : `String`
++
+--
+Indicates the css class that an action should have.
+
+For the Wicket viewer, this can be a bootstrap class such asbtn-info.
+--
+<.> `[teal]#*_cssClassFa_*#` : `String`
++
+--
+Indicates theFont AwesomeCSS class to decorate an action (button or menu item).
+--
+<.> `[teal]#*_cssClassFaPosition_*#` : `CssClassFaPosition`
++
+--
+Indicates the position of theFont Awesomeicon. The icon could be rendered on the left or the right of the action button
+--
+<.> `[teal]#*_describedAs_*#` : `String`
++
+--
+Description of this action, eg to be rendered in a tooltip.
+--
+<.> `[teal]#*_hidden_*#` : `xref:system:generated:index/Where.adoc[Where]`
++
+--
+Indicates where in the UI the action should _not_ not be visible.
+--
+<.> `[teal]#*_named_*#` : `String`
++
+--
+Name of this action (overriding the name derived from its name in code).
+--
+<.> `[teal]#*_position_*#` : `Position`
++
+--
+For actions that are associated with a property, indicates the positioning of the action's button relative to the property.
+
+Ignored if the action has not been associated with a property.
+--
+<.> `[teal]#*_promptStyle_*#` : `xref:system:generated:index/PromptStyle.adoc[PromptStyle]`
++
+--
+How this parameters for this action are prompted, either _PromptStyle#DIALOG dialog_ or _PromptStyle#INLINE inline_ .
+--
+<.> `[teal]#*_redirectPolicy_*#` : `xref:system:generated:index/Redirect.adoc[Redirect]`
++
+--
+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).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/BeanSort.adoc b/antora/components/system/modules/generated/pages/index/BeanSort.adoc
index 627256b..1c1500d 100644
--- a/antora/components/system/modules/generated/pages/index/BeanSort.adoc
+++ b/antora/components/system/modules/generated/pages/index/BeanSort.adoc
@@ -8,55 +8,21 @@ Top level object classification.
 ----
 enum BeanSort {
 
-  /**
- * Stateful object, with a state that can be marshaled and unmarshaled.
- * <p>
- * Includes classes annotated with {@code @DomainObject}, when *not* associated
- * with a persistence layer. <p>  see also {@link #ENTITY}
- */
-VIEW_MODEL // <.>
-
-  /**
- * Persistable object, associated with a persistence layer/context.
- * <p>
- * Includes classes annotated with {@code @DomainObject}, when associated
- * with a persistence layer. <p>  see also {@link #VIEW_MODEL}
- */
-ENTITY_JDO // <.>
+  VIEW_MODEL // <.>
+
+  ENTITY_JDO // <.>
 
   ENTITY_JPA
 
-  /**
- * Injectable object, associated with a lifecycle context
- * (application-scoped, request-scoped, ...).
- * <p>
- * to be introspected: YES
- */
-MANAGED_BEAN_CONTRIBUTING // <.>
-
-  /**
- * Injectable object, associated with a lifecycle context
- * (application-scoped, request-scoped, ...).
- * <p>
- * to be introspected: NO
- */
-MANAGED_BEAN_NOT_CONTRIBUTING // <.>
-
-  /**
- * Object associated with an 'entity' or 'bean' to act as contributer of
- * domain actions or properties. Might also be stateful similar to VIEW_MODEL.
- */
-MIXIN // <.>
-
-  /**
- * Immutable, serializable object.
- */
-VALUE // <.>
-
-  /**
- * Container of objects.
- */
-COLLECTION // <.>
+  MANAGED_BEAN_CONTRIBUTING // <.>
+
+  MANAGED_BEAN_NOT_CONTRIBUTING // <.>
+
+  MIXIN // <.>
+
+  VALUE // <.>
+
+  COLLECTION // <.>
 
   UNKNOWN
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/BookmarkPolicy.adoc
similarity index 57%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/BookmarkPolicy.adoc
index 7f4509f..a76fae4 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/BookmarkPolicy.adoc
@@ -1,16 +1,39 @@
-= UserDataKeys : _class_
+= BookmarkPolicy : _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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
-
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
+enum BookmarkPolicy {
+
+  AS_ROOT // <.>
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  AS_CHILD // <.>
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  NEVER // <.>
+
+  NOT_SPECIFIED // <.>
 }
 ----
 
+<.> `[teal]#*_AS_ROOT_*#`
++
+--
+Can be bookmarked, and is a top-level 'root' (or parent) bookmark.
+--
+<.> `[teal]#*_AS_CHILD_*#`
++
+--
+Can be bookmarked, but only as a child or some other parent/root bookmark
+--
+<.> `[teal]#*_NEVER_*#`
++
+--
+An unimportant entity that should never be bookmarked.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/Bounding.adoc
similarity index 84%
copy from antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
copy to antora/components/system/modules/generated/pages/index/Bounding.adoc
index f820935..c646d9f 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/Bounding.adoc
@@ -1,14 +1,18 @@
-= HomePageResolverService : _interface_
+= Bounding : _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 [...]
 
-Returns a view model annotated with _HomePage_ .
+Whether the set of instances of a domain object is bounded or not.
 
 .Java Sources
 [source,java]
 ----
-interface HomePageResolverService {
+enum Bounding {
 
-  Object getHomePage()
+  BOUNDED
+
+  UNBOUNDED
+
+  NOT_SPECIFIED
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/Collection.adoc b/antora/components/system/modules/generated/pages/index/Collection.adoc
new file mode 100644
index 0000000..d5745c2
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Collection.adoc
@@ -0,0 +1,54 @@
+= Collection : _annotation_
+: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 [...]
+
+Domain semantics for domain object collection.
+
+.Java Sources
+[source,java]
+----
+@interface Collection {
+
+  Class<? extends CollectionDomainEvent<?, ?>> domainEvent() default CollectionDomainEvent.Default.class; // <.>
+
+  Editing editing() default Editing.NOT_SPECIFIED; // <.>
+
+  String editingDisabledReason() default ""; // <.>
+
+  Where hidden() default Where.NOT_SPECIFIED; // <.>
+
+  Class<?> typeOf() default Object.class; // <.>
+}
+----
+
+<.> `[teal]#*_domainEvent_*#` : `Class<? extends CollectionDomainEvent<?,?>>`
++
+--
+Indicates that changes to the collection that should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.domain.CollectionDomainEvent_ .
+
+For example:public class Order { public static class OrderLineItems extends CollectionDomainEvent { ... } @CollectionInteraction(OrderLineItems.class) public SortedSet<OrderLine> getLineItems() { ...} }
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_editing_*#` : `xref:system:generated:index/Editing.adoc[Editing]`
++
+--
+Whether the properties of this domain object can be edited, or collections of this object be added to/removed from.
+
+Note that non-editable objects can nevertheless have actions invoked upon them.
+--
+<.> `[teal]#*_editingDisabledReason_*#` : `String`
++
+--
+If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the user as to why this property cannot be edited.
+--
+<.> `[teal]#*_hidden_*#` : `xref:system:generated:index/Where.adoc[Where]`
++
+--
+Indicates when the collection is not visible to the user.
+--
+<.> `[teal]#*_typeOf_*#` : `Class<?>`
++
+--
+The type-of the elements held within the collection.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/CollectionLayout.adoc b/antora/components/system/modules/generated/pages/index/CollectionLayout.adoc
new file mode 100644
index 0000000..b6bd06f
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/CollectionLayout.adoc
@@ -0,0 +1,84 @@
+= CollectionLayout : _annotation_
+: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 [...]
+
+Layout hints for collections.
+
+.Java Sources
+[source,java]
+----
+@interface CollectionLayout {
+
+  String cssClass() default ""; // <.>
+
+  String defaultView() default ""; // <.>
+
+  String describedAs() default ""; // <.>
+
+  Where hidden() default Where.NOT_SPECIFIED; // <.>
+
+  String named() default ""; // <.>
+
+  boolean namedEscaped() default true; // <.>
+
+  int paged() default -1; // <.>
+
+  @SuppressWarnings("rawtypes")
+Class sortedBy() default Comparator.class; // <.>
+}
+----
+
+<.> `[teal]#*_cssClass_*#` : `String`
++
+--
+Indicates the css class that a collection should have.
+--
+<.> `[teal]#*_defaultView_*#` : `String`
++
+--
+Indicates which view is used by default to render the collection.
+
+The only view available within the core framework is "table". However, other views can be added as extensions. Examples are those provided by the (non-ASF)Isis addons, eg "excel", "calendar" and "map".
+--
+<.> `[teal]#*_describedAs_*#` : `String`
++
+--
+Description of this collection, eg to be rendered in a tooltip.
+--
+<.> `[teal]#*_hidden_*#` : `xref:system:generated:index/Where.adoc[Where]`
++
+--
+Indicates where in the UI the collection should _not_ not be visible.
+
+Only _Where#NOWHERE NOWHERE_ or _Where#EVERYWHERE EVERYWHERE_ / _Where#ANYWHERE ANYWHERE_ apply for collections.
+--
+<.> `[teal]#*_named_*#` : `String`
++
+--
+Name of this collection (overriding the name derived from its name in code).
+--
+<.> `[teal]#*_namedEscaped_*#` : `boolean`
++
+--
+A flag indicating whether the value of _#named()_ should be HTML escaped or not.
+--
+<.> `[teal]#*_paged_*#` : `int`
++
+--
+The page size for instances of this class when rendered within a table.
+
+If annotated on a collection, then the page size refers to parented collections (eg `Order#lineItems` ).
+
+If annotated on a type, then the page size refers to standalone collections (eg as returned from a repository query).
+--
+<.> `[teal]#*_sortedBy_*#` : `Class`
++
+--
+Indicates that the elements in a ( _java.util.SortedSet_ ) collection should be sorted according to a different order than the natural sort order, as defined by the specified _java.util.Comparator_ .
+
+Whenever there is a collection of type _java.util.SortedSet_ , the domain entity referenced is expected to implement _Comparable_ , ie to have a natural ordering. In effect tis means that all domain entities should provide a natural ordering.
+
+However, in some circumstances the ordering of collection may be different to the entity's natural ordering. For example, the entity may represent an interval of time sorted by its _startDate_ ascending, but the collection may wish to sort by _startDate_ .
+
+The purpose of this annotation is to provide a _java.util.Comparator_ such that the collection may be sorted in an order more suitable to the context.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/CommandOutcomeHandler.adoc b/antora/components/system/modules/generated/pages/index/CommandOutcomeHandler.adoc
index 0c550dc..72eed33 100644
--- a/antora/components/system/modules/generated/pages/index/CommandOutcomeHandler.adoc
+++ b/antora/components/system/modules/generated/pages/index/CommandOutcomeHandler.adoc
@@ -6,29 +6,7 @@
 ----
 interface CommandOutcomeHandler {
 
-  CommandOutcomeHandler NULL = new CommandOutcomeHandler() {
-
-    @Override
-    public Timestamp getStartedAt() {
-        return null;
-    }
-
-    @Override
-    public void setStartedAt(Timestamp startedAt) {
-    }
-
-    @Override
-    public void setCompletedAt(Timestamp completedAt) {
-    }
-
-    @Override
-    public void setResult(Bookmark resultBookmark) {
-    }
-
-    @Override
-    public void setException(Throwable throwable) {
-    }
-};
+  CommandOutcomeHandler NULL;
 
   Timestamp getStartedAt()
 
diff --git a/antora/components/system/modules/generated/pages/index/Defaulted.adoc b/antora/components/system/modules/generated/pages/index/Defaulted.adoc
new file mode 100644
index 0000000..7c3ef5c
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Defaulted.adoc
@@ -0,0 +1,35 @@
+= Defaulted : _annotation_
+: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 that the class should have a default, by providing a link to a _DefaultsProvider_ , or some externally-configured mechanism.
+
+This possibly seems a little tortuous. The more obvious means to provide a default would seem to be a simple `@DefaultsTo(new SomeObject())` . However, Java only allows primitives, strings and class literals to be used in annotations. We therefore need delegate to an external implementation. (This more complex design is also more flexible of course; the implementation of _DefaultsProvider_ could adjust the default it provides according to circumstance, for example).
+
+.Java Sources
+[source,java]
+----
+@interface Defaulted {
+
+  String defaultsProviderName() default ""; // <.>
+
+  Class<?> defaultsProviderClass() default Defaulted.class; // <.>
+}
+----
+
+<.> `[teal]#*_defaultsProviderName_*#` : `String`
++
+--
+The fully qualified name of a class that implements the _DefaultsProvider_ interface.
+
+This is optional because some implementations may pick up the defaults provider via a configuration file, or via the equivalent _#defaultsProviderClass()_ .
+
+Implementation note: the default value provided here is simply an empty string because `null` is not a valid default.
+--
+<.> `[teal]#*_defaultsProviderClass_*#` : `Class<?>`
++
+--
+As per _#defaultsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
+
+Implementation note: the default value provided here is simply the xref:system:generated:index/Defaulted.adoc[Defaulted] 's own class, because `null` is not a valid default.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/DomainObject.adoc b/antora/components/system/modules/generated/pages/index/DomainObject.adoc
new file mode 100644
index 0000000..2588f7e
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/DomainObject.adoc
@@ -0,0 +1,188 @@
+= DomainObject : _annotation_
+: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 [...]
+
+Domain semantics for domain objects (entities and view models; for services see _org.apache.isis.applib.annotation.DomainService_ ).
+
+.Java Sources
+[source,java]
+----
+@interface DomainObject {
+
+  Class<?> autoCompleteRepository() default Object.class; // <.>
+
+  String autoCompleteAction() default "autoComplete"; // <.>
+
+  Bounding bounding() default Bounding.NOT_SPECIFIED; // <.>
+
+  Editing editing() default Editing.NOT_SPECIFIED; // <.>
+
+  String editingDisabledReason() default "Disabled"; // <.>
+
+  Publishing entityChangePublishing() default Publishing.NOT_SPECIFIED; // <.>
+
+  String mixinMethod() default "$$"; // <.>
+
+  Nature nature() default Nature.NOT_SPECIFIED; // <.>
+
+  String objectType() default ""; // <.>
+
+  Class<? extends ObjectCreatedEvent<?>> createdLifecycleEvent() default ObjectCreatedEvent.Default.class; // <.>
+
+  Class<? extends ObjectPersistingEvent<?>> persistingLifecycleEvent() default ObjectPersistingEvent.Default.class; // <.>
+
+  Class<? extends ObjectPersistedEvent<?>> persistedLifecycleEvent() default ObjectPersistedEvent.Default.class; // <.>
+
+  Class<? extends ObjectLoadedEvent<?>> loadedLifecycleEvent() default ObjectLoadedEvent.Default.class; // <.>
+
+  Class<? extends ObjectUpdatingEvent<?>> updatingLifecycleEvent() default ObjectUpdatingEvent.Default.class; // <.>
+
+  Class<? extends ObjectUpdatedEvent<?>> updatedLifecycleEvent() default ObjectUpdatedEvent.Default.class; // <.>
+
+  Class<? extends ObjectRemovingEvent<?>> removingLifecycleEvent() default ObjectRemovingEvent.Default.class; // <.>
+
+  Class<? extends ActionDomainEvent<?>> actionDomainEvent() default ActionDomainEvent.Default.class; // <.>
+
+  Class<? extends PropertyDomainEvent<?, ?>> propertyDomainEvent() default PropertyDomainEvent.Default.class; // <.>
+
+  Class<? extends CollectionDomainEvent<?, ?>> collectionDomainEvent() default CollectionDomainEvent.Default.class; // <.>
+}
+----
+
+<.> `[teal]#*_autoCompleteRepository_*#` : `Class<?>`
++
+--
+The class of the domain service that provides anautoComplete(String)method.
+
+It is sufficient to specify an interface rather than a concrete type.
+--
+<.> `[teal]#*_autoCompleteAction_*#` : `String`
++
+--
+The method (despite its name, not necessarily an action) to use in order to perform the auto-complete search (defaults to "autoComplete").
+
+The method is required to accept a single string parameter, and must return a list of the domain type.
+--
+<.> `[teal]#*_bounding_*#` : `xref:system:generated:index/Bounding.adoc[Bounding]`
++
+--
+Indicates that the class has a bounded, or finite, set of instances.
+
+Takes precedence over auto-complete.
+
+Note: this replaces bounded=true|false prior to v2.x
+--
+<.> `[teal]#*_editing_*#` : `xref:system:generated:index/Editing.adoc[Editing]`
++
+--
+Whether the properties of this domain object can be edited, or collections of this object be added to/removed from.
+
+Note that non-editable objects can nevertheless have actions invoked upon them.
+--
+<.> `[teal]#*_editingDisabledReason_*#` : `String`
++
+--
+If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the user as to why the object's properties cannot be edited/collections modified.
+--
+<.> `[teal]#*_entityChangePublishing_*#` : `xref:system:generated:index/Publishing.adoc[Publishing]`
++
+--
+Whether entity changes should be published to _org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber_ s and whether entity changes, captured as _org.apache.isis.applib.services.publishing.spi.EntityChanges_ , should be dispatched to _org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber_ s.
+--
+<.> `[teal]#*_mixinMethod_*#` : `String`
++
+--
+Equivalent to _Mixin#method()_ .
+
+Applicable only if _#nature()_ is _Nature#MIXIN_ .
+--
+<.> `[teal]#*_nature_*#` : `xref:system:generated:index/Nature.adoc[Nature]`
++
+--
+The nature of this domain object.
+--
+<.> `[teal]#*_objectType_*#` : `String`
++
+--
+Provides a unique abbreviation for the object type, eg "customer.Customer" for Customer.
+
+This value, if specified, is used in the serialized form of the object's OID. An OID is used by the framework to unique identify an object over time (same concept as a URN).
+--
+<.> `[teal]#*_createdLifecycleEvent_*#` : `Class<? extends ObjectCreatedEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_persistingLifecycleEvent_*#` : `Class<? extends ObjectPersistingEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_persistedLifecycleEvent_*#` : `Class<? extends ObjectPersistedEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_loadedLifecycleEvent_*#` : `Class<? extends ObjectLoadedEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_updatingLifecycleEvent_*#` : `Class<? extends ObjectUpdatingEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_updatedLifecycleEvent_*#` : `Class<? extends ObjectUpdatedEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_removingLifecycleEvent_*#` : `Class<? extends ObjectRemovingEvent<?>>`
++
+--
+Indicates that the loading of the domain object should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent_ .
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_actionDomainEvent_*#` : `Class<? extends ActionDomainEvent<?>>`
++
+--
+Indicates that an invocation of _any_ action of the domain object (that do not themselves specify their own `@Action(domainEvent=...)` should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using the specified custom (subclass of) _ActionDomainEvent_ .
+
+For example:@DomainObject(actionDomainEvent=SomeObject.GenericActionDomainEvent.class) public class SomeObject{ public static class GenericActionDomainEvent extends ActionDomainEvent<Object> { ... } public void changeStartDate(final Date startDate) { ...} ... }
+
+This will result in all actions as a more specific type to use) to emit this event.
+
+This subclass must provide a no-arg constructor; the fields are set reflectively. It must also use `Object` as its generic type. This is to allow mixins to also emit the same event.
+--
+<.> `[teal]#*_propertyDomainEvent_*#` : `Class<? extends PropertyDomainEvent<?,?>>`
++
+--
+Indicates that changes to _any_ property of the domain object (that do not themselves specify their own `@Property(domainEvent=...)` should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using the specified custom (subclass of) _PropertyDomainEvent_ .
+
+For example:@DomainObject(propertyDomainEvent=SomeObject.GenericPropertyDomainEvent.class) public class SomeObject{ public LocalDate getStartDate() { ...} }
+
+This subclass must provide a no-arg constructor; the fields are set reflectively. It must also use `Object` as its generic type. This is to allow mixins to also emit the same event.
+--
+<.> `[teal]#*_collectionDomainEvent_*#` : `Class<? extends CollectionDomainEvent<?,?>>`
++
+--
+Indicates that changes to _any_ collection of the domain object (that do not themselves specify their own `@Collection(domainEvent=...)` should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _CollectionDomainEvent_ .
+
+For example:@DomainObject(collectionDomainEvent=Order.GenericCollectionDomainEvent.class) public class Order { public SortedSet<OrderLine> getLineItems() { ...} }
+
+This subclass must provide a no-arg constructor; the fields are set reflectively. It must also use `Object` as its generic type. This is to allow mixins to also emit the same event.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/DomainObjectLayout.adoc b/antora/components/system/modules/generated/pages/index/DomainObjectLayout.adoc
new file mode 100644
index 0000000..3f52f60
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/DomainObjectLayout.adoc
@@ -0,0 +1,111 @@
+= DomainObjectLayout : _annotation_
+: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 [...]
+
+Layout hints for domain objects.
+
+.Java Sources
+[source,java]
+----
+@interface DomainObjectLayout {
+
+  BookmarkPolicy bookmarking() default BookmarkPolicy.NOT_SPECIFIED; // <.>
+
+  String cssClass() default ""; // <.>
+
+  String cssClassFa() default ""; // <.>
+
+  CssClassFaPosition cssClassFaPosition() default CssClassFaPosition.LEFT; // <.>
+
+  String describedAs() default ""; // <.>
+
+  String named() default ""; // <.>
+
+  int paged() default -1; // <.>
+
+  String plural() default ""; // <.>
+
+  Class<? extends CssClassUiEvent<?>> cssClassUiEvent() default CssClassUiEvent.Default.class; // <.>
+
+  Class<? extends IconUiEvent<?>> iconUiEvent() default IconUiEvent.Default.class; // <.>
+
+  Class<? extends LayoutUiEvent<?>> layoutUiEvent() default LayoutUiEvent.Default.class; // <.>
+
+  Class<? extends TitleUiEvent<?>> titleUiEvent() default TitleUiEvent.Default.class; // <.>
+}
+----
+
+<.> `[teal]#*_bookmarking_*#` : `xref:system:generated:index/BookmarkPolicy.adoc[BookmarkPolicy]`
++
+--
+Whether (and how) this domain object can be bookmarked in the UI.
+--
+<.> `[teal]#*_cssClass_*#` : `String`
++
+--
+Indicates the css class that a domain class (type) should have.
+--
+<.> `[teal]#*_cssClassFa_*#` : `String`
++
+--
+Indicates theFont AwesomeCSS class to decorate an domain object.
+--
+<.> `[teal]#*_cssClassFaPosition_*#` : `CssClassFaPosition`
++
+--
+Indicates the position of theFont Awesomeicon. The icon could be rendered on the left or the right of the object's title.
+
+This attribute is currently ignored by Isis viewers.
+--
+<.> `[teal]#*_describedAs_*#` : `String`
++
+--
+Description of this class, eg to be rendered in a tooltip.
+--
+<.> `[teal]#*_named_*#` : `String`
++
+--
+Name of this class (overriding the name derived from its name in code).
+--
+<.> `[teal]#*_paged_*#` : `int`
++
+--
+The page size for instances of this class when rendered within a table.
+
+If annotated on a collection, then the page size refers to parented collections (eg `Order#lineItems` ).
+
+If annotated on a type, then the page size refers to standalone collections (eg as returned from a repository query).
+--
+<.> `[teal]#*_plural_*#` : `String`
++
+--
+The plural name of the class.
+--
+<.> `[teal]#*_cssClassUiEvent_*#` : `Class<? extends CssClassUiEvent<?>>`
++
+--
+Which subclass of _CssClassUiEvent_ should be used to obtain a CSS class.
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_iconUiEvent_*#` : `Class<? extends IconUiEvent<?>>`
++
+--
+Which subclass of _IconUiEvent_ should be used to obtain an icon.
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_layoutUiEvent_*#` : `Class<? extends LayoutUiEvent<?>>`
++
+--
+Which subclass of _LayoutUiEvent_ should be used to obtain a layout.
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_titleUiEvent_*#` : `Class<? extends TitleUiEvent<?>>`
++
+--
+Which subclass of _TitleUiEvent_ should be used to obtain a title.
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/DomainService.adoc
similarity index 52%
copy from antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
copy to antora/components/system/modules/generated/pages/index/DomainService.adoc
index f9eaf00..044c6fb 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/DomainService.adoc
@@ -1,38 +1,31 @@
-= ExecutionMode : _enum_
+= DomainService : _annotation_
 :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 [...]
 
-Whether interactions with the wrapper are actually passed onto the underlying domain object.
+Indicates that the class should be automatically recognized as a domain service.
+
+Also indicates whether the domain service acts as a repository for an entity, and menu ordering UI hints.
 
 .Java Sources
 [source,java]
 ----
-enum ExecutionMode {
-
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
-
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+@interface DomainService {
+
+  NatureOfService nature() default NatureOfService.VIEW; // <.>
+
+  String objectType() default ""; // <.>
 }
 ----
 
-<.> `[teal]#*_SKIP_RULE_VALIDATION_*#`
+<.> `[teal]#*_nature_*#` : `xref:system:generated:index/NatureOfService.adoc[NatureOfService]`
 +
 --
-Skip all business rules.
+The nature of this service, eg for menus, contributed actions, repository.
 --
-<.> `[teal]#*_SKIP_EXECUTION_*#`
+<.> `[teal]#*_objectType_*#` : `String`
 +
 --
-Skip actual execution.
+Provides the (first part of the) unique identifier (OID) for the service (the instanceId is always "1").
 
-This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, ImmutableEnumSet)_ .
+If not specified then either the optional "getId()" is used, otherwise the class' name.
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/DomainServiceLayout.adoc
similarity index 62%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/DomainServiceLayout.adoc
index 7f4509f..d0ffa00 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/DomainServiceLayout.adoc
@@ -1,16 +1,29 @@
-= UserDataKeys : _class_
+= DomainServiceLayout : _annotation_
 :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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+Layout hints for domain services.
+
+Also indicates the name, and menu ordering UI hints.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
+@interface DomainServiceLayout {
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  MenuBar menuBar() default MenuBar.NOT_SPECIFIED; // <.>
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  String named() default ""; // <.>
 }
 ----
 
+<.> `[teal]#*_menuBar_*#` : `MenuBar`
++
+--
+The menubar in which the menu that holds this service's actions should reside.
+--
+<.> `[teal]#*_named_*#` : `String`
++
+--
+Name of this class (overriding the name derived from its name in code).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/Editing.adoc
similarity index 52%
copy from antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
copy to antora/components/system/modules/generated/pages/index/Editing.adoc
index f9eaf00..e2c65a4 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/Editing.adoc
@@ -1,38 +1,43 @@
-= ExecutionMode : _enum_
+= Editing : _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 [...]
 
-Whether interactions with the wrapper are actually passed onto the underlying domain object.
+The available policies for editing properties and collections.
 
 .Java Sources
 [source,java]
 ----
-enum ExecutionMode {
-
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
-
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+enum Editing {
+
+  AS_CONFIGURED // <.>
+
+  ENABLED // <.>
+
+  DISABLED // <.>
+
+  NOT_SPECIFIED // <.>
 }
 ----
 
-<.> `[teal]#*_SKIP_RULE_VALIDATION_*#`
+<.> `[teal]#*_AS_CONFIGURED_*#`
 +
 --
-Skip all business rules.
+The editing of the object should be as per the default editing policy configured in `application.properties` .
+
+If no editing policy is configured, then the editing is enabled.
 --
-<.> `[teal]#*_SKIP_EXECUTION_*#`
+<.> `[teal]#*_ENABLED_*#`
 +
 --
-Skip actual execution.
-
-This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, ImmutableEnumSet)_ .
+Audit changes to this object.
+--
+<.> `[teal]#*_DISABLED_*#`
++
+--
+Do not allow the properties to be edited, or the collections to be added to/removed from.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/EntityChangeKind.adoc
similarity index 84%
copy from antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
copy to antora/components/system/modules/generated/pages/index/EntityChangeKind.adoc
index f820935..8545945 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/EntityChangeKind.adoc
@@ -1,14 +1,16 @@
-= HomePageResolverService : _interface_
+= EntityChangeKind : _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 [...]
 
-Returns a view model annotated with _HomePage_ .
-
 .Java Sources
 [source,java]
 ----
-interface HomePageResolverService {
+enum EntityChangeKind {
+
+  CREATE
+
+  UPDATE
 
-  Object getHomePage()
+  DELETE
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/EqualByContent.adoc b/antora/components/system/modules/generated/pages/index/EqualByContent.adoc
new file mode 100644
index 0000000..c47db6a
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/EqualByContent.adoc
@@ -0,0 +1,18 @@
+= EqualByContent : _annotation_
+: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 that the class follows the equal-by-content contract, usually associated with _Value value_ types.
+
+If a class claims to be equal-by-content then its _#equals(Object)_ should return `true` if its content (as opposed to identity) is the same. For example, _String_ , _BigDecimal_ and _Date_ follow this contract.
+
+Note also that the Java Language Specification requires that two objects that are _#equals(Object) equal_ must return the same value from _#hashCode()_ . Failure to do this means that that the object will not behave correctly when used as a key into a hashing structure (eg a _HashMap_ ).
+
+By default any _Value value_ types are assumed to follow the equal-by-content rule, though this can be overridden if required. Value types are usually also immutable (though there are some classic exceptions to this, such as _Date_ ).
+
+.Java Sources
+[source,java]
+----
+@interface EqualByContent {
+}
+----
+
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
index f9eaf00..437e5bd 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
@@ -8,18 +8,9 @@ Whether interactions with the wrapper are actually passed onto the underlying do
 ----
 enum ExecutionMode {
 
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
+  SKIP_RULE_VALIDATION // <.>
 
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+  SKIP_EXECUTION // <.>
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/Facets.adoc b/antora/components/system/modules/generated/pages/index/Facets.adoc
new file mode 100644
index 0000000..86165a5
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Facets.adoc
@@ -0,0 +1,33 @@
+= Facets : _annotation_
+: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 that the class has additional facets, and specifies the how to obtain the `FacetFactory` to manufacture them.
+
+At least one named factory (as per _#facetFactoryNames()_ ) or one class factory (as per _#facetFactoryClasses()_ ) should be specified.
+
+.Java Sources
+[source,java]
+----
+@interface Facets {
+
+  String[] facetFactoryNames() default {}; // <.>
+
+  Class<?>[] facetFactoryClasses() default {}; // <.>
+}
+----
+
+<.> `[teal]#*_facetFactoryNames_*#` : `String[]`
++
+--
+Array of fully qualified names of classes each implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
+
+Either the array provided by this method or by _#facetFactoryClasses()_ should be non-empty.
+--
+<.> `[teal]#*_facetFactoryClasses_*#` : `Class<?>[]`
++
+--
+Array of _Class_ s, each indicating a class implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
+
+Either the array provided by this method or by _#facetFactoryNames()_ should be non-empty.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/GridService.adoc b/antora/components/system/modules/generated/pages/index/GridService.adoc
index 1992705..deb3eef 100644
--- a/antora/components/system/modules/generated/pages/index/GridService.adoc
+++ b/antora/components/system/modules/generated/pages/index/GridService.adoc
@@ -61,20 +61,20 @@ Returns a default grid; eg where none can be loaded using _#load(Class)_ .
 --
 Returns a normalized grid for the domain class obtained previously using _#load(Class)_ .
 
-If a "normalized" grid is persisted as thelayout.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 ( _DomainObjectLayout_ , _ActionLayout_ , _PropertyLayout_ and _CollectionLayout_ ) (if present) will continue to be used to provide additional layout metadata. Of course, there is nothing to prevent the developer from extending the  [...]
+If a "normalized" grid is persisted as thelayout.xml, then the expectation is that the xref:system:generated:index/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:system:generated:index/DomainObjectLayout.adoc[DomainObjectLayout] , xref:system:generated:index/ActionLayout.adoc[ActionLayout] , xref:system:generated:index/PropertyLayout.adoc[Pro [...]
 --
 <.> `[teal]#*complete*#(Grid grid)` : `Grid`
 +
 --
-Modifies the provided _Grid_ with additional metadata, broadly speaking corresponding to the _DomainObjectLayout_ , _ActionLayout_ , _PropertyLayout_ and _CollectionLayout_ .
+Modifies the provided _Grid_ with additional metadata, broadly speaking corresponding to the xref:system:generated:index/DomainObjectLayout.adoc[DomainObjectLayout] , xref:system:generated:index/ActionLayout.adoc[ActionLayout] , xref:system:generated:index/PropertyLayout.adoc[PropertyLayout] and xref:system:generated:index/CollectionLayout.adoc[CollectionLayout] .
 
-If a "completed" grid is persisted as thelayout.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.
+If a "completed" grid is persisted as thelayout.xml, then there should be no need for any of the layout annotations, nor the xref:system:generated:index/MemberOrder.adoc[MemberOrder] annotations, to be required in the domain class itself.
 --
 <.> `[teal]#*minimal*#(Grid grid)` : `Grid`
 +
 --
 Modifies the provided _Grid_ , removing all metadata except the basic grid structure.
 
-If a "minimal" grid is persisted as thelayout.xml, then the expectation is that most of the layout annotations ( _DomainObjectLayout_ , _ActionLayout_ , _PropertyLayout_ , _CollectionLayout_ , but also _MemberOrder_ ) will still be retained in the domain class code.
+If a "minimal" grid is persisted as thelayout.xml, then the expectation is that most of the layout annotations ( xref:system:generated:index/DomainObjectLayout.adoc[DomainObjectLayout] , xref:system:generated:index/ActionLayout.adoc[ActionLayout] , xref:system:generated:index/PropertyLayout.adoc[PropertyLayout] , xref:system:generated:index/CollectionLayout.adoc[CollectionLayout] , but also xref:system:generated:index/MemberOrder.adoc[MemberOrder] ) will still be retained in the domain c [...]
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/HomePage.adoc
similarity index 69%
copy from antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
copy to antora/components/system/modules/generated/pages/index/HomePage.adoc
index f820935..82cd532 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/HomePage.adoc
@@ -1,14 +1,14 @@
-= HomePageResolverService : _interface_
+= HomePage : _annotation_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Returns a view model annotated with _HomePage_ .
+Annotated on a view model to indicate that it should be used as the home page.
+
+The view model is instantiated through a no-arg constructor, so must in effect be stateless. Typically it will use injected repositories in order to display a dashboard, and offer actions to traverse or operate on the rendered state.
 
 .Java Sources
 [source,java]
 ----
-interface HomePageResolverService {
-
-  Object getHomePage()
+@interface HomePage {
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
index f820935..9784988 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
@@ -1,7 +1,7 @@
 = HomePageResolverService : _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 [...]
 
-Returns a view model annotated with _HomePage_ .
+Returns a view model annotated with xref:system:generated:index/HomePage.adoc[HomePage] .
 
 .Java Sources
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/IsisInteractionScope.adoc
similarity index 64%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/IsisInteractionScope.adoc
index 7f4509f..c9644f5 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/IsisInteractionScope.adoc
@@ -1,16 +1,16 @@
-= UserDataKeys : _class_
+= IsisInteractionScope : _annotation_
 :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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+_@IsisInteractionScope_ is a specialization of _Scope @Scope_ for a component whose lifecycle is bound to the current top-level IsisInteraction.
+
+Specifically, _@IsisInteractionScope_ is a *composed annotation* that acts as a shortcut for _@Scope("isis-interaction")_ .
+
+_@IsisInteractionScope_ may be used as a meta-annotation to create custom composed annotations.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
-
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
-
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+@interface IsisInteractionScope {
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/LabelPosition.adoc
similarity index 62%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/LabelPosition.adoc
index 7f4509f..564859e 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/LabelPosition.adoc
@@ -1,16 +1,35 @@
-= UserDataKeys : _class_
+= LabelPosition : _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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+The positioning of a label for a property or action parameter.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
+enum LabelPosition {
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  DEFAULT
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  LEFT
+
+  RIGHT // <.>
+
+  TOP
+
+  NONE
+
+  NOT_SPECIFIED // <.>
 }
 ----
 
+<.> `[teal]#*_RIGHT_*#`
++
+--
+Right position of the label for Boolean properties.Not supportedfor now for other types.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/MemberOrder.adoc
similarity index 53%
copy from antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
copy to antora/components/system/modules/generated/pages/index/MemberOrder.adoc
index f9eaf00..e37122a 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/MemberOrder.adoc
@@ -1,38 +1,33 @@
-= ExecutionMode : _enum_
+= MemberOrder : _annotation_
 :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 [...]
 
-Whether interactions with the wrapper are actually passed onto the underlying domain object.
+Indicates the position a method should be placed in.
+
+An alternative is to use theXxx.layout.xmlfile, whereXxxis the domain object name.
 
 .Java Sources
 [source,java]
 ----
-enum ExecutionMode {
-
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
-
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+@interface MemberOrder {
+
+  String name() default ""; // <.>
+
+  String sequence(); // <.>
 }
 ----
 
-<.> `[teal]#*_SKIP_RULE_VALIDATION_*#`
+<.> `[teal]#*_name_*#` : `String`
 +
 --
-Skip all business rules.
+Groups or associate members with each other.
+
+* For actions, indicates the property or collection to associate.
+* For properties, indicates the property group
+* For collections, currently has no meaning
 --
-<.> `[teal]#*_SKIP_EXECUTION_*#`
+<.> `[teal]#*_sequence_*#` : `String`
 +
 --
-Skip actual execution.
-
-This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, ImmutableEnumSet)_ .
+The order of this member relative to other members in the same group, in Dewey-decimal notation. For collections this is relative to each other (collections aren't grouped).
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/MementoSerialization.adoc
similarity index 53%
copy from antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
copy to antora/components/system/modules/generated/pages/index/MementoSerialization.adoc
index f9eaf00..e2964d3 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/MementoSerialization.adoc
@@ -1,38 +1,36 @@
-= ExecutionMode : _enum_
+= MementoSerialization : _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 [...]
 
-Whether interactions with the wrapper are actually passed onto the underlying domain object.
+Whether the property or collection is included if the domain object is serialized into a memento.
 
 .Java Sources
 [source,java]
 ----
-enum ExecutionMode {
-
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
-
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+enum MementoSerialization {
+
+  INCLUDED // <.>
+
+  EXCLUDED // <.>
+
+  NOT_SPECIFIED // <.>
 }
 ----
 
-<.> `[teal]#*_SKIP_RULE_VALIDATION_*#`
+<.> `[teal]#*_INCLUDED_*#`
 +
 --
-Skip all business rules.
+Property or collection is included in any mementos. This is the fallback/default if not explicitly excluded.
 --
-<.> `[teal]#*_SKIP_EXECUTION_*#`
+<.> `[teal]#*_EXCLUDED_*#`
 +
 --
-Skip actual execution.
+Property or collection's state is excluded from any mementos.
 
-This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, ImmutableEnumSet)_ .
+Corresponds to `@Property(notPersisted=true)` or `@Collection(notPersisted=true)` prior to Isis 2.x
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/MinLength.adoc
similarity index 84%
copy from antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
copy to antora/components/system/modules/generated/pages/index/MinLength.adoc
index f820935..844cb01 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/MinLength.adoc
@@ -1,14 +1,14 @@
-= HomePageResolverService : _interface_
+= MinLength : _annotation_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Returns a view model annotated with _HomePage_ .
+Specify the minimum number of characters for an autocomplete search argument.
 
 .Java Sources
 [source,java]
 ----
-interface HomePageResolverService {
+@interface MinLength {
 
-  Object getHomePage()
+  int value();
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/Module.adoc
similarity index 53%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/Module.adoc
index 7f4509f..dd04b8c 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/Module.adoc
@@ -1,16 +1,16 @@
-= UserDataKeys : _class_
+= Module : _annotation_
 :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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+Intended to be annotated on the root marker class of a (Maven) module which contains a single coherent set of functionality, possibly including domain services.
+
+A _Module @Module_ (because it's a meta-annotation) is also a Spring _Configuration @Configuration_ , which means that the functionality can be depended upon transitively using Spring's _Import @Import_ annotation. Normally the import graph mirrors the dependencies in Maven.
+
+Also, a _Module @Module_ also declares the Spring _ComponentScan @ComponentScan_ (with no parameters), which means that any domain services in the same package or subpackages are automatically found and registered.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
-
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
-
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+@interface Module {
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/Nature.adoc b/antora/components/system/modules/generated/pages/index/Nature.adoc
new file mode 100644
index 0000000..7fff034
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Nature.adoc
@@ -0,0 +1,71 @@
+= Nature : _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 [...]
+
+The different sorts of domain objects recognized by Isis.
+
+Note that _#EXTERNAL_ENTITY_ and _#VIEW_MODEL_ are implemented identically internally; the difference is one of intent.
+
+.Java Sources
+[source,java]
+----
+enum Nature {
+
+  NOT_SPECIFIED // <.>
+
+  JDO_ENTITY // <.>
+
+  JPA_ENTITY // <.>
+
+  VIEW_MODEL // <.>
+
+  MIXIN // <.>
+
+  BEAN // <.>
+
+  boolean isEntity()
+}
+----
+
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+The default; allows the programmer to combine `@DomainObject` annotation with the _ViewModel_ annotation, or the _XmlRootElement_ annotation, or by implementing the _org.apache.isis.applib.ViewModel_ interface.
+--
+<.> `[teal]#*_JDO_ENTITY_*#`
++
+--
+A domain entity whose persistence is managed internally by Isis, using JDO as the persistence implementation. Domain entities are considered to be part of the domain model layer.
+
+Domain entities are considered to be part of the domain model layer.
+
+Currently implies no additional semantics other than documentation.
+--
+<.> `[teal]#*_JPA_ENTITY_*#`
++
+--
+A domain entity whose persistence is managed internally by Isis, using JPA as the persistence implementation. Domain entities are considered to be part of the domain model layer.
+
+Domain entities are considered to be part of the domain model layer.
+
+Currently implies no additional semantics other than documentation.
+--
+<.> `[teal]#*_VIEW_MODEL_*#`
++
+--
+An object that is conceptually part of the application layer, and which surfaces behavior and/or state that is aggregate of one or more domain entity.
+
+The identity of a view model is determined solely by the state of object's properties (that have not been set to be ignored using _org.apache.isis.applib.annotation.Property#notPersisted()_ ). Using this nature should be considered exactly equivalent to annotating with _ViewModel_ .
+
+Note that collections are ignored; if their state is required to fully identify the view model, define the view model using the JAXB _XmlRootElement_ annotation instead (where the object's state is serialized to an arbitrarily deep graph of data, with references to persistent entities transparently resolved to<oid-dto>elements).
+--
+<.> `[teal]#*_MIXIN_*#`
++
+--
+An object that acts as a mix-in to some other object, contributing behavior and/or derived state based on the domain object.
+--
+<.> `[teal]#*_BEAN_*#`
++
+--
+An object that is entirely managed by the underlying IoC container.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/NatureOfService.adoc
similarity index 53%
copy from antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
copy to antora/components/system/modules/generated/pages/index/NatureOfService.adoc
index f9eaf00..1ddb5ee 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/NatureOfService.adoc
@@ -1,38 +1,41 @@
-= ExecutionMode : _enum_
+= NatureOfService : _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 [...]
 
-Whether interactions with the wrapper are actually passed onto the underlying domain object.
+The different sorts of domain services recognized by Isis, as specified in _DomainService#nature()_
 
 .Java Sources
 [source,java]
 ----
-enum ExecutionMode {
-
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
-
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+enum NatureOfService {
+
+  VIEW // <.>
+
+  REST // <.>
+
+  boolean isView() // <.>
+
+  boolean isRestOnly() // <.>
 }
 ----
 
-<.> `[teal]#*_SKIP_RULE_VALIDATION_*#`
+<.> `[teal]#*_VIEW_*#`
 +
 --
-Skip all business rules.
+The service's actions appear in the REST API and in 'viewers', eg. in the menu bar.
 --
-<.> `[teal]#*_SKIP_EXECUTION_*#`
+<.> `[teal]#*_REST_*#`
 +
 --
-Skip actual execution.
-
-This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, ImmutableEnumSet)_ .
+The service's actions should only be visible in the REST API exposed by the Restful Objects viewer.
+--
+<.> `[teal]#*isView*#()` : `boolean`
++
+--
+Whether a service contributes its actions to viewers and to the REST API.
+--
+<.> `[teal]#*isRestOnly*#()` : `boolean`
++
+--
+Whether a service contributes its actions exclusively to the REST API.
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/Navigable.adoc
similarity index 73%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/Navigable.adoc
index 7f4509f..ba7b64c 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/Navigable.adoc
@@ -1,16 +1,20 @@
-= UserDataKeys : _class_
+= Navigable : _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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+Tells the framework which method or field to use in order to construct a navigable chain of parent domain object instances. The Navigable.PARENT 'flag' can only be used once per class declaration.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
+enum Navigable {
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  NOT_SPECIFIED
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  IGNORE
+
+  PARENT
+
+  boolean isParent()
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/Optionality.adoc b/antora/components/system/modules/generated/pages/index/Optionality.adoc
new file mode 100644
index 0000000..c3ce534
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Optionality.adoc
@@ -0,0 +1,47 @@
+= Optionality : _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 [...]
+
+Whether the property or parameter is optional or is required (aka mandatory).
+
+.Java Sources
+[source,java]
+----
+enum Optionality {
+
+  DEFAULT // <.>
+
+  OPTIONAL // <.>
+
+  MANDATORY // <.>
+
+  NOT_SPECIFIED // <.>
+}
+----
+
+<.> `[teal]#*_DEFAULT_*#`
++
+--
+Default, usually meaning mandatory for properties and always meaning mandatory for parameters.
+
+For properties, will be false unless JDOjavax.jdo.annotations.Columnhas also specified withjavax.jdo.annotations.Column#allowsNull()set totrue.
+--
+<.> `[teal]#*_OPTIONAL_*#`
++
+--
+Indicates that the property or parameter is not required.
+--
+<.> `[teal]#*_MANDATORY_*#`
++
+--
+Indicates that the property is required (even if the JDOjavax.jdo.annotations.Columnannotation says otherwise).
+
+When using the JDO/DataNucleus objectstore, it is sometimes necessary to annotate a property as optional (usingjavax.jdo.annotations.Column#allowsNull()set totrue), even if the property is logically mandatory. For example, this can occur when the property is in a subtype class that has been "rolled up" to the superclass table usingjavax.jdo.annotations.Inheritance> with thejavax.jdo.annotations.InheritanceStrategy#SUPERCLASS_TABLEsuperclass strategy.
+
+This annotation, therefore, is intended to override any objectstore-specific annotation, so that Isis can apply the constraint even though the objectstore is unable to do so.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/OrderPrecedence.adoc b/antora/components/system/modules/generated/pages/index/OrderPrecedence.adoc
new file mode 100644
index 0000000..01333e9
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/OrderPrecedence.adoc
@@ -0,0 +1,46 @@
+= OrderPrecedence : _class_
+: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 [...]
+
+.Java Sources
+[source,java]
+----
+class OrderPrecedence {
+
+  public static final int FIRST; // <.>
+
+  public static final int EARLY; // <.>
+
+  public static final int MIDPOINT; // <.>
+
+  public static final int LATE; // <.>
+
+  public static final int LAST; // <.>
+}
+----
+
+<.> `[teal]#*_FIRST_*#` : `int`
++
+--
+For domain services with the highest precedence value. No framework services use this constant, but some very fundamental services (eg for security) that are not expected to be overridden use a value that is only a little after this first value.
+--
+<.> `[teal]#*_EARLY_*#` : `int`
++
+--
+For framework for services that are unlikely to be overridden by application code.
+--
+<.> `[teal]#*_MIDPOINT_*#` : `int`
++
+--
+For framework for services that could be overridden by application code (though not commonly).
+--
+<.> `[teal]#*_LATE_*#` : `int`
++
+--
+For framework services that are expected to be overridden by application code, or that act as a fallback.
+--
+<.> `[teal]#*_LAST_*#` : `int`
++
+--
+For domain services that act as a fallback, and which will typically be overridden.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/Parameter.adoc b/antora/components/system/modules/generated/pages/index/Parameter.adoc
new file mode 100644
index 0000000..3d6d25b
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Parameter.adoc
@@ -0,0 +1,72 @@
+= Parameter : _annotation_
+: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 [...]
+
+Domain semantics for domain object collection.
+
+.Java Sources
+[source,java]
+----
+@interface Parameter {
+
+  String fileAccept() default ""; // <.>
+
+  int maxLength() default -1; // <.>
+
+  Class<? extends Specification>[] mustSatisfy() default {}; // <.>
+
+  Optionality optionality() default Optionality.NOT_SPECIFIED; // <.>
+
+  String regexPattern() default ""; // <.>
+
+  int regexPatternFlags() default 0; // <.>
+
+  String regexPatternReplacement() default "Doesn't match pattern"; // <.>
+}
+----
+
+<.> `[teal]#*_fileAccept_*#` : `String`
++
+--
+For uploading _Blob_ or _Clob_ , optionally restrict the files accepted (eg `.xslx` ).
+
+The value should be of the form "file_extension|audio/*|video/*|image/*|media_type".
+--
+<.> `[teal]#*_maxLength_*#` : `int`
++
+--
+The maximum entry length of a field.
+
+The default value (-1) indicates that no maxLength has been specified.
+--
+<.> `[teal]#*_mustSatisfy_*#` : `Class<? extends Specification>[]`
++
+--
+The _org.apache.isis.applib.spec.Specification_ (s) to be satisfied by this parameter.
+
+If more than one is provided, then all must be satisfied (in effect "AND"ed together).
+--
+<.> `[teal]#*_optionality_*#` : `xref:system:generated:index/Optionality.adoc[Optionality]`
++
+--
+Whether this parameter is optional or is mandatory (ie required).
+
+For parameters the default value, _org.apache.isis.applib.annotation.Optionality#DEFAULT_ , is taken to mean that the parameter is required.
+--
+<.> `[teal]#*_regexPattern_*#` : `String`
++
+--
+Regular expression pattern that a value should conform to, and can be formatted as.
+--
+<.> `[teal]#*_regexPatternFlags_*#` : `int`
++
+--
+Pattern flags, as per _java.util.regex.Pattern#compile(String, int)_ .
+
+The default value,0, means that no flags have been specified.
+--
+<.> `[teal]#*_regexPatternReplacement_*#` : `String`
++
+--
+Replacement text for the pattern in generated error message.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ParameterLayout.adoc b/antora/components/system/modules/generated/pages/index/ParameterLayout.adoc
new file mode 100644
index 0000000..5aa423a
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/ParameterLayout.adoc
@@ -0,0 +1,77 @@
+= ParameterLayout : _annotation_
+: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 [...]
+
+Layout hints for action parameters.
+
+.Java Sources
+[source,java]
+----
+@interface ParameterLayout {
+
+  String cssClass() default ""; // <.>
+
+  String describedAs() default ""; // <.>
+
+  LabelPosition labelPosition() default LabelPosition.NOT_SPECIFIED; // <.>
+
+  String named() default ""; // <.>
+
+  boolean namedEscaped() default true; // <.>
+
+  int multiLine() default -1; // <.>
+
+  RenderDay renderDay() default RenderDay.NOT_SPECIFIED; // <.>
+
+  int typicalLength() default -1; // <.>
+}
+----
+
+<.> `[teal]#*_cssClass_*#` : `String`
++
+--
+Indicates the css class that a parameter should have.
+--
+<.> `[teal]#*_describedAs_*#` : `String`
++
+--
+Description of this property, eg to be rendered in a tooltip.
+--
+<.> `[teal]#*_labelPosition_*#` : `xref:system:generated:index/LabelPosition.adoc[LabelPosition]`
++
+--
+In forms, positioning of the label (left, top or none) relative to the parameter value.
+
+If not specified, the default depends upon the parameter value's datatype.
+--
+<.> `[teal]#*_named_*#` : `String`
++
+--
+Name of this action parameter.
+--
+<.> `[teal]#*_namedEscaped_*#` : `boolean`
++
+--
+A flag indicating whether the value of _#named()_ should be HTML escaped or not.
+--
+<.> `[teal]#*_multiLine_*#` : `int`
++
+--
+For string parameters (and properties), whether to render as a text area over multiple lines.
+--
+<.> `[teal]#*_renderDay_*#` : `xref:system:generated:index/RenderDay.adoc[RenderDay]`
++
+--
+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.
+--
+<.> `[teal]#*_typicalLength_*#` : `int`
++
+--
+The typical entry length of a field, use to determine the optimum width for display
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/Programmatic.adoc
similarity index 57%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/Programmatic.adoc
index 7f4509f..c89271b 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/Programmatic.adoc
@@ -1,16 +1,16 @@
-= UserDataKeys : _class_
+= Programmatic : _annotation_
 :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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+Indicates that an property, collection or action is to be called programmatically and should be ignored from the metamodel.
+
+For example, it may be a helper method that needs to be `public` but that doesn't conform to the requirements of an action (for example, invalid parameter types).
+
+It can also be added to a type, meaning that the type is ignored from the metamodel. This is intended as a "get out of jail" for any classes from unit tests, say, that end up on the classpath of integration tests but should otherwise be ignored.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
-
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
-
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+@interface Programmatic {
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/Projecting.adoc
similarity index 74%
copy from antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
copy to antora/components/system/modules/generated/pages/index/Projecting.adoc
index f820935..45b98b4 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/Projecting.adoc
@@ -1,14 +1,25 @@
-= HomePageResolverService : _interface_
+= Projecting : _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 [...]
 
-Returns a view model annotated with _HomePage_ .
-
 .Java Sources
 [source,java]
 ----
-interface HomePageResolverService {
+enum Projecting {
+
+  PROJECTED // <.>
 
-  Object getHomePage()
+  NOT_SPECIFIED // <.>
 }
 ----
 
+<.> `[teal]#*_PROJECTED_*#`
++
+--
+The property holds the underlying domain object of which this (view model) object is a projection.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+The property
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/PromptStyle.adoc b/antora/components/system/modules/generated/pages/index/PromptStyle.adoc
new file mode 100644
index 0000000..9e7e4e8
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/PromptStyle.adoc
@@ -0,0 +1,81 @@
+= PromptStyle : _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 [...]
+
+How prompting for new values of a property/arguments for an action should be performed
+
+.Java Sources
+[source,java]
+----
+enum PromptStyle {
+
+  AS_CONFIGURED // <.>
+
+  DIALOG // <.>
+
+  DIALOG_SIDEBAR // <.>
+
+  DIALOG_MODAL // <.>
+
+  INLINE // <.>
+
+  INLINE_AS_IF_EDIT // <.>
+
+  NOT_SPECIFIED // <.>
+
+  boolean isDialog()
+
+  boolean isInline()
+
+  boolean isInlineAsIfEdit()
+
+  boolean isInlineOrInlineAsIfEdit()
+}
+----
+
+<.> `[teal]#*_AS_CONFIGURED_*#`
++
+--
+Prompt using the style configured by `isis.viewer.wicket.promptStyle` .
+
+If no style is configured, then _#INLINE_ is assumed.
+--
+<.> `[teal]#*_DIALOG_*#`
++
+--
+Use a dialog for the prompt.
+
+This will be either modal dialog (same as if _#DIALOG_MODAL_ was selected) or sidebar (same as if _#DIALOG_SIDEBAR_ was selected) depending on the value of theisis.viweer.wicket.dialogModeconfiguration property.
+--
+<.> `[teal]#*_DIALOG_SIDEBAR_*#`
++
+--
+Use a dialog for the prompt, rendered in a sidebar.
+--
+<.> `[teal]#*_DIALOG_MODAL_*#`
++
+--
+Use a dialog for the prompt, rendered in a modal dialog.
+--
+<.> `[teal]#*_INLINE_*#`
++
+--
+Show the form inline, temporarily replacing the rendering of the property.
+--
+<.> `[teal]#*_INLINE_AS_IF_EDIT_*#`
++
+--
+Applies only to actions, show the form inline, invoked as if editing the property.
+
+Note that:
+
+* Only one such action should have this attribute set per property. If there are multiple actions, then the first one discovered with the attribute is used.
+* If the property is editable, then this attribute is ignored (and the action is treated as having a prompt style of _#INLINE_ ).
+* If applied to a property, then is the property's prompt style is simply treated as _#INLINE_ .
+
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/Property.adoc b/antora/components/system/modules/generated/pages/index/Property.adoc
new file mode 100644
index 0000000..b1069e2
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Property.adoc
@@ -0,0 +1,149 @@
+= Property : _annotation_
+: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 [...]
+
+Domain semantics for domain object property.
+
+.Java Sources
+[source,java]
+----
+@interface Property {
+
+  Class<? extends CommandDtoProcessor> commandDtoProcessor() default CommandDtoProcessor.class; // <.>
+
+  Publishing commandPublishing() default Publishing.NOT_SPECIFIED; // <.>
+
+  Class<? extends PropertyDomainEvent<?, ?>> domainEvent() default PropertyDomainEvent.Default.class; // <.>
+
+  Editing editing() default Editing.NOT_SPECIFIED; // <.>
+
+  String editingDisabledReason() default ""; // <.>
+
+  Publishing executionPublishing() default Publishing.NOT_SPECIFIED; // <.>
+
+  String fileAccept() default ""; // <.>
+
+  Where hidden() default Where.NOT_SPECIFIED; // <.>
+
+  int maxLength() default -1; // <.>
+
+  MementoSerialization mementoSerialization() default MementoSerialization.NOT_SPECIFIED; // <.>
+
+  Class<? extends Specification>[] mustSatisfy() default {}; // <.>
+
+  Optionality optionality() default Optionality.NOT_SPECIFIED; // <.>
+
+  Projecting projecting() default Projecting.NOT_SPECIFIED; // <.>
+
+  String regexPattern() default ""; // <.>
+
+  int regexPatternFlags() default 0; // <.>
+
+  String regexPatternReplacement() default "Doesn't match pattern"; // <.>
+}
+----
+
+<.> `[teal]#*_commandDtoProcessor_*#` : `Class<? extends CommandDtoProcessor>`
++
+--
+The xref:system:generated:index/CommandDtoProcessor.adoc[CommandDtoProcessor] to process this command's DTO.
+
+The processor itself is used by xref:system:generated:index/ContentMappingServiceForCommandDto.adoc[ContentMappingServiceForCommandDto] and xref:system:generated:index/ContentMappingServiceForCommandsDto.adoc[ContentMappingServiceForCommandsDto] to dynamically transform the DTOs.
+--
+<.> `[teal]#*_commandPublishing_*#` : `xref:system:generated:index/Publishing.adoc[Publishing]`
++
+--
+Whether property edits, captured as xref:system:generated:index/Command.adoc[Command] s, should be published to xref:system:generated:index/CommandSubscriber.adoc[CommandSubscriber] s.
+--
+<.> `[teal]#*_domainEvent_*#` : `Class<? extends PropertyDomainEvent<?,?>>`
++
+--
+Indicates that changes to the property that should be posted to the _org.apache.isis.applib.services.eventbus.EventBusService event bus_ using a custom (subclass of) _org.apache.isis.applib.events.domain.PropertyDomainEvent_ .
+
+For example:public static class StartDateChanged extends PropertyDomainEvent { ... } @Property(domainEvent=StartDateChanged.class) public LocalDate getStartDate() { ...}
+
+This subclass must provide a no-arg constructor; the fields are set reflectively.
+--
+<.> `[teal]#*_editing_*#` : `xref:system:generated:index/Editing.adoc[Editing]`
++
+--
+Whether the properties of this domain object can be edited, or collections of this object be added to/removed from.
+
+Note that non-editable objects can nevertheless have actions invoked upon them.
+--
+<.> `[teal]#*_editingDisabledReason_*#` : `String`
++
+--
+If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the user as to why this property cannot be edited.
+--
+<.> `[teal]#*_executionPublishing_*#` : `xref:system:generated:index/Publishing.adoc[Publishing]`
++
+--
+Whether _Interaction.Execution_ s (triggered property edits), should be dispatched to xref:system:generated:index/ExecutionSubscriber.adoc[ExecutionSubscriber] s.
+--
+<.> `[teal]#*_fileAccept_*#` : `String`
++
+--
+For uploading _Blob_ or _Clob_ , optionally restrict the files accepted (eg `.xslx` ).
+
+The value should be of the form "file_extension|audio/*|video/*|image/*|media_type".
+--
+<.> `[teal]#*_hidden_*#` : `xref:system:generated:index/Where.adoc[Where]`
++
+--
+Indicates where the property is not visible to the user.
+--
+<.> `[teal]#*_maxLength_*#` : `int`
++
+--
+The maximum entry length of a field.
+
+The default value (-1) indicates that no maxLength has been specified.
+--
+<.> `[teal]#*_mementoSerialization_*#` : `xref:system:generated:index/MementoSerialization.adoc[MementoSerialization]`
++
+--
+Indicates whether the property should be included or excluded from mementos.
+
+To ensure that the property is actually not persisted in the objectstore, also annotate with the JDO annotationjavax.jdo.annotations.NotPersistent
+--
+<.> `[teal]#*_mustSatisfy_*#` : `Class<? extends Specification>[]`
++
+--
+The _org.apache.isis.applib.spec.Specification_ (s) to be satisfied by this property.
+
+If more than one is provided, then all must be satisfied (in effect "AND"ed together).
+--
+<.> `[teal]#*_optionality_*#` : `xref:system:generated:index/Optionality.adoc[Optionality]`
++
+--
+Whether this property is optional or is mandatory (ie required).
+
+For properties the default value, _org.apache.isis.applib.annotation.Optionality#DEFAULT_ , usually means that the property is required unless it has been overridden byjavax.jdo.annotations.Columnwith itsjavax.jdo.annotations.Column#allowsNull()attribute set to true.
+--
+<.> `[teal]#*_projecting_*#` : `xref:system:generated:index/Projecting.adoc[Projecting]`
++
+--
+If set to _Projecting#PROJECTED projected_ , then indicates that the owner of this property is a view model which is a projection of some other entity, and that the property holds a reference to that "underlying".
+
+This is used to automatically redirect any bookmarks to the view model (projection) to instead be directed at the underlying entity.
+
+Only one such property should be marked as being a projection with a view model.
+--
+<.> `[teal]#*_regexPattern_*#` : `String`
++
+--
+Regular expression pattern that a value should conform to, and can be formatted as.
+--
+<.> `[teal]#*_regexPatternFlags_*#` : `int`
++
+--
+Pattern flags, as per _java.util.regex.Pattern#compile(String, int)_ .
+
+The default value,0, means that no flags have been specified.
+--
+<.> `[teal]#*_regexPatternReplacement_*#` : `String`
++
+--
+Replacement text for the pattern in generated error message.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/PropertyLayout.adoc b/antora/components/system/modules/generated/pages/index/PropertyLayout.adoc
new file mode 100644
index 0000000..797c2f6
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/PropertyLayout.adoc
@@ -0,0 +1,113 @@
+= PropertyLayout : _annotation_
+: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 [...]
+
+Layout hints for properties.
+
+.Java Sources
+[source,java]
+----
+@interface PropertyLayout {
+
+  String cssClass() default ""; // <.>
+
+  String describedAs() default ""; // <.>
+
+  Where hidden() default Where.NOT_SPECIFIED; // <.>
+
+  LabelPosition labelPosition() default LabelPosition.NOT_SPECIFIED; // <.>
+
+  int multiLine() default -1; // <.>
+
+  String named() default ""; // <.>
+
+  boolean namedEscaped() default true; // <.>
+
+  Navigable navigable() default Navigable.NOT_SPECIFIED; // <.>
+
+  PromptStyle promptStyle() default PromptStyle.NOT_SPECIFIED; // <.>
+
+  RenderDay renderDay() default RenderDay.NOT_SPECIFIED; // <.>
+
+  Repainting repainting() default Repainting.NOT_SPECIFIED; // <.>
+
+  int typicalLength() default -1; // <.>
+}
+----
+
+<.> `[teal]#*_cssClass_*#` : `String`
++
+--
+Indicates the css class that a property should have.
+--
+<.> `[teal]#*_describedAs_*#` : `String`
++
+--
+Description of this property, eg to be rendered in a tooltip.
+--
+<.> `[teal]#*_hidden_*#` : `xref:system:generated:index/Where.adoc[Where]`
++
+--
+Indicates where in the UI the property should _not_ not be visible.
+--
+<.> `[teal]#*_labelPosition_*#` : `xref:system:generated:index/LabelPosition.adoc[LabelPosition]`
++
+--
+In forms, positioning of the label (left, top or none) relative to the property value.
+
+If not specified, the default depends upon the property value's datatype.
+--
+<.> `[teal]#*_multiLine_*#` : `int`
++
+--
+For string properties (and parameters), render as a text area over specified number of lines.
+--
+<.> `[teal]#*_named_*#` : `String`
++
+--
+Name of this property (overriding the name derived from its name in code).
+--
+<.> `[teal]#*_namedEscaped_*#` : `boolean`
++
+--
+A flag indicating whether the value of _#named()_ should be HTML escaped or not.
+--
+<.> `[teal]#*_navigable_*#` : `xref:system:generated:index/Navigable.adoc[Navigable]`
++
+--
+Whether this property should be used to construct the navigable chain of breadcrumbs in the UI.
+
+Only one property can be annotated as such per domain class.
+--
+<.> `[teal]#*_promptStyle_*#` : `xref:system:generated:index/PromptStyle.adoc[PromptStyle]`
++
+--
+How the properties of this domain object are be edited, either _PromptStyle#DIALOG dialog_ or _PromptStyle#INLINE inline_ .
+--
+<.> `[teal]#*_renderDay_*#` : `xref:system:generated:index/RenderDay.adoc[RenderDay]`
++
+--
+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.
+--
+<.> `[teal]#*_repainting_*#` : `xref:system:generated:index/Repainting.adoc[Repainting]`
++
+--
+Indicates that the value held by the property never changes over time, even when other properties of the object do change.
+
+Setting this attribute to `RepaintPolicy.NO_REPAINT` is used as a hint to the viewer to not repaint the property after an AJAX update of some other property/ies of the object have changed. This is primarily for performance, eg can improve the user experience when rendering PDFs/blobs.
+
+Note that for this to work, the viewer will also ensure that none of the property's parent component (such as a tab group panel) are re-rendered.
+
+Design note: we considered implementing this an "immutable" flag on the xref:system:generated:index/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.
+--
+<.> `[teal]#*_typicalLength_*#` : `int`
++
+--
+The typical entry length of a field, use to determine the optimum width for display
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/Publishing.adoc b/antora/components/system/modules/generated/pages/index/Publishing.adoc
new file mode 100644
index 0000000..c7323e0
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Publishing.adoc
@@ -0,0 +1,56 @@
+= Publishing : _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 [...]
+
+The available policies as to whether data should be published to corresponding subscribers. The framework supports several kinds of data that are available for publishing:
+
+* *xref:system:generated:index/EntityChanges.adoc[EntityChanges] ... subscribed to via xref:system:generated:index/EntityChangesSubscriber.adoc[EntityChangesSubscriber]*
+
+ *
+* *xref:system:generated:index/EntityPropertyChange.adoc[EntityPropertyChange] ... subscribed to via xref:system:generated:index/EntityPropertyChangeSubscriber.adoc[EntityPropertyChangeSubscriber]*
+
+ *
+* *xref:system:generated:index/Command.adoc[Command] ... subscribed to via xref:system:generated:index/CommandSubscriber.adoc[CommandSubscriber]*
+
+ *
+* *_Interaction.Execution_ ... subscribed to via xref:system:generated:index/ExecutionSubscriber.adoc[ExecutionSubscriber]*
+
+ ** * * * 
+
+.Java Sources
+[source,java]
+----
+enum Publishing {
+
+  AS_CONFIGURED // <.>
+
+  ENABLED // <.>
+
+  DISABLED // <.>
+
+  NOT_SPECIFIED // <.>
+}
+----
+
+<.> `[teal]#*_AS_CONFIGURED_*#`
++
+--
+Publishing of data triggered by interaction with this object should be handled as per the default publishing policy configured in `application.properties` .
+
+If no publishing policy is configured, then publishing is disabled.
+--
+<.> `[teal]#*_ENABLED_*#`
++
+--
+Do publish data triggered by interaction with this object.
+--
+<.> `[teal]#*_DISABLED_*#`
++
+--
+Do *not* publish data triggered by interaction with this object (even if otherwise configured to enable publishing).
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or super-classes/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc b/antora/components/system/modules/generated/pages/index/Redirect.adoc
similarity index 53%
copy from antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
copy to antora/components/system/modules/generated/pages/index/Redirect.adoc
index f9eaf00..e2d3ca0 100644
--- a/antora/components/system/modules/generated/pages/index/ExecutionMode.adoc
+++ b/antora/components/system/modules/generated/pages/index/Redirect.adoc
@@ -1,38 +1,36 @@
-= ExecutionMode : _enum_
+= Redirect : _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 [...]
 
-Whether interactions with the wrapper are actually passed onto the underlying domain object.
+The available policies for rendering the next page if the result is the same as the target (in other words, an action that returns "this").
 
 .Java Sources
 [source,java]
 ----
-enum ExecutionMode {
-
-  /**
- * Skip all business rules.
- */
-SKIP_RULE_VALIDATION // <.>
-
-  /**
- * Skip actual execution.
- *
- * <p>
- * This is not supported for {@link WrapperFactory#asyncWrap(Object, AsyncControl)}; instead just invoke {@link WrapperFactory#wrap(Object, ImmutableEnumSet)}.
- */
-SKIP_EXECUTION // <.>
+enum Redirect {
+
+  AS_CONFIGURED // <.>
+
+  EVEN_IF_SAME // <.>
+
+  ONLY_IF_DIFFERS // <.>
 }
 ----
 
-<.> `[teal]#*_SKIP_RULE_VALIDATION_*#`
+<.> `[teal]#*_AS_CONFIGURED_*#`
++
+--
+As defined by configuration propertyisis.viewer.wicket.redirectEvenIfSameObject
+--
+<.> `[teal]#*_EVEN_IF_SAME_*#`
 +
 --
-Skip all business rules.
+Redirect (meaning render a new page) even if the result of the action is the same as the target.
 --
-<.> `[teal]#*_SKIP_EXECUTION_*#`
+<.> `[teal]#*_ONLY_IF_DIFFERS_*#`
 +
 --
-Skip actual execution.
+Don't redirect if the result is the same as the target, instead just update the existing page.
 
-This is not supported for _WrapperFactory#asyncWrap(Object, AsyncControl)_ ; instead just invoke _WrapperFactory#wrap(Object, ImmutableEnumSet)_ .
+Of course, a redirect is still performed if the result of the action is different from the target.
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/RenderDay.adoc
similarity index 66%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/RenderDay.adoc
index 7f4509f..8dcc301 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/RenderDay.adoc
@@ -1,16 +1,29 @@
-= UserDataKeys : _class_
+= RenderDay : _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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+How to render days.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
+enum RenderDay {
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  AS_DAY
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  AS_DAY_BEFORE // <.>
+
+  NOT_SPECIFIED // <.>
 }
 ----
 
+<.> `[teal]#*_AS_DAY_BEFORE_*#`
++
+--
+Equivalent to `@PropertyLayout(renderAsDayBefore=true)` prior to Isis 2.x
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/Repainting.adoc
similarity index 64%
copy from antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
copy to antora/components/system/modules/generated/pages/index/Repainting.adoc
index 7f4509f..ebc6515 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/Repainting.adoc
@@ -1,16 +1,29 @@
-= UserDataKeys : _class_
+= Repainting : _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 [...]
 
-Keys used in _CommandDto#getUserData()_ to marshall the command's results
+Whether a component is unchanging and so does not require repainting.
 
 .Java Sources
 [source,java]
 ----
-class UserDataKeys {
+enum Repainting {
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  REPAINT
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  NO_REPAINT // <.>
+
+  NOT_SPECIFIED // <.>
 }
 ----
 
+<.> `[teal]#*_NO_REPAINT_*#`
++
+--
+Equivalent to `@PropertyLayout(unchanging=true)` prior to Isis 2.x
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc b/antora/components/system/modules/generated/pages/index/RestrictTo.adoc
similarity index 83%
copy from antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
copy to antora/components/system/modules/generated/pages/index/RestrictTo.adoc
index f820935..092478b 100644
--- a/antora/components/system/modules/generated/pages/index/HomePageResolverService.adoc
+++ b/antora/components/system/modules/generated/pages/index/RestrictTo.adoc
@@ -1,14 +1,18 @@
-= HomePageResolverService : _interface_
+= RestrictTo : _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 [...]
 
-Returns a view model annotated with _HomePage_ .
+Whether an action is restricted to development mode, or available in all.
 
 .Java Sources
 [source,java]
 ----
-interface HomePageResolverService {
+enum RestrictTo {
 
-  Object getHomePage()
+  PROTOTYPING
+
+  NO_RESTRICTIONS
+
+  NOT_SPECIFIED
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/SemanticsOf.adoc b/antora/components/system/modules/generated/pages/index/SemanticsOf.adoc
new file mode 100644
index 0000000..99a9a20
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/SemanticsOf.adoc
@@ -0,0 +1,124 @@
+= SemanticsOf : _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 [...]
+
+.Java Sources
+[source,java]
+----
+enum SemanticsOf {
+
+  SAFE_AND_REQUEST_CACHEABLE // <.>
+
+  SAFE // <.>
+
+  IDEMPOTENT // <.>
+
+  NON_IDEMPOTENT // <.>
+
+  IDEMPOTENT_ARE_YOU_SURE // <.>
+
+  NON_IDEMPOTENT_ARE_YOU_SURE // <.>
+
+  NOT_SPECIFIED // <.>
+
+  String getFriendlyName()
+
+  String getCamelCaseName()
+
+  boolean isIdempotentInNature() // <.>
+
+  boolean isSafeInNature() // <.>
+
+  boolean isSafe() // <.>
+
+  boolean isSafeAndRequestCacheable()
+
+  boolean isAreYouSure()
+}
+----
+
+<.> `[teal]#*_SAFE_AND_REQUEST_CACHEABLE_*#`
++
+--
+Safe, with no side effects, and caching the returned value when invoked multiple times in the same request.
+
+* Changes state: *No*
+* HTTP verb: *GET*
+* Effect of multiple calls: Will *always return the same result* each time invoked (within a given request scope).
+--
+<.> `[teal]#*_SAFE_*#`
++
+--
+Safe, with no side-effects. In other words, a query-only action.
+
+* Changes state: *No*
+* HTTP verb: *GET*
+* Effect of multiple calls: Might result in *different results each invocation* (within a given request scope).
+--
+<.> `[teal]#*_IDEMPOTENT_*#`
++
+--
+Post-conditions are always the same, irrespective as to how many times called.
+
+* Changes state: *Yes*
+* HTTP verb: *PUT*
+* Effect of multiple calls: Will make *no further changes* if called multiple times (eg sets a property or adds of same item to a Set).
+--
+<.> `[teal]#*_NON_IDEMPOTENT_*#`
++
+--
+Neither safe nor idempotent; every invocation is likely to change the state of the object.
+
+* Changes state: *Yes*
+* HTTP verb: *POST*
+* Effect of multiple calls: Might *change the state* of the system each time called (eg increments a counter or adds to a List).
+* Example: Increasing the quantity of a line item in an Order by 1.
+--
+<.> `[teal]#*_IDEMPOTENT_ARE_YOU_SURE_*#`
++
+--
+Post-conditions are always the same, irrespective as to how many times called.
+
+If supported the UI viewer will show a confirmation dialog before executing the action.
+
+* Changes state: *Yes*
+* HTTP verb: *PUT*
+* Effect of multiple calls: Will make *no further changes* if called multiple times (eg sets a property or adds of same item to a Set).
+--
+<.> `[teal]#*_NON_IDEMPOTENT_ARE_YOU_SURE_*#`
++
+--
+Neither safe nor idempotent; every invocation is likely to change the state of the object.
+
+If supported the UI viewer will show a confirmation dialog before executing the action.
+
+* Changes state: *Yes*
+* HTTP verb: *POST*
+* Effect of multiple calls: Might *change the state* of the system each time called (eg increments a counter or adds to a List).
+* Example: Increasing the quantity of a line item in an Order by 1.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
+--
+<.> `[teal]#*isIdempotentInNature*#()` : `boolean`
++
+--
+Any of _#SAFE_ , _#SAFE_AND_REQUEST_CACHEABLE_ or (obviously) _#IDEMPOTENT_ .
+--
+<.> `[teal]#*isSafeInNature*#()` : `boolean`
++
+--
+Either of _#SAFE_ or _#SAFE_AND_REQUEST_CACHEABLE_ .
+--
+<.> `[line-through gray]#*isSafe*#()` : `boolean`
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+- use _#isSafeInNature()_ instead (avoid any ambiguity).
+====
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/SudoService.adoc b/antora/components/system/modules/generated/pages/index/SudoService.adoc
index eb02d01..19c3bd7 100644
--- a/antora/components/system/modules/generated/pages/index/SudoService.adoc
+++ b/antora/components/system/modules/generated/pages/index/SudoService.adoc
@@ -8,10 +8,7 @@ Intended only for use by fixture scripts and integration tests, allows a block o
 ----
 interface SudoService {
 
-  /**
- * If included in the list of roles, then will disable security checks (can view and use all object members).
- */
-RoleMemento ACCESS_ALL_ROLE = new RoleMemento(SudoService.class.getName() + "#accessAll", "Sudo, can view and use all object members."); // <.>
+  RoleMemento ACCESS_ALL_ROLE; // <.>
 
   T call(UnaryOperator<ExecutionContext> sudoMapper, Callable<T> supplier) // <.>
 
@@ -19,10 +16,7 @@ RoleMemento ACCESS_ALL_ROLE = new RoleMemento(SudoService.class.getName() + "#ac
 }
 ----
 
-<.> `xref:system:generated:index/RoleMemento.adoc[RoleMemento] [teal]#*/**
- * If included in the list of roles, then will disable security checks (can view and use all object members).
- */
-RoleMemento ACCESS_ALL_ROLE = new RoleMemento(SudoService.class.getName() + "#accessAll", "Sudo, can view and use all object members.");*#`
+<.> `[teal]#*ACCESS_ALL_ROLE*#` : `xref:system:generated:index/RoleMemento.adoc[RoleMemento]`
 +
 --
 If included in the list of roles, then will disable security checks (can view and use all object members).
diff --git a/antora/components/system/modules/generated/pages/index/Title.adoc b/antora/components/system/modules/generated/pages/index/Title.adoc
new file mode 100644
index 0000000..c0321f9
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Title.adoc
@@ -0,0 +1,41 @@
+= Title : _annotation_
+: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 [...]
+
+A title annotation used to annotate methods used to construct the title of a domain object instance. It is used as a marker.
+
+.Java Sources
+[source,java]
+----
+@interface Title {
+
+  String sequence() default "1.0"; // <.>
+
+  String prepend() default " "; // <.>
+
+  String append() default ""; // <.>
+
+  int abbreviatedTo() default Integer.MAX_VALUE; // <.>
+}
+----
+
+<.> `[teal]#*_sequence_*#` : `String`
++
+--
+The order (in Dewey decimal notation) that the property annotated with xref:system:generated:index/Title.adoc[Title] appears with respect to other properties also annotated with xref:system:generated:index/Title.adoc[Title] .
+--
+<.> `[teal]#*_prepend_*#` : `String`
++
+--
+The string to use to separate this property from any preceding properties in the title.
+--
+<.> `[teal]#*_append_*#` : `String`
++
+--
+The string to append to this property if non-empty.
+--
+<.> `[teal]#*_abbreviatedTo_*#` : `int`
++
+--
+The length to abbreviate this title element to.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/TransactionState.adoc b/antora/components/system/modules/generated/pages/index/TransactionState.adoc
index aec1eb4..9f8025b 100644
--- a/antora/components/system/modules/generated/pages/index/TransactionState.adoc
+++ b/antora/components/system/modules/generated/pages/index/TransactionState.adoc
@@ -6,46 +6,15 @@
 ----
 enum TransactionState {
 
-  /**
- * No transaction exists.
- */
-NONE // <.>
-
-  /**
- * Started, still in progress.
- * <p/>
- * <p/>
- * May flush, commit or abort.
- */
-IN_PROGRESS // <.>
-
-  /**
- * Started, but has hit an exception.
- * <p/>
- * <p/>
- * May not flush or commit (will throw an {@link IllegalStateException}),
- * can only abort.
- * <p/>
- * <p/>
- * Similar to <tt>setRollbackOnly</tt> in EJBs.
- */
-MUST_ABORT // <.>
-
-  /**
- * Completed, having successfully committed.
- * <p/>
- * <p/>
- * May not flush or abort or commit (will throw {@link IllegalStateException}).
- */
-COMMITTED // <.>
-
-  /**
- * Completed, having aborted.
- * <p/>
- * <p/>
- * May not flush, commit or abort (will throw {@link IllegalStateException}).
- */
-ABORTED // <.>
+  NONE // <.>
+
+  IN_PROGRESS // <.>
+
+  MUST_ABORT // <.>
+
+  COMMITTED // <.>
+
+  ABORTED // <.>
 
   boolean canFlush() // <.>
 
diff --git a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc b/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
index 7f4509f..5a0a321 100644
--- a/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
+++ b/antora/components/system/modules/generated/pages/index/UserDataKeys.adoc
@@ -8,9 +8,9 @@ Keys used in _CommandDto#getUserData()_ to marshall the command's results
 ----
 class UserDataKeys {
 
-  public static String RESULT = UserDataKeys.class.getName() + "#" + "RESULT";
+  public static String RESULT;
 
-  public static String EXCEPTION = UserDataKeys.class.getName() + "#" + "EXCEPTION";
+  public static String EXCEPTION;
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/Value.adoc b/antora/components/system/modules/generated/pages/index/Value.adoc
new file mode 100644
index 0000000..fb521c8
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Value.adoc
@@ -0,0 +1,44 @@
+= Value : _annotation_
+: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 that the class has value semantics.
+
+By "value semantics" all we actually mean that the class is aggregated (or embedded) and so therefore (conceptually) is not shared between instances of classes. However, values very often have other semantics, and so this annotation allows these to also be specified:
+
+* it may be parseable
+* it may be encodeable
+* it may be immutable, and by default is presumed that it is
+* it may follow the equal-by-content contract (as per xref:system:generated:index/EqualByContent.adoc[EqualByContent] ), and by default is presumed that it does.
+
+Note also that though a value is conceptually not shared, if it is also immutable then it is in fact safe to share objects (as in the flyweight pattern). In addition, the xref:system:generated:index/EqualByContent.adoc[EqualByContent] semantic means that we needn't care whether value types are being shared or not.
+
+.Java Sources
+[source,java]
+----
+@interface Value {
+
+  String semanticsProviderName() default ""; // <.>
+
+  Class<?> semanticsProviderClass() default Value.class; // <.>
+}
+----
+
+<.> `[teal]#*_semanticsProviderName_*#` : `String`
++
+--
+The fully qualified name of a class that implements the _ValueSemanticsProvider_ interface.
+
+This is optional because some implementations may pick up encodeability via a configuration file, or via the equivalent _#semanticsProviderClass()_ .
+
+It is possible for value classes to act as their own semantics providers, and may in particular implement the _EncoderDecoder_ interface. The framework requires that the nominated class provides a `public` no-arg constructor on the class, and will instantiates an instance of the class to interact with it. In the case of encoding, the framework uses the result of discards the instantiated object. What that means in particular is that a self-encoding class shouldn't encode its own state, i [...]
+
+Implementation note: the default value provided here is simply an empty string because `null` is not a valid default.
+--
+<.> `[teal]#*_semanticsProviderClass_*#` : `Class<?>`
++
+--
+As per _#semanticsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
+
+Implementation note: the default value provided here is simply the xref:system:generated:index/Value.adoc[Value] 's own class, because `null` is not a valid default.
+--
+
diff --git a/antora/components/system/modules/generated/pages/index/Where.adoc b/antora/components/system/modules/generated/pages/index/Where.adoc
new file mode 100644
index 0000000..72ec79f
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/Where.adoc
@@ -0,0 +1,122 @@
+= Where : _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 [...]
+
+Represents the location in the user interface where a class member is to be rendered.
+
+Used to control visibility (eg using the _Hidden_ annotation) and enablement (eg using the _Disabled_ annotation) in different regions of the user interface.
+
+The application programmer may use any of the values of this enum. Some represent concrete locations (eg _#OBJECT_FORMS_ , _#PARENTED_TABLES_ ), whereas some represent a combination of locations (eg _#ALL_TABLES_ , _#ANYWHERE_ ).Framework Implementation Notes
+
+This enum is also used internally within the framework. When rendering an element, the framework developer should only use those values that represent concrete locations.
+
+.Java Sources
+[source,java]
+----
+enum Where {
+
+  EVERYWHERE // <.>
+
+  ANYWHERE // <.>
+
+  OBJECT_FORMS // <.>
+
+  REFERENCES_PARENT // <.>
+
+  PARENTED_TABLES // <.>
+
+  STANDALONE_TABLES // <.>
+
+  ALL_TABLES // <.>
+
+  ALL_EXCEPT_STANDALONE_TABLES // <.>
+
+  NOWHERE // <.>
+
+  NOT_SPECIFIED // <.>
+
+  String getFriendlyName()
+
+  boolean inParentedTable()
+
+  boolean inStandaloneTable()
+
+  boolean includes(Where context) // <.>
+}
+----
+
+<.> `[teal]#*_EVERYWHERE_*#`
++
+--
+The member should be disabled/hidden everywhere.
+
+Synonym for _#ANYWHERE_ .
+--
+<.> `[teal]#*_ANYWHERE_*#`
++
+--
+The member should be disabled/hidden everywhere.
+
+Synonym for _#EVERYWHERE_ .
+--
+<.> `[teal]#*_OBJECT_FORMS_*#`
++
+--
+The member should be disabled/hidden when displayed within an object form.
+
+For most viewers, this applies to property and collection members, not actions.
+--
+<.> `[teal]#*_REFERENCES_PARENT_*#`
++
+--
+The member should be disabled/hidden when displayed as a column of a table within parent object's collection, and references that parent.
+
+For most (all?) viewers, this will have meaning only if applied to a property member.
+--
+<.> `[teal]#*_PARENTED_TABLES_*#`
++
+--
+The member should be disabled/hidden when displayed as a column of a table within a parent object's collection.
+
+For most (all?) viewers, this will have meaning only if applied to a property member.
+--
+<.> `[teal]#*_STANDALONE_TABLES_*#`
++
+--
+The member should be disabled/hidden when displayed as a column of a table showing a standalone list of objects, for example as returned by a repository query.
+
+For most (all?) viewers, this will have meaning only if applied to a property member.
+--
+<.> `[teal]#*_ALL_TABLES_*#`
++
+--
+The member should be disabled/hidden when displayed as a column of a table, either an object's collection or a standalone list.
+
+This combines _#PARENTED_TABLES_ and _#STANDALONE_TABLES_ .
+--
+<.> `[teal]#*_ALL_EXCEPT_STANDALONE_TABLES_*#`
++
+--
+The member should be disabled/hidden except when displayed as a column of a standalone table.
+
+This is the inverse of _#STANDALONE_TABLES_ .
+--
+<.> `[teal]#*_NOWHERE_*#`
++
+--
+To act as an override if a member would normally be hidden as a result of some other convention.
+
+For example, if a property is annotated with `@Title` , then normally this should be hidden from all tables. Additionally annotating with `@Hidden(where=Where.NOWHERE)` overrides this.
+--
+<.> `[teal]#*_NOT_SPECIFIED_*#`
++
+--
+Acts as the default no-op value for _PropertyLayout#hidden()_ , _CollectionLayout#hidden()_ and _ActionLayout#hidden()_ .
+--
+<.> `[teal]#*includes*#(xref:system:generated:index/Where.adoc[Where] context)` : `boolean`
++
+--
+Whether this `Where` is a superset of the context `Where` provided.
+
+For example, _#ALL_TABLES_ includes _#STANDALONE_TABLES_ ; _#ANYWHERE_ includes all others.
+--
+
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 38fc936..607b353 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -318,7 +318,7 @@ _Dependencies_
 
 _Document Index Entries_
 
-xref:system:generated:index/AcceptHeaderService.adoc[AcceptHeaderService], xref:system:generated:index/ActionArgumentEvent.adoc[ActionArgumentEvent], xref:system:generated:index/ActionInvocationEvent.adoc[ActionInvocationEvent], xref:system:generated:index/ActionUsabilityEvent.adoc[ActionUsabilityEvent], xref:system:generated:index/ActionVisibilityEvent.adoc[ActionVisibilityEvent], xref:system:generated:index/ApplicationFeatureRepository.adoc[ApplicationFeatureRepository], xref:system:ge [...]
+xref:system:generated:index/AcceptHeaderService.adoc[AcceptHeaderService], xref:system:generated:index/Action.adoc[Action], xref:system:generated:index/ActionArgumentEvent.adoc[ActionArgumentEvent], xref:system:generated:index/ActionInvocationEvent.adoc[ActionInvocationEvent], xref:system:generated:index/ActionLayout.adoc[ActionLayout], xref:system:generated:index/ActionUsabilityEvent.adoc[ActionUsabilityEvent], xref:system:generated:index/ActionVisibilityEvent.adoc[ActionVisibilityEvent [...]
 
 |Apache Isis Core - Code Gen (ByteBuddy)
 [source,yaml]
@@ -1259,12 +1259,12 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<11>> {
+skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -3272,12 +3272,12 @@ skinparam rectangle<<22>> {
   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