You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/01/30 06:34:00 UTC

[isis] 03/03: ISIS-2444: updates isis tooling, regen docs

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

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

commit 99deb106cc29dda93e5462ec9daa7475ab1f4928
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Jan 30 06:33:32 2021 +0000

    ISIS-2444: updates isis tooling, regen docs
---
 .../pages/building-docs-and-website.adoc           |   7 +-
 .../pages/index/applib/ApplicationException.adoc   |  30 ----
 .../index/applib/NonRecoverableException.adoc      |  56 --------
 .../{ => exceptions}/RecoverableException.adoc     |   4 +-
 .../TranslatableException.adoc                     |   2 +-
 .../UnrecoverableException.adoc}                   |  22 ++-
 .../unrecoverable}/PersistFailedException.adoc     |   2 +-
 .../unrecoverable}/RepositoryException.adoc        |   2 +-
 .../services/exceprecog/ExceptionRecognizer.adoc   |   2 +-
 .../exceprecog/ExceptionRecognizerForType.adoc     |  26 ++++
 .../exceprecog/ExceptionRecognizerService.adoc     |   8 +-
 .../applib/services/i18n/TranslatableString.adoc   |   2 +-
 .../jdo/datanucleus/schema/JdoSchemaService.adoc   |   2 +-
 .../modules/generated/pages/system-overview.adoc   | 157 +++++++++++----------
 isis-tooling.yml                                   |  18 +--
 tooling/cli/pom.xml                                |   2 +
 .../org/apache/isis/tooling/cli/CliConfig.java     |  26 ++--
 .../cli/adocfix/OrphanedIncludeStatementFixer.java |  48 +++----
 .../isis/tooling/cli/test/CliConfigTest.java       |   8 +-
 .../isis/tooling/model4adoc/AsciiDocWriter.java    |  24 ++--
 20 files changed, 204 insertions(+), 244 deletions(-)

diff --git a/antora/components/conguide/modules/documentation/pages/building-docs-and-website.adoc b/antora/components/conguide/modules/documentation/pages/building-docs-and-website.adoc
index aa701e8..7e873ce 100644
--- a/antora/components/conguide/modules/documentation/pages/building-docs-and-website.adoc
+++ b/antora/components/conguide/modules/documentation/pages/building-docs-and-website.adoc
@@ -37,8 +37,9 @@ This requires:
 To create/update documentation, we strongly recommend:
 
 * IntelliJ link:https://plugins.jetbrains.com/plugin/7391-asciidoc[Asciidoc plugin]
+* IntelliJ link:https://plugins.jetbrains.com/plugin/15635-diagrams-net-integration[Diagrams.net plugin]
 
-Even if you don't use IntelliJ as your primary IDE, it's worth using it for writing documentation - there's currently nothing as good as this plugin on any other editor platform, especially when it comes to Antora.
+Even if you don't use IntelliJ as your primary IDE, it's worth using it for writing documentation - there's currently nothing as good as the Asciidoc plugin on any other editor platform, especially when it comes to writing Antora.
 
 
 == Build
@@ -51,3 +52,7 @@ To build the website:
 Both scripts can be found at the root of this git repo.
 
 
+== Updating the Generated System Overview
+
+The xref:system:generated:system-overview.adoc[System Overview] contains a set of `.adoc` files that are generated from Java classes.
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/ApplicationException.adoc b/antora/components/system/modules/generated/pages/index/applib/ApplicationException.adoc
deleted file mode 100644
index 96e8e35..0000000
--- a/antora/components/system/modules/generated/pages/index/applib/ApplicationException.adoc
+++ /dev/null
@@ -1,30 +0,0 @@
-= ApplicationException : _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 [...]
-
-Indicates that an exceptional condition/problem has occurred within the application's domain logic.
-
-Throwing this exception is equivalent to calling _DomainObjectContainer#raiseError(String)_ . The framework will trap the error and display the exception message as a warning.
-
-This exception should only be thrown for "recoverable" exceptions, that is, those which could be anticipated by the application. It should not be thrown for fatal, unanticipated exceptions.
-
-The framework attempts to apply some heuristics; if the underlying Isis transaction has been aborted (for example as the result of a problem persisting some data) but then the application attempts to throw this exception, the exception will be promoted to a fatal exception.
-
-Note that this exception has identical semantics to xref:system:generated:index/applib/RecoverableException.adoc[RecoverableException] , and can be considered a synonym.
-
-.Java Sources
-[source,java]
-----
-class ApplicationException {
-
-  ApplicationException(final String msg)
-
-  ApplicationException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod)
-
-  ApplicationException(final Throwable cause)
-
-  ApplicationException(final String msg, final Throwable cause)
-
-  ApplicationException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod, final Throwable cause)
-}
-----
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/NonRecoverableException.adoc b/antora/components/system/modules/generated/pages/index/applib/NonRecoverableException.adoc
deleted file mode 100644
index c340433..0000000
--- a/antora/components/system/modules/generated/pages/index/applib/NonRecoverableException.adoc
+++ /dev/null
@@ -1,56 +0,0 @@
-= NonRecoverableException : _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 [...]
-
-Indicates that an unexpected, non-recoverable (fatal) exception has occurred within the application logic.
-
-Throwing this exception will (dependent on the viewer) result in some sort of an error page being displayed to the user.
-
-Note that this exception has identical semantics to xref:system:generated:index/applib/FatalException.adoc[FatalException] (of which it is the immediate superclass) and can be considered a synonym.
-
-.Java Sources
-[source,java]
-----
-class NonRecoverableException {
-
-  NonRecoverableException(final String msg)
-
-  NonRecoverableException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod)
-
-  NonRecoverableException(final Throwable cause)
-
-  NonRecoverableException(final String msg, final Throwable cause)
-
-  NonRecoverableException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod, final Throwable cause)
-
-  String getMessage()
-
-  TranslatableString getTranslatableMessage()
-
-  String getTranslationContext()
-
-  void tryRun(_Functions.CheckedRunnable checkedRunnable) // <.>
-}
-----
-
-<.> `[teal]#*_tryRun_*#(CheckedRunnable checkedRunnable)` : `void`
-+
---
-----
-
-Path path = ...
-
-## OLD
-
-try {
-    Files.createDirectories(path);
-} catch (IOException e) {
-    throw new NonRecoverableException(e);
-}
-
-## NEW
-
-NonRecoverableException.tryRun(()->Files.createDirectories(path));
-----
-
---
-
diff --git a/antora/components/system/modules/generated/pages/index/applib/RecoverableException.adoc b/antora/components/system/modules/generated/pages/index/applib/exceptions/RecoverableException.adoc
similarity index 83%
rename from antora/components/system/modules/generated/pages/index/applib/RecoverableException.adoc
rename to antora/components/system/modules/generated/pages/index/applib/exceptions/RecoverableException.adoc
index cf986e0..fd4714a 100644
--- a/antora/components/system/modules/generated/pages/index/applib/RecoverableException.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/exceptions/RecoverableException.adoc
@@ -3,14 +3,12 @@
 
 Indicates that an exceptional condition/problem has occurred within the application's domain logic.
 
-Throwing this exception is equivalent to calling _DomainObjectContainer#raiseError(String)_ . The framework will trap the error and display the exception message as a warning.
+Throwing this exception is equivalent to calling _MessageService#raiseError(String)_ . The framework will trap the error and display the exception message as a warning.
 
 This exception should only be thrown for "recoverable" exceptions, that is, those which could be anticipated by the application. It should not be thrown for fatal, unanticipated exceptions.
 
 The framework attempts to apply some heuristics; if the underlying Isis transaction has been aborted (for example as the result of a problem persisting some data) but then the application attempts to throw this exception, the exception will be promoted to a fatal exception.
 
-Note that this exception has identical semantics to xref:system:generated:index/applib/ApplicationException.adoc[ApplicationException] (of which it is the immediate superclass), and can be considered a synonym.
-
 .Java Sources
 [source,java]
 ----
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/TranslatableException.adoc b/antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc
similarity index 89%
rename from antora/components/system/modules/generated/pages/index/applib/services/exceprecog/TranslatableException.adoc
rename to antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc
index cb10445..82d5bd1 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/TranslatableException.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/exceptions/TranslatableException.adoc
@@ -21,7 +21,7 @@ interface TranslatableException {
 --
 In the spirit of _Exception#getLocalizedMessage()_ , but using _org.apache.isis.applib.services.i18n.TranslatableString_ instead.
 
-If returnsnull, then _Exception#getMessage()_ will be used as a fallback. This design allows the Isis-provided _org.apache.isis.applib.RecoverableException_ and _org.apache.isis.applib.NonRecoverableException_ to provide constructors that accept a _org.apache.isis.applib.services.i18n.TranslatableString_ , but can be left as null for any existing code.
+If returnsnull, then _Exception#getMessage()_ will be used as a fallback. This design allows the Isis-provided _org.apache.isis.applib.exceptions.RecoverableException_ and _org.apache.isis.applib.exceptions.UnrecoverableException_ to provide constructors that accept a _org.apache.isis.applib.services.i18n.TranslatableString_ , but can be left as null for any existing code.
 --
 <.> `[teal]#*getTranslationContext*#()` : `String`
 +
diff --git a/antora/components/system/modules/generated/pages/index/applib/FatalException.adoc b/antora/components/system/modules/generated/pages/index/applib/exceptions/UnrecoverableException.adoc
similarity index 61%
rename from antora/components/system/modules/generated/pages/index/applib/FatalException.adoc
rename to antora/components/system/modules/generated/pages/index/applib/exceptions/UnrecoverableException.adoc
index 84b5fe7..d427f2f 100644
--- a/antora/components/system/modules/generated/pages/index/applib/FatalException.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/exceptions/UnrecoverableException.adoc
@@ -1,22 +1,30 @@
-= FatalException : _class_
+= UnrecoverableException : _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 [...]
 
 Indicates that an unexpected, non-recoverable (fatal) exception has occurred within the application logic.
 
 Throwing this exception will (dependent on the viewer) result in some sort of an error page being displayed to the user.
 
-Note that this exception has identical semantics to xref:system:generated:index/applib/NonRecoverableException.adoc[NonRecoverableException] , and can be considered a synonym.
-
 .Java Sources
 [source,java]
 ----
-class FatalException {
+class UnrecoverableException {
+
+  UnrecoverableException(final String msg)
+
+  UnrecoverableException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod)
+
+  UnrecoverableException(final Throwable cause)
+
+  UnrecoverableException(final String msg, final Throwable cause)
+
+  UnrecoverableException(final TranslatableString translatableMessage, final Class<?> translationContextClass, final String translationContextMethod, final Throwable cause)
 
-  FatalException(final String msg)
+  String getMessage()
 
-  FatalException(final Throwable cause)
+  TranslatableString getTranslatableMessage()
 
-  FatalException(final String msg, final Throwable cause)
+  String getTranslationContext()
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/PersistFailedException.adoc b/antora/components/system/modules/generated/pages/index/applib/exceptions/unrecoverable/PersistFailedException.adoc
similarity index 87%
rename from antora/components/system/modules/generated/pages/index/applib/PersistFailedException.adoc
rename to antora/components/system/modules/generated/pages/index/applib/exceptions/unrecoverable/PersistFailedException.adoc
index be08a3a..72684d1 100644
--- a/antora/components/system/modules/generated/pages/index/applib/PersistFailedException.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/exceptions/unrecoverable/PersistFailedException.adoc
@@ -3,7 +3,7 @@
 
 Indicates that the persistence of an object failed.
 
-This exception is intended to represent an unexpected and non-recoverable condition (eg a unique/primary key/ foreign key constaint has been violated), and so is a subclass of xref:system:generated:index/applib/NonRecoverableException.adoc[NonRecoverableException] . Throwing this exception will therefore result in (some sort of) error page being displayed to the user.
+This exception is intended to represent an unexpected and non-recoverable condition (eg a unique/primary key/ foreign key constaint has been violated), and so is a subclass of xref:system:generated:index/applib/exceptions/UnrecoverableException.adoc[UnrecoverableException] . Throwing this exception will therefore result in (some sort of) error page being displayed to the user.
 
 .Java Sources
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/applib/RepositoryException.adoc b/antora/components/system/modules/generated/pages/index/applib/exceptions/unrecoverable/RepositoryException.adoc
similarity index 87%
rename from antora/components/system/modules/generated/pages/index/applib/RepositoryException.adoc
rename to antora/components/system/modules/generated/pages/index/applib/exceptions/unrecoverable/RepositoryException.adoc
index 431f428..c7d396d 100644
--- a/antora/components/system/modules/generated/pages/index/applib/RepositoryException.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/exceptions/unrecoverable/RepositoryException.adoc
@@ -3,7 +3,7 @@
 
 Indicates that a repository method has failed.
 
-This exception is intended to represent an unexpected and non-recoverable condition (eg a syntax error in some JDOQL query syntax or similar), and so is a subclass of xref:system:generated:index/applib/NonRecoverableException.adoc[NonRecoverableException] . Throwing this exception will therefore result in (some sort of) error page being displayed to the user.
+This exception is intended to represent an unexpected and non-recoverable condition (eg a syntax error in some JDOQL query syntax or similar), and so is a subclass of xref:system:generated:index/applib/exceptions/UnrecoverableException.adoc[UnrecoverableException] . Throwing this exception will therefore result in (some sort of) error page being displayed to the user.
 
 .Java Sources
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc
index 169cfa3..03e6942 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizer.adoc
@@ -7,7 +7,7 @@ Rather than redirecting to a general-purpose error page, the message (correspond
 
 More than one implementation of xref:system:generated:index/applib/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer] can be registered; they will all be consulted (in the order as specified by the @Order annotation) to determine if they recognize the exception. The message returned by the first service recognizing the exception is used.
 
-The Isis framework also provides a default implementation of this service that recognizes any _org.apache.isis.applib.RecoverableException_ , simply returning the exception's _org.apache.isis.applib.RecoverableException#getMessage() message_ . This allows any component or domain object to throw this exception with the knowledge that it will be handled appropriately.
+The Isis framework also provides a default implementation of this service that recognizes any _org.apache.isis.applib.exceptions.RecoverableException_ , simply returning the exception's _org.apache.isis.applib.exceptions.RecoverableException#getMessage() message_ . This allows any component or domain object to throw this exception with the knowledge that it will be handled appropriately.
 
 Initially introduced for the Wicket viewer; check the documentation of other viewers to determine whether they also support this service.
 
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerForType.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerForType.adoc
new file mode 100644
index 0000000..65a2473
--- /dev/null
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerForType.adoc
@@ -0,0 +1,26 @@
+= ExceptionRecognizerForType : _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 [...]
+
+A specific implementation of xref:system:generated:index/applib/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer] that looks for an exception of the type provided in the constructor and, if found anywhere in the causal chain, then returns a non-null message indicating that the exception has been recognized.
+
+If a messaging-parsing _Function_ is provided through the constructor, then the message can be altered. Otherwise the exception's _Throwable#getMessage() message_ is returned as-is.
+
+.Java Sources
+[source,java]
+----
+class ExceptionRecognizerForType {
+
+  ExceptionRecognizerForType(final Category category, final Class<? extends Exception> exceptionType, final UnaryOperator<String> messageParser)
+
+  ExceptionRecognizerForType(final Category category, final Predicate<Throwable> predicate, final UnaryOperator<String> messageParser)
+
+  ExceptionRecognizerForType(final Category category, final Class<? extends Exception> exceptionType)
+
+  ExceptionRecognizerForType(final Class<? extends Exception> exceptionType, final UnaryOperator<String> messageParser)
+
+  ExceptionRecognizerForType(final Predicate<Throwable> predicate, final UnaryOperator<String> messageParser)
+
+  ExceptionRecognizerForType(Class<? extends Exception> exceptionType)
+}
+----
+
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
index a11d862..b10205c 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/exceprecog/ExceptionRecognizerService.adoc
@@ -8,19 +8,19 @@ interface ExceptionRecognizerService {
 
   Can<ExceptionRecognizer> getExceptionRecognizers() // <.>
 
-  Optional<Recognition> recognize(Exception ex) // <.>
+  Optional<Recognition> recognize(Throwable ex) // <.>
 
-  Optional<Recognition> recognizeFromSelected(Can<ExceptionRecognizer> recognizers, Exception ex) // <.>
+  Optional<Recognition> recognizeFromSelected(Can<ExceptionRecognizer> recognizers, Throwable ex) // <.>
 }
 ----
 
 <.> `[teal]#*getExceptionRecognizers*#()` : `Can<xref:system:generated:index/applib/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer]>`
-<.> `[teal]#*recognize*#(Exception ex)` : `Optional<Recognition>`
+<.> `[teal]#*recognize*#(Throwable ex)` : `Optional<Recognition>`
 +
 --
 Takes into consideration ExceptionRecognizers as given by _#getExceptionRecognizers()_ .
 --
-<.> `[teal]#*recognizeFromSelected*#(Can<xref:system:generated:index/applib/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer]> recognizers, Exception ex)` : `Optional<Recognition>`
+<.> `[teal]#*recognizeFromSelected*#(Can<xref:system:generated:index/applib/services/exceprecog/ExceptionRecognizer.adoc[ExceptionRecognizer]> recognizers, Throwable ex)` : `Optional<Recognition>`
 +
 --
 Takes into consideration ExceptionRecognizers as given by _recognizers_ .
diff --git a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc
index 1090195..705d42b 100644
--- a/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc
+++ b/antora/components/system/modules/generated/pages/index/applib/services/i18n/TranslatableString.adoc
@@ -71,6 +71,6 @@ The text to be translated; depends on whether _#isPluralForm()_ and whether to b
 
 Any placeholders will _not_ have been replaced.
 
-NB: this method is exposed only so that implementations of _org.apache.isis.applib.services.exceprecog.TranslatableException_ can return a non-null _Exception#getMessage() message_ when only a translatable message has been provided.
+NB: this method is exposed only so that implementations of _org.apache.isis.applib.exceptions.TranslatableException_ can return a non-null _Exception#getMessage() message_ when only a translatable message has been provided.
 --
 
diff --git a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/schema/JdoSchemaService.adoc b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/schema/JdoSchemaService.adoc
index 75e4f54..e8a242a 100644
--- a/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/schema/JdoSchemaService.adoc
+++ b/antora/components/system/modules/generated/pages/index/persistence/jdo/datanucleus/schema/JdoSchemaService.adoc
@@ -26,7 +26,7 @@ DnSettings dnSettings;
 
   void init()
 
-  void onAppLifecycleEvent(AppLifecycleEvent event)
+  void onMetamodelEvent(MetamodelEvent event)
 }
 ----
 
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index 2e11188..7c2c7c7 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -42,7 +42,7 @@ skinparam rectangle<<5>> {
 package "Base\n[Software System]" {
   rectangle "==Apache Isis\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
   rectangle "==Apache Isis (Aggregator)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Antora\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis - Antora\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
   rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
 }
 2 .[#707070].> 4 : ""
@@ -66,7 +66,7 @@ Folder: /
         others via profiles, that are not activiated per default.
         The parent POM of the core framework is isis-parent/pom.xml.
 
-|Apache Isis Antora
+|Apache Isis - Antora
 [source,yaml]
 ----
 Group: org.apache.isis
@@ -335,7 +335,7 @@ _Dependencies_
 
 _Document Index Entries_
 
-xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/ApplicationException.adoc[ApplicationException], xref:system:generated:index/applib/FatalException.adoc[FatalException], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/NonRecoverableException.adoc[NonRecoverableException], xref:system:generated:index/applib/PersistFailedException.adoc[PersistFailedException], xref:system:gene [...]
+xref:system:generated:index/applib/AbstractViewModel.adoc[AbstractViewModel], xref:system:generated:index/applib/Identifier.adoc[Identifier], xref:system:generated:index/applib/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:system:generated:index/applib/ViewModel.adoc[ViewModel], xref:system:generated:index/applib/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:system:generated:index/applib/adapters/DefaultsProvider.adoc[DefaultsProvider],  [...]
 
 |Apache Isis Core - Code Gen (ByteBuddy)
 [source,yaml]
@@ -499,7 +499,7 @@ Folder: \core\runtime
 
 _Components_
 
-* o.a.i.core.runtime.events.AppLifecycleEventService
+* o.a.i.core.runtime.events.MetamodelEventService
 * o.a.i.core.runtime.events.TransactionEventEmitter
 
 _Dependencies_
@@ -528,12 +528,11 @@ _Components_
 * o.a.i.core.runtimeservices.confmenu.ConfigurationViewServiceDefault
 * o.a.i.core.runtimeservices.email.EmailServiceDefault
 * o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring
-* o.a.i.core.runtimeservices.exceprecog.ExceptionRecognizerServiceDefault
 * o.a.i.core.runtimeservices.executor.MemberExecutorServiceDefault
 * o.a.i.core.runtimeservices.factory.FactoryServiceDefault
 * o.a.i.core.runtimeservices.homepage.HomePageResolverServiceDefault
 * o.a.i.core.runtimeservices.i18n.po.TranslationServicePo
-* o.a.i.core.runtimeservices.ixn.InteractionDtoServiceInternalDefault
+* o.a.i.core.runtimeservices.interaction.InteractionDtoServiceInternalDefault
 * o.a.i.core.runtimeservices.jaxb.JaxbServiceDefault
 * o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault
 * o.a.i.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3
@@ -543,17 +542,22 @@ _Components_
 * o.a.i.core.runtimeservices.publish.EntityPropertyChangePublisherDefault
 * o.a.i.core.runtimeservices.publish.ExecutionPublisherDefault
 * o.a.i.core.runtimeservices.queryresultscache.QueryResultsCacheDefault
+* o.a.i.core.runtimeservices.recognizer.ExceptionRecognizerServiceDefault
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForDataAlreadyExists
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForObjectNotFound
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForRelatedDataExists
+* o.a.i.core.runtimeservices.recognizer.dae.impl.ExceptionRecognizerForUnableToSaveData
 * o.a.i.core.runtimeservices.repository.RepositoryServiceDefault
 * o.a.i.core.runtimeservices.routing.RoutingServiceDefault
 * o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault
 * o.a.i.core.runtimeservices.session.InteractionFactoryDefault
 * o.a.i.core.runtimeservices.sudo.SudoServiceDefault
+* o.a.i.core.runtimeservices.transaction.TransactionServiceSpring
 * o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression
 * o.a.i.core.runtimeservices.user.UserServiceDefault
 * o.a.i.core.runtimeservices.userprof.UserProfileServiceDefault
 * o.a.i.core.runtimeservices.userreg.EmailNotificationServiceDefault
 * o.a.i.core.runtimeservices.wrapper.WrapperFactoryDefault
-* o.a.i.core.runtimeservices.xactn.TransactionServiceSpring
 * o.a.i.core.runtimeservices.xml.XmlServiceDefault
 * o.a.i.core.runtimeservices.xmlsnapshot.XmlSnapshotServiceDefault
 
@@ -1237,10 +1241,9 @@ _Components_
 * o.a.i.persistence.jdo.datanucleus.config.DnEntityDiscoveryListener
 * o.a.i.persistence.jdo.datanucleus.config.DnSettings
 * o.a.i.persistence.jdo.datanucleus.entities.DnEntityStateProvider
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForJDODataStoreException
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForJDODataStoreExceptionIntegrityConstraintViolationForeignKeyNoActionException
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForJDOObjectNotFoundException
-* o.a.i.persistence.jdo.datanucleus.exceptions.recognizers.ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException
+* o.a.i.persistence.jdo.datanucleus.jdosupport.JdoSupportServiceDefault
+* o.a.i.persistence.jdo.datanucleus.metamodel.JdoDataNucleusProgrammingModel
+* o.a.i.persistence.jdo.datanucleus.schema.JdoSchemaService
 
 _Dependencies_
 
@@ -1269,12 +1272,6 @@ Folder: \persistence\jdo\integration
 ----
 |JDO Integration (powered by DataNucleus)
 
-_Components_
-
-* o.a.i.persistence.jdo.integration.jdosupport.IsisJdoSupportDN5
-* o.a.i.persistence.jdo.integration.metamodel.JdoIntegrationProgrammingModel
-* o.a.i.persistence.jdo.integration.schema.JdoSchemaService
-
 _Dependencies_
 
 * org.apache.isis.commons:isis-commons:jar:<managed>
@@ -1419,6 +1416,10 @@ Folder: \persistence\jpa\metamodel
 ----
 |JPA Metamodel Facets / Programming Model
 
+_Components_
+
+* o.a.i.persistence.jpa.metamodel.JpaProgrammingModel
+
 _Dependencies_
 
 * org.apache.isis.core:isis-core-internaltestsupport:jar:<managed>
@@ -1646,12 +1647,12 @@ skinparam rectangle<<20>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<21>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -3521,7 +3522,15 @@ Artifact: isis-extensions-secman-persistence-jpa
 Type: jar
 Folder: \extensions\security\secman\persistence-jpa
 ----
-|_Dependencies_
+|_Components_
+
+* o.a.i.extensions.secman.jpa.dom.permission.ApplicationPermissionRepository
+* o.a.i.extensions.secman.jpa.dom.role.ApplicationRoleRepository
+* o.a.i.extensions.secman.jpa.dom.tenancy.ApplicationTenancyRepository
+* o.a.i.extensions.secman.jpa.dom.user.ApplicationUserRepository
+* o.a.i.extensions.secman.jpa.seed.SeedSecurityModuleService
+
+_Dependencies_
 
 * org.apache.isis.core:isis-core-runtime:jar:<managed>
 * org.apache.isis.extensions:isis-extensions-secman-api:jar:<managed>
@@ -3587,12 +3596,12 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<11>> {
+skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -3687,12 +3696,12 @@ skinparam rectangle<<20>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<21>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -4107,12 +4116,12 @@ skinparam rectangle<<8>> {
 }
 package "Tooling\n[Software System]" {
   rectangle "==Apache Isis - Tooling\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Tooling - C4 Modeling\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
-  rectangle "==Apache Isis Tooling - CLI (Command Line Interface)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis Tooling - Java Model (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis Tooling - Java to Asciidoc (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis Tooling - Model for AsciiDoc\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis Tooling - Project Model (Code mining)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis - Tooling - C4 Modeling\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
+  rectangle "==Apache Isis - Tooling - CLI (Command Line Interface)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis - Tooling - Java Model (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis - Tooling - Java to Asciidoc (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis - Tooling - Model for AsciiDoc\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+  rectangle "==Apache Isis - Tooling - Project Model (Code mining)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
 }
 2 .[#707070].> 3 : ""
 2 .[#707070].> 4 : ""
@@ -4150,7 +4159,7 @@ _Dependencies_
 * org.slf4j:slf4j-api:jar:<managed>
 * org.springframework.boot:spring-boot-starter-log4j2:jar:<managed>
 
-|Apache Isis Tooling - C4 Modeling
+|Apache Isis - Tooling - C4 Modeling
 [source,yaml]
 ----
 Group: org.apache.isis.tooling
@@ -4158,8 +4167,8 @@ Artifact: isis-tooling-c4modeling
 Type: jar
 Folder: \tooling\c4modeling
 ----
-|Library for programmatic C4 Model generation. 
-        
+|Library for programmatic C4 Model generation.
+
         See https://c4model.com/
 
 _Dependencies_
@@ -4168,7 +4177,7 @@ _Dependencies_
 * com.structurizr:structurizr-plantuml:jar:<managed>
 * org.apache.isis.commons:isis-commons:jar:<managed>
 
-|Apache Isis Tooling - CLI (Command Line Interface)
+|Apache Isis - Tooling - CLI (Command Line Interface)
 [source,yaml]
 ----
 Group: org.apache.isis.tooling
@@ -4188,7 +4197,7 @@ _Dependencies_
 * org.apache.isis.tooling:isis-tooling-model4adoc:jar:<managed>
 * org.apache.isis.tooling:isis-tooling-projectmodel:jar:<managed>
 
-|Apache Isis Tooling - Java to Asciidoc (Code Mining)
+|Apache Isis - Tooling - Java to Asciidoc (Code Mining)
 [source,yaml]
 ----
 Group: org.apache.isis.tooling
@@ -4205,7 +4214,7 @@ _Dependencies_
 * org.apache.isis.tooling:isis-tooling-model4adoc:jar:<managed>
 * org.jsoup:jsoup:jar:<managed>
 
-|Apache Isis Tooling - Java Model (Code Mining)
+|Apache Isis - Tooling - Java Model (Code Mining)
 [source,yaml]
 ----
 Group: org.apache.isis.tooling
@@ -4221,7 +4230,7 @@ _Dependencies_
 * com.github.javaparser:javaparser-core:jar:${javaparser.version}
 * org.apache.isis.commons:isis-commons:jar:<managed>
 
-|Apache Isis Tooling - Model for AsciiDoc
+|Apache Isis - Tooling - Model for AsciiDoc
 [source,yaml]
 ----
 Group: org.apache.isis.tooling
@@ -4229,13 +4238,13 @@ Artifact: isis-tooling-model4adoc
 Type: jar
 Folder: \tooling\model4adoc
 ----
-|Library for programmatic AsciiDoc generation. 
-        
+|Library for programmatic AsciiDoc generation.
+
         The AsciiDoc name is trademarked by the Eclipse Foundation (https://www.eclipse.org/).
-		This project is *not* part of the specification effort for _AsciiDoc_ under the 
+		This project is *not* part of the specification effort for _AsciiDoc_ under the
 		AsciiDoc Working Group. See https://projects.eclipse.org/proposals/asciidoc-language
-		and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to 
-		help with transfer of source code, if any project (under the umbrella of the 
+		and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to
+		help with transfer of source code, if any project (under the umbrella of the
 		AsciiDoc Working Group) is willing to take over.
 
 _Dependencies_
@@ -4243,7 +4252,7 @@ _Dependencies_
 * org.apache.isis.commons:isis-commons:jar:<managed>
 * org.asciidoctor:asciidoctorj:jar:<managed>
 
-|Apache Isis Tooling - Project Model (Code mining)
+|Apache Isis - Tooling - Project Model (Code mining)
 [source,yaml]
 ----
 Group: org.apache.isis.tooling
@@ -4374,37 +4383,36 @@ Folder: \examples\demo\domain
 * demoapp.dom._infra.resources.ResourceReaderService
 * demoapp.dom._infra.samples.NameSamples
 * demoapp.dom._infra.urlencoding.UrlEncodingServiceNaiveInMemory
-* demoapp.dom.annotDomain.Action.commandPublishing.ActionCommandPublishingJdoEntities
-* demoapp.dom.annotDomain.Action.commandPublishing.ActionCommandPublishingJdoSeedService
-* demoapp.dom.annotDomain.Action.executionPublishing.ActionExecutionPublishingJdoEntities
-* demoapp.dom.annotDomain.Action.executionPublishing.ActionExecutionPublishingJdoSeedService
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoSeedService
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoSeedService
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities
-* demoapp.dom.annotDomain.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService
-* demoapp.dom.annotDomain.DomainObject.nature.viewmodels.jaxbrefentity.ChildJdoEntities
-* demoapp.dom.annotDomain.DomainObject.nature.viewmodels.jaxbrefentity.seed.ChildJdoSeedService
-* demoapp.dom.annotDomain.Property.commandPublishing.PropertyCommandPublishingJdoEntities
-* demoapp.dom.annotDomain.Property.commandPublishing.PropertyCommandPublishingJdoSeedService
-* demoapp.dom.annotDomain.Property.executionPublishing.PropertyExecutionPublishingJdoEntities
-* demoapp.dom.annotDomain.Property.executionPublishing.PropertyExecutionPublishingJdoSeedService
-* demoapp.dom.annotDomain.Property.projecting.jdo.PropertyProjectingChildJdoEntities
-* demoapp.dom.annotDomain.Property.projecting.jdo.PropertyProjectingChildJdoSeedService
-* demoapp.dom.annotDomain._changes.EntityChangesSubscriberToCaptureChangesInMemory
-* demoapp.dom.annotDomain._commands.ExposePersistedCommands$TableColumnOrderDefault
-* demoapp.dom.annotDomain._interactions.ExecutionListenerToCaptureInteractionsInMemory
-* demoapp.dom.annotLayout.PropertyLayout.navigable.FileTreeNodeService
-* demoapp.dom.annotLayout.PropertyLayout.repainting.PdfJsViewerAdvisorFallback
-* demoapp.dom.misc.error.service.DemoErrorReportingService
-* demoapp.dom.misc.events.DemoEventSubscriber
-* demoapp.dom.misc.events.EventLogRepository
-* demoapp.dom.misc.experimental.jee.DemoRequestScopedBean
-* demoapp.dom.misc.experimental.jee.JeeDemoService
-* demoapp.dom.misc.experimental.tuple.NumberConstantRepository
+* demoapp.dom.domain._changes.EntityChangesSubscriberToCaptureChangesInMemory
+* demoapp.dom.domain._commands.ExposePersistedCommands$TableColumnOrderDefault
+* demoapp.dom.domain._interactions.ExecutionListenerToCaptureInteractionsInMemory
+* demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishingJdoEntities
+* demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishingJdoSeedService
+* demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingJdoEntities
+* demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingJdoSeedService
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoEntities
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledJdoSeedService
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoEntities
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectAuditingEnabledJdoSeedService
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoSeedService
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities
+* demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoSeedService
+* demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.ChildJdoEntities
+* demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.seed.ChildJdoSeedService
+* demoapp.dom.domain.objects.other.embedded.NumberConstantJdoRepository
+* demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandPublishingJdoEntities
+* demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandPublishingJdoSeedService
+* demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecutionPublishingJdoEntities
+* demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecutionPublishingJdoSeedService
+* demoapp.dom.domain.properties.Property.projecting.jdo.PropertyProjectingChildJdoEntities
+* demoapp.dom.domain.properties.Property.projecting.jdo.PropertyProjectingChildJdoSeedService
+* demoapp.dom.domain.properties.PropertyLayout.navigable.FileTreeNodeService
+* demoapp.dom.domain.properties.PropertyLayout.repainting.PdfJsViewerAdvisorFallback
+* demoapp.dom.featured.customui.geocoding.GeoapifyClient
+* demoapp.dom.services.core.errorreportingservice.ErrorReportingServiceDemoImplementation
+* demoapp.dom.services.core.eventbusservice.EventLogEntryJdoRepository
+* demoapp.dom.services.core.eventbusservice.EventSubscriberDemoImplementation
 * demoapp.dom.services.core.wrapperFactory.WrapperFactoryJdoEntities
 * demoapp.dom.services.core.wrapperFactory.WrapperFactoryJdoSeedService
 * demoapp.dom.services.extensions.secman.apptenancy.ApplicationTenancyEvaluatorForDemo
@@ -4523,7 +4531,6 @@ Folder: \examples\demo\domain
 * demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoSeedService
 * demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntities
 * demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoSeedService
-* demoapp.dom.ui.custom.geocoding.GeoapifyClient
 
 _Dependencies_
 
diff --git a/isis-tooling.yml b/isis-tooling.yml
index a28a697..523a205 100644
--- a/isis-tooling.yml
+++ b/isis-tooling.yml
@@ -18,7 +18,7 @@
 #
 
 projectDoc:
-  fixOrphandedAdocIncludeStatements: true
+  fixOrphanedAdocIncludeStatements: true
   namespacePartsSkipCount: 3
   description: "These tables summarize all Maven artifacts available with _Apache Isis_."
   artifactGroups:
@@ -26,26 +26,26 @@ projectDoc:
     Commons: org.apache.isis.commons.*
     Core: org.apache.isis.core.*
     App: org.apache.isis.app.*
-    
+
     Mavendeps: org.apache.isis.mavendeps.*
     Mappings: org.apache.isis.mappings.*
-    
+
     Persistence: org.apache.isis.persistence.*
     Security: org.apache.isis.security.*
-    
+
     Valuetypes: org.apache.isis.valuetypes.*
     Viewer: org.apache.isis.viewer.*
 
     Testing: org.apache.isis.testing.*
     Regression Tests: org.apache.isis.regressiontests.*
-    
+
     Extensions: org.apache.isis.extensions.*
     Subdomains: org.apache.isis.subdomains.*
-    
+
     Tooling: org.apache.isis.tooling.*
-    
+
     Examples: org.apache.isis.examples.*
-    
+
     Incubator: org.apache.isis.incubator.*
     Legacy: org.apache.isis.legacy.*
-     
+
diff --git a/tooling/cli/pom.xml b/tooling/cli/pom.xml
index dc60d65..e8a6dac 100644
--- a/tooling/cli/pom.xml
+++ b/tooling/cli/pom.xml
@@ -42,6 +42,7 @@
 							<goal>single</goal>
 						</goals>
 						<configuration>
+							<finalName>isis-tooling-cli</finalName>
 							<archive>
 								<manifest>
 									<mainClass>
@@ -52,6 +53,7 @@
 							<descriptorRefs>
 								<descriptorRef>jar-with-dependencies</descriptorRef>
 							</descriptorRefs>
+							<appendAssemblyId>false</appendAssemblyId>
 						</configuration>
 					</execution>
 				</executions>
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
index 8cce64d..caee899 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/CliConfig.java
@@ -29,13 +29,13 @@ import lombok.NonNull;
 
 @Data
 public class CliConfig {
-    
+
     private ProjectDoc projectDoc = new ProjectDoc();
-        
+
     @Data
     public static class ProjectDoc {
         private String description = "These tables summarize all Maven artifacts available with this project.";
-        private String licenseHeader = 
+        private String licenseHeader =
                 "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, "
@@ -46,38 +46,38 @@ public class CliConfig {
                 + "or implied. See the License for the specific language governing permissions and limitations under "
                 + "the License.";
         private LinkedHashMap<String, String> artifactGroups = new LinkedHashMap<>();
-        
+
         private File outputRootFolder = null; // where to write eg. system-overview.adoc
-        
+
         private String documentPagesPath = "pages";
         private String documentGlobalIndexPath = "pages/index";
         private String documentGlobalIndexXrefPageIdFormat = "system:generated:index/%s.adoc";
-        
-        private boolean fixOrphandedAdocIncludeStatements = false;
-        
+
+        private boolean fixOrphanedAdocIncludeStatements = false;
+
         private String systemOverviewFilename = "system-overview.adoc";
 
         // when 3 eg. skips first three parts of the package names 'org.apache.isis'
         private int namespacePartsSkipCount = 0;
-        
+
         public boolean isDryRun() {
             return getOutputRootFolder() == null;
         }
-        
+
         public File getDocumentIndexFolder() {
             return Optional.ofNullable(getOutputRootFolder())
                     .map(root->new File(root, getDocumentGlobalIndexPath()))
                     .orElse(null);
         }
-        
+
         public File getDocumentPagesFolder() {
             return Optional.ofNullable(getOutputRootFolder())
                     .map(root->new File(root, getDocumentPagesPath()))
                     .orElse(null);
         }
-        
+
     }
-    
+
     // -- LOADING
 
     public static CliConfig read(final @NonNull File file) {
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
index dff3b35..6ac54e3 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/adocfix/OrphanedIncludeStatementFixer.java
@@ -38,29 +38,29 @@ public final class OrphanedIncludeStatementFixer {
 
     public static void fixIncludeStatements(
             final @NonNull SortedSet<File> adocFiles,
-            final @NonNull CliConfig cliConfig, 
+            final @NonNull CliConfig cliConfig,
             final @NonNull J2AdocContext j2aContext) {
-        
+
         if(cliConfig.getProjectDoc().isDryRun()) {
             System.out.println("IncludeStatementFixer: skip (dry-run)");
             return;
         }
-        
-        if(!cliConfig.getProjectDoc().isFixOrphandedAdocIncludeStatements()) {
+
+        if(!cliConfig.getProjectDoc().isFixOrphanedAdocIncludeStatements()) {
             System.out.println("IncludeStatementFixer: skip (disabled via config, fixOrphandedAdocIncludeStatements=false)");
             return;
         }
-        
+
         System.out.println(String.format("IncludeStatementFixer: about to process %d adoc files", adocFiles.size()));
-        
+
         val totalFixed = _Refs.intRef(0);
-        
+
         adocFiles.forEach(adocFile->{
-            //_Probe.errOut("adoc file found: %s", adocFile);    
-        
+            //_Probe.errOut("adoc file found: %s", adocFile);
+
             val fixedCounter = _Refs.intRef(0);
             val originLines = _Text.readLinesFromFile(adocFile, StandardCharsets.UTF_8);
-            
+
             val lines = IncludeStatements.rewrite(originLines, include->{
                 if(include.isLocal()
                         || !( "system".equals(include.getComponent()) // TODO should be reasoned from config
@@ -70,7 +70,7 @@ public final class OrphanedIncludeStatementFixer {
 
                 val correctedIncludeStatement = _Refs.<IncludeStatement>objectRef(null);
                 val typeSimpleName = include.getCanonicalName();
-                
+
                 j2aContext.getUnit(LookupKey.typeSimpleName(typeSimpleName))
                 .ifPresent(unit->{
 
@@ -81,41 +81,41 @@ public final class OrphanedIncludeStatementFixer {
                     .namespace(unit.getNamespace().stream()
                             .skip(j2aContext.getNamespacePartsSkipCount())
                             .collect(Can.toCan())
-                            .add(0, "index") //TODO this is antora config specific 
+                            .add(0, "index") //TODO this is antora config specific
                             )
                     .canonicalName(typeSimpleName)
                     .ext(".adoc")
                     .options("[leveloffset=+2]")
                     .build();
-                    
+
                     val includeLineShouldBe = expected.toAdocAsString();
-                    
+
                     if(!includeLineShouldBe.equals(include.getMatchingLine())) {
                         System.out.printf("mismatch\n %s\n %s\n", includeLineShouldBe, include.getMatchingLine());
-                        correctedIncludeStatement.setValue(expected);   
+                        correctedIncludeStatement.setValue(expected);
                         fixedCounter.inc();
                     }
-                    
+
                 });
-                
+
                 return correctedIncludeStatement
                         .getValue()
                         .orElse(null); // keep original line, don't mangle
-                 
+
             });
-            
+
             if(fixedCounter.getValue()>0) {
-                
+
                 // write lines to file
                 _Text.writeLinesToFile(lines, adocFile, StandardCharsets.UTF_8);
-                
+
                 totalFixed.update(n->n + fixedCounter.getValue());
             }
-            
+
         });
-        
+
         System.out.println(String.format("IncludeStatementFixer: all done. (%d orphanded inlcudes fixed)", totalFixed.getValue()));
-        
+
     }
 
     // -- HELPER
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java
index deb41ba..fbddcbb 100644
--- a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/CliConfigTest.java
@@ -48,7 +48,7 @@ class CliConfigTest {
                 .nullableOrElse(null);
         assertConfigIsPopulated(config);
     }
-    
+
     // -- HELPER
 
     private void assertConfigIsPopulated(CliConfig config) {
@@ -57,9 +57,9 @@ class CliConfigTest {
         assertEquals("These tables summarize all Maven artifacts available with _Apache Isis_.", config.getProjectDoc().getDescription());
         assertNotNull(config.getProjectDoc().getArtifactGroups());
         assertTrue(config.getProjectDoc().getArtifactGroups().size()>5);
-        
-        
-        assertEquals(true, config.getProjectDoc().isFixOrphandedAdocIncludeStatements());
+
+
+        assertEquals(true, config.getProjectDoc().isFixOrphanedAdocIncludeStatements());
         assertEquals(3, config.getProjectDoc().getNamespacePartsSkipCount());
     }
 
diff --git a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
index 456c428..0dfdeac 100644
--- a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
+++ b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
@@ -36,14 +36,14 @@ import lombok.SneakyThrows;
 import lombok.val;
 
 /**
- * Writes an (AsciiDoc) Document Model to a given {@link Writer}.  
+ * Writes an (AsciiDoc) Document Model to a given {@link Writer}.
  * @since Sep 10, 2020
  * @apiNote The <i>AsciiDoc<i> name is trademarked by the <i>Eclipse Foundation</i>.
  * <p>
-    This project is <b>not</b> part of the specification effort for <i>AsciiDoc<i> under the 
+    This project is <b>not</b> part of the specification effort for <i>AsciiDoc<i> under the
     <i>AsciiDoc Working Group</i>. See https://projects.eclipse.org/proposals/asciidoc-language
-    and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to 
-    help with transfer of source code, if any project (under the umbrella of the 
+    and https://accounts.eclipse.org/mailing-list/asciidoc-wg. However, we are happy to
+    help with transfer of source code, if any project (under the umbrella of the
     <i>AsciiDoc Working Group</i>) is willing to take over.
     </p>
  */
@@ -62,7 +62,7 @@ public class AsciiDocWriter {
         adocWriter.write(doc, stringWriter);
         return stringWriter.toString();
     }
-    
+
     /**
      * Print to given {@link File}
      * @param doc
@@ -75,7 +75,7 @@ public class AsciiDocWriter {
             return;
         }
         val adocWriter = new AsciiDocWriter();
-        try(val writer = new FileWriter(file, StandardCharsets.UTF_8)) {
+        try(FileWriter writer = new FileWriter(file, StandardCharsets.UTF_8)) {
             adocWriter.write(doc, writer);
         }
     }
@@ -93,10 +93,10 @@ public class AsciiDocWriter {
         }
         val adocWriter = new AsciiDocWriter();
         try(val writer = new PrintWriter(out)) {
-            adocWriter.write(doc, writer);    
+            adocWriter.write(doc, writer);
         }
     }
-    
+
     /**
      * Print to {@link System#out}
      * @param doc
@@ -105,7 +105,7 @@ public class AsciiDocWriter {
     public static void print(final @Nullable Document doc) {
         print(doc, System.out);
     }
-  
+
     /**
      * the inverse of {@link Asciidoctor#load(String, java.util.Map)}}
      */
@@ -115,11 +115,11 @@ public class AsciiDocWriter {
                 || writer==null) {
             return;
         }
-        
+
         val nodeWriter = new NodeWriter(writer);
         StructuralNodeTraversor.depthFirst(nodeWriter, doc);
         writer.flush();
     }
-    
-    
+
+
 }