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 a8cdd0f6b0792599ef7de62a716b4e97edf0365d
Author: Dan Haywood <[email protected]>
AuthorDate: Sat Aug 20 23:46:43 2022 +0100

    ISIS-2965: updates docs
---
 README.adoc                                        |    1 -
 .../ROOT/pages/post-release-successful.adoc        |   12 +-
 .../documentation/pages/asciidoc-syntax.adoc       |    6 +-
 .../components/docs/modules/ROOT/pages/about.adoc  |   11 +-
 .../landing-page/{internal.adoc => framework.adoc} |    0
 .../modules/ROOT/pages/landing-page/releases.adoc  |   16 +-
 .../ROOT/partials/module-nav/framework.adoc        |   12 +-
 .../modules/resources/pages/eventbus_domain.adoc   |   73 --
 .../resources/pages/eventbus_persistence.adoc      |   55 -
 .../docs/modules/resources/pages/eventbus_ui.adoc  |   59 -
 .../docs/modules/resources/pages/metamodel.adoc    |  106 --
 .../resources/pages/metamodel_terminology.adoc     |   74 --
 .../docs/modules/resources/partials/C4.puml        | 1210 ++++++++++++++++++++
 .../modules/resources/partials/C4_Container.puml   |  111 ++
 .../modules/resources/partials/C4_Context.puml     |  292 +++++
 .../modules/ROOT/pages/2020/2.0.0-M3/relnotes.adoc |    2 +-
 antora/playbooks/site-core.yml                     |    3 -
 .../{site-core.yml => site-regressiontests.yml}    |   40 +-
 antora/playbooks/site.yml                          |    9 +-
 antora/supplemental-ui/index.html                  |    2 +-
 .../pages/about.adoc => ROOT/pages/_todo.adoc}     |   14 +-
 core/adoc/modules/ROOT/pages/about.adoc            |   72 +-
 core/adoc/modules/ROOT/partials/component-nav.adoc |    4 +-
 core/adoc/modules/ROOT/partials/module-nav.adoc    |    3 +
 .../attachments/modules-dependencies.pptx          |  Bin 48379 -> 0 bytes
 .../archdesign/images/modules-dependencies.png     |  Bin 59588 -> 0 bytes
 core/adoc/modules/archdesign/nav.adoc              |    4 -
 .../modules/archdesign/partials/module-nav.adoc    |    3 -
 .../modules/codegen-bytebuddy/pages/about.adoc     |    7 +-
 .../codegen-bytebuddy/partials/module-nav.adoc     |    2 +-
 .../main/adoc/modules/interaction/pages/about.adoc |    7 +-
 .../modules/internaltestsupport/pages/about.adoc   |    2 +-
 .../main/adoc/modules/metamodel/pages/about.adoc   |  289 ++++-
 .../modules/metamodel/pages/class-diagram.adoc     |    2 -
 .../main/adoc/modules/metamodel/pages/events.adoc  |  197 ++++
 .../modules/metamodel/partials/module-nav.adoc     |    3 +-
 .../src/main/adoc/modules/runtime/pages/about.adoc |    5 +-
 .../adoc/modules/runtimeservices/pages/about.adoc  |    9 +-
 .../main/adoc/modules/transaction/pages/about.adoc |    2 +-
 .../src/main/adoc/modules/webapp/pages/about.adoc  |    6 +-
 .../main/adoc/modules/webapp/pages/webmodules.adoc |    2 +-
 incubator/adoc/modules/ROOT/pages/about.adoc       |    2 +-
 regressiontests/adoc/antora.yml                    |    2 +-
 .../modules/{regressiontests => ROOT}/nav.adoc     |    0
 .../{regressiontests => ROOT}/pages/about.adoc     |    0
 .../adoc/modules/ROOT/partials/module-nav.adoc     |    4 +
 .../regressiontests/partials/module-nav.adoc       |    4 -
 .../parent-pom/images/parent-pom.drawio.svg        |    5 +-
 .../adoc/modules/ROOT/partials/component-nav.adoc  |    2 +-
 49 files changed, 2262 insertions(+), 484 deletions(-)

diff --git a/README.adoc b/README.adoc
index 0a91b86d50..0e6d196cf0 100644
--- a/README.adoc
+++ b/README.adoc
@@ -5,7 +5,6 @@
 
 
image:https://maven-badges.herokuapp.com/maven-central/org.apache.isis.core/isis-applib/badge.svg[]
 
image:https://github.com/apache/isis/workflows/Build%20and%20Test%20(w/%20Maven)/badge.svg[]
-image:https://github.com/apache/isis/workflows/Build%20and%20Test%20(w/%20Gradle)/badge.svg[]
 
image:https://sonarcloud.io/api/project_badges/measure?project=apache_isis&metric=alert_status[link="https://sonarcloud.io/dashboard?id=apache_isis";]
 
image:https://github.com/apache-isis-committers/isis-nightly/workflows/Nightly/badge.svg[link="https://github.com/apache-isis-committers/isis-nightly/actions?query=workflow%3A%22Nightly%22";]
 
diff --git 
a/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc 
b/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc
index 781d34e236..d8031ffa4d 100644
--- a/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc
+++ b/antora/components/comguide/modules/ROOT/pages/post-release-successful.adoc
@@ -490,8 +490,14 @@ link:https://blogs.apache.org/roller-ui/login.rol[Log 
onto] the http://blogs.apa
 Copy-n-paste the above mailing list announcement should suffice.
 
 
-== Update BASELINE for nightly builds
+== Update BASELINE for the (non-ASF) nightly builds
 
-Nightly builds (non-ASF) are generated using CI definitions in the 
link:https://github.com/apache-isis-committers/isis-nightly[github.com/apache-isis-committers/isis-nightly]
 repo, published to the 
link:https://nexus.incode.work/repository/nightly-builds/[nightly-builds] repo 
of link:https://nexus.incode.work/[nexus.incode.work]:
+Nightly builds of the framework's packages are available in two different 
locations:
 
-* bump the `BASELINE` variable in 
link:https://github.com/apache-isis-committers/isis-nightly/blob/0fdea0c4e7419b40acc9a03746e4c3cac3f262b2/.github/workflows/apache-isis-ci-nightly.yml#L15[apache-isis-ci-nightly.yml]
 (workflow file).
+* First, they can be found as packages of the main 
link:https://github.com/apache/isis[github.com/apache/isis] repo; these can be 
accessed using your github credentials.
++
+Bump the `BASELINE` variable in 
link:https://github.com/apache/isis/blob/master/.github/workflows/ci-build-artifacts-no-push-maven.yml#L20[ci-build-artifacts-no-push-maven.yml]
 (workflow file).
+
+* But they are also to be found as packages within the (non-ASF) 
link:https://github.com/apache-isis-committers/isis-nightly[github.com/apache-isis-committers/isis-nightly]
 repo; no credentials are required for these because the git repo is used as a 
package repository directly.
++
+Bump the `BASELINE` variable in 
link:https://github.com/apache-isis-committers/isis-nightly/blob/0fdea0c4e7419b40acc9a03746e4c3cac3f262b2/.github/workflows/apache-isis-ci-nightly.yml#L15[apache-isis-ci-nightly.yml]
 (workflow file).
diff --git 
a/antora/components/conguide/modules/documentation/pages/asciidoc-syntax.adoc 
b/antora/components/conguide/modules/documentation/pages/asciidoc-syntax.adoc
index 229c392924..d4f7afd72b 100644
--- 
a/antora/components/conguide/modules/documentation/pages/asciidoc-syntax.adoc
+++ 
b/antora/components/conguide/modules/documentation/pages/asciidoc-syntax.adoc
@@ -801,9 +801,9 @@ For example:
 [c4plantuml,c4-demo,svg]
 ----
 @startuml
-!include 
https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4.puml
-!include 
https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
-!includeurl 
https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Container.puml
+include::docs:resources:partial$C4.puml[]
+include::docs:resources:partial$C4_Context.puml[]
+include::docs:resources:partial$C4_Container.puml[]
 
 title System Context diagram for Internet Banking System
 
diff --git a/antora/components/docs/modules/ROOT/pages/about.adoc 
b/antora/components/docs/modules/ROOT/pages/about.adoc
index 58726904dc..337ebc97bc 100644
--- a/antora/components/docs/modules/ROOT/pages/about.adoc
+++ b/antora/components/docs/modules/ROOT/pages/about.adoc
@@ -136,15 +136,12 @@ _Automated Analysis_
 * link:https://sonarcloud.io/dashboard?id=apache_isis[SonarCloud.io]
 * link:https://fisheye.apache.org/browse/~br=master/isis-git/[ASF Fisheye]
 
-_In Development_
-
-* xref:incubator:ROOT:about.adoc[Incubator]
-
+_Development_
 
-_Other_
+* xref:core:ROOT:about.adoc[]
+* xref:regressiontests:ROOT:about.adoc[]
+* xref:incubator:ROOT:about.adoc[]
 
-* xref:core:_overview:about.adoc[System Overview] (generated)
-* xref:core:ROOT:about.adoc[Design Docs] (out of date)
 
 _Thanks_
 
diff --git 
a/antora/components/docs/modules/ROOT/pages/landing-page/internal.adoc 
b/antora/components/docs/modules/ROOT/pages/landing-page/framework.adoc
similarity index 100%
rename from antora/components/docs/modules/ROOT/pages/landing-page/internal.adoc
rename to antora/components/docs/modules/ROOT/pages/landing-page/framework.adoc
diff --git 
a/antora/components/docs/modules/ROOT/pages/landing-page/releases.adoc 
b/antora/components/docs/modules/ROOT/pages/landing-page/releases.adoc
index c0e9e87643..21e895680f 100644
--- a/antora/components/docs/modules/ROOT/pages/landing-page/releases.adoc
+++ b/antora/components/docs/modules/ROOT/pages/landing-page/releases.adoc
@@ -16,19 +16,25 @@ If your app inherits from the 
xref:docs:parent-pom:about.adoc[Parent POM], then
 <parent>
     <groupId>org.apache.isis.app</groupId>
     <artifactId>isis-app-starter-parent</artifactId>
-    <version>2.0.0</version>                            <!--1-->
+    <version>2.0.0</version>                            <!--.-->
 </parent>
 ----
-<1> update as required.
+<.> update as required.
 
 
 == Nightly Builds
 
 If you like to live on the bleeding edge, there are also nightly builds of the 
framework.
 
-* link:https://github.com/apache-isis-committers/isis-nightly[CI]
-* link:https://repo.incode.cloud/[Maven Repo]
-* link:https://apache-isis-committers.github.io/isis-nightly[Website preview]
+* link:https://github.com/apache/isis[Packages] (ASF hosted)
++
+Requires github credentials to download packages
+
+* link:https://github.com/apache-isis-committers/isis-nightly[Packages] (not 
ASF hosted)
++
+Packages can be downloaded without authentication.
+
+* link:https://apache-isis-committers.github.io/isis-nightly[Website preview] 
(not ASF hosted)
 
 Although these are maintained and used by the framework's committers, do be 
aware that *these are _not_ official ASF releases*; they are provided as a 
convenience only.
 
diff --git 
a/antora/components/docs/modules/ROOT/partials/module-nav/framework.adoc 
b/antora/components/docs/modules/ROOT/partials/module-nav/framework.adoc
index c756fb5ea8..e93d65bb43 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/framework.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/framework.adoc
@@ -13,12 +13,14 @@
 *** link:https://sonarcloud.io/dashboard?id=apache_isis[SonarCloud.io]
 *** link:https://fisheye.apache.org/browse/~br=master/isis-git/[ASF Fisheye]
 
-**  xref:incubator:ROOT:about.adoc[Incubator]
 
-** Other
+** Development
 
-*** xref:core:_overview:about.adoc[System Overview] (generated)
-*** xref:core:ROOT:about.adoc[Design Docs] (out of date)
+*** xref:core:ROOT:about.adoc[]
+*** xref:regressiontests:ROOT:about.adoc[]
+*** xref:incubator:ROOT:about.adoc[]
 
-** xref:more-thanks/more-thanks.adoc[Acknowledgements]
+** Thanks
+
+*** xref:more-thanks/more-thanks.adoc[Acknowledgements]
 
diff --git 
a/antora/components/docs/modules/resources/pages/eventbus_domain.adoc 
b/antora/components/docs/modules/resources/pages/eventbus_domain.adoc
deleted file mode 100644
index ef2e90c2f1..0000000000
--- a/antora/components/docs/modules/resources/pages/eventbus_domain.adoc
+++ /dev/null
@@ -1,73 +0,0 @@
-= eventbus_domain
-
-: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 [...]
-
-.eventbus_domain
-[plantuml,file="eventbus_domain.png"]
-
---
-@startuml
-
-skinparam nodesep 20
-
-together {
-    (Domain\nService) as DS
-    (Domain\nObject) as DO
-    (<i>Domain\n<i>Event) as DE
-}
-(<i>Member</i>) as MB
-together {
-    (Property) as P
-    (Action) as A
-    (Collection) as C
-}
-P -u-> MB : is a
-A -u-> MB : is a
-C -u-> MB : is a
-
-DO -d-> MB : has
-DS -d--> A : has
-
-DE -d-> MB : can be \n declared \n for
-
-(Execution) as EX
-P "edit \n is an"-->  EX
-A "invocation \n is an"--> EX
-
-(Event\nBus) as EB
-(Spring) as SPRING
-SPRING .l.> EB : provides/\nmanages
-EX -> EB : is published as: \n * before event (phase: EXECUTING)\n * after 
event (phase: EXECUTED)
-
-(Event\nListener) as EL
-EL --> EB : listens \n on
-EL -u-> MB : can check/modify: \nvisibility (hide), \nusability (disable), 
\nvalidity (validate)
-
-note right of DE
-Phases are:
-* HIDING
-* DISABLING
-* VALIDATING
-* EXECUTING
-* EXECUTED
-The framework automatically sends out
-events with the phases in the order listed.
-end note
-
-note right of MB
-<i>DomainEvent</i> is declared as an
-annotation type element in a member annotation, e.g.
-<b>@Action(
-        <b>domainEvent=<i>Custom</i>ActionDomainEvent.class).
-end note
-
-note right of EL
-EventListeners can be declared on
-any public Spring bean method, e.g.
-<b>@EventListener(
-       <b><i>Custom</i>ActionDomainEvent.class).
-Via <i>DomainEvent</i>.getEventPhase(),
-further filtering can be applied.
-end note
-@enduml
---
diff --git 
a/antora/components/docs/modules/resources/pages/eventbus_persistence.adoc 
b/antora/components/docs/modules/resources/pages/eventbus_persistence.adoc
deleted file mode 100644
index 1f2b96dff4..0000000000
--- a/antora/components/docs/modules/resources/pages/eventbus_persistence.adoc
+++ /dev/null
@@ -1,55 +0,0 @@
-= eventbus_persistence
-
-: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 [...]
-
-.eventbus_persistence
-[plantuml,file="eventbus_persistence.png"]
---
-@startuml
-
-(Event\nBus) as EB
-(Spring) as SPRING
-SPRING .l.> EB : provides/\nmanages
-(Event\nListener) as EL
-EL --> EB : listens
-
-(<i>Object</i>\nLifecyleEvent) as LCE
-LCE -> EB : published to
-(Created\nEvent) as C
-C -u-> LCE : is a
-(Loaded\nEvent) as L
-L -u-> LCE : is a
-
-(Persisting\nEvent) as PNG
-PNG -u-> LCE : is a
-(Persisted\nEvent) as PED
-PED -u-> LCE : is a
-
-(Updating\nEvent) as UNG
-UNG -u-> LCE : is a
-(Updated\nEvent) as UED
-UED -u-> LCE : is a
-
-(Removing\nEvent) as RNG
-RNG -u-> LCE : is a
-
-(Factory\nService) as FS
-FS -u-> C :emits
-(Repository\nService) as RS
-RS -u-> L :emits
-RS -u-> PNG :emits
-RS -u-> PED :emits
-RS -u-> UNG :emits
-RS -u-> UED :emits
-RS -u-> RNG :emits
-
-note top of RNG
-JDO/Datanucleus
-does not support
-something like a
-"Removed Event".
-Hence not implemented.
-end note
-
-@enduml
---
diff --git a/antora/components/docs/modules/resources/pages/eventbus_ui.adoc 
b/antora/components/docs/modules/resources/pages/eventbus_ui.adoc
deleted file mode 100644
index 728e1afa96..0000000000
--- a/antora/components/docs/modules/resources/pages/eventbus_ui.adoc
+++ /dev/null
@@ -1,59 +0,0 @@
-= eventbus_ui
-
-: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 [...]
-
-.eventbus_ui
-[plantuml,file="eventbus_ui.png"]
---
-@startuml
-
-skinparam nodesep 20
-
-(Event\nBus) as EB
-(Spring) as SPRING
-SPRING .l.> EB : provides/\nmanages
-(Event\nListener) as EL
-EL --> EB : listens to \n (is subscribed to)
-
-(UI\nEvent) as UIE
-UIE -r-> EB : is \n published \n to
-
-(Title\nUIEvent) as TUIE
-TUIE -u-> UIE : is a
-(Icon\nUIEvent) as IUIE
-IUIE -u-> UIE : is a
-
-(CssClass\nUIEvent) as CCUIE
-CCUIE -u-> UIE : is a
-(Layout\nUIEvent) as LUIE
-LUIE -u-> UIE : is a
-
-
-(Domain\nObject) as DO
-DO "when \n rendered, \n leads to \n emission \nof"-d-> UIE
-
-(Presentation) as PST
-DO -u-> PST : has
-EL -u-> PST : can modify
-note right of EL
-When DomainObject implements
-respective supporting methods itself (
-* title(),
-* iconName(),
-* cssClass(),
-* layout()),
-modification is not possible.
-end note
-
-@enduml
---
-
-DE -d-> MB : can be \n declared \n for
-
-
-EL -u-> MB : can modify/check: \nvisibility (hide), \nusability (disable), 
\nvalidity (validate)
-
-DO ->"title \n icon \n cssClass \n layout" PST
-(UI\nEvent) as UIE
-EL --> PST : modify
-UIE --> EL : receive
diff --git a/antora/components/docs/modules/resources/pages/metamodel.adoc 
b/antora/components/docs/modules/resources/pages/metamodel.adoc
deleted file mode 100644
index 6b70c8ef15..0000000000
--- a/antora/components/docs/modules/resources/pages/metamodel.adoc
+++ /dev/null
@@ -1,106 +0,0 @@
-= metamodel
-
-: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 [...]
-
-.metamodel
-[plantuml,file="metamodel.png"]
---
-@startuml
-!include <logos/java>
-!include <tupadr3/font-awesome/at>
-!include <tupadr3/font-awesome/envira>
-!include <office/Databases/database_cube>
-!include <material/xml.puml>
-
-legend top
-|= notation |= explanation |
-| ""__underline__"" | DDD Pattern|
-endlegend
-
-together {
-    rectangle "<$database_cube><$at>\n<<Annotation>>\nORM (JPA/JDO)" as PERS
-    rectangle "<$envira><$at>\n<<Annotation>>\nSpring" as SPRING
-    rectangle 
"<img:https://isis.apache.org/_/img/home/isis-logo-56x64.png><$at>\n<<Annotation>>\nApache
 Isis" as FW
-    rectangle 
"<img:https://isis.apache.org/_/img/home/isis-logo-56x64.png><$java>\n<<Supprting
 Methods>>\nApache Isis" as SM
-    rectangle "<$java><$ma_xml><$at>\n<<Annotation>>\nJAXB" as JAXB
-
-    SPRING -[hidden]- PERS
-    PERS -[hidden]- FW
-    FW -[hidden]- SM
-    SM -[hidden]- JAXB
-
-    note left of SPRING
-        * __Repository__
-        * Name (@Named)
-        * Service (via FW @DomainService)
-        * Component (via FW @DomainObject)
-    end note
-
-    note left of PERS
-        * Cardinality
-        * TableName
-        * Column
-        ** Name
-        ** Length
-        ** Type
-    end note
-
-    note left of FW
-        * __Entitiy__
-        ** Property
-        ** Collection
-        ** Action
-        * __Factory__
-        * Layout
-        ** Property Sequence
-            (Table and Forms)
-        ** Action Sequence (Menu)
-        ** Styles (cssClass)
-        * ViewModel
-        * Mixin
-    end note
-
-    note left of SM
-        * autoComplete…()
-        * choices…()
-        * default…()
-        * disable…()
-        * get…()
-        * hide…()
-        * iconName()
-        * set…()
-        * title()
-        * validate…()
-    end note
-
-    note left of JAXB
-        * @XmlAccessorType
-        * @XmlJavaTypeAdapter
-        * @XmlRootElement
-    end note
-}
-
-rectangle 
"<img:https://isis.apache.org/_/img/home/isis-logo-56x64.png>\nMetaModel" as MM
-
-SPRING -> MM
-PERS -> MM
-FW -> MM
-SM -> MM
-JAXB -> MM
-
-(MetaModelValidation) as MMV
-MM <- MMV : perform \n consistency \n check
-
-rectangle "WicketViewer" as UI
-database DB
-interface "Restful\nObjects" as REST
-MM -d-> UI : generate
-MM -d-> DB : generate
-MM -d-> REST : generate
-
-@enduml
---
-note left of UI
-File | Edit | Help
-end note
-
diff --git 
a/antora/components/docs/modules/resources/pages/metamodel_terminology.adoc 
b/antora/components/docs/modules/resources/pages/metamodel_terminology.adoc
deleted file mode 100644
index 466ec045be..0000000000
--- a/antora/components/docs/modules/resources/pages/metamodel_terminology.adoc
+++ /dev/null
@@ -1,74 +0,0 @@
-= metamodel_terminology
-
-== Metamodel Terminology
-
-: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 [...]
-
-[plantuml,file="metamodel_terminology.png"]
-.Metamodel Terminology
---
-@startuml
-
-skinparam nodesep 20
-skinparam ranksep 1
-
-together {
-       (Domain\nObject) as DO
-       (Entity) as E
-       (View\nModel) as VM
-}
-(<i>Apache Isis</i>) as FW
-(Persistence\nLayer) as PL
-together {
-       (Mixin) as M
-       (Mixee) as ME
-}
-(Service) as S
-(Domain\nService) as DS
-(<i>Spring</i>) as SPRING
-together {
-       (Member) as MB
-       (Property) as P
-       (Collection) as C
-       (Action) as A
-}
-
-DO <-d-"is a" VM
-DO <-d-"is a" E
-FW .u.> VM : manages
-PL .u.> E : manages
-
-P "is a"-u-> MB
-C "is a"-u-> MB
-A "is a"-u-> MB
-
-DO --> MB : has 1..*
-
-M "contributes\n a"..> MB
-M "contributes\n to"-> ME
-DO -> ME : can \n act \n as
-
-SPRING ..> S : manages
-DS "is a"-u-> S
-DS --> A : has 1..*
-@enduml
---
-
-*_Viewmodels_* and *_Entities_* are specializations of *_Domain Objects_*.
-
-_Domain Objects_ have *_Properties_*, *_Collections_* and *_Actions_*,
-while _Viewmodels_ are (lifecycle-) managed by _Apache Isis_,
-_Entities_ are managed by the configured persistence layer
-(either JDO or JPA).
-
-*_Services_* in general are (lifecycle-) managed by _Spring_.
-We distinguish between _Services_ that are *_included_* in the metamodel
-and those that are not. Included _Services_ we call *_Domain Services_*,
-and their _Actions_ (like _Domain Objects_) are part of the metamodel.
-
-Those _Actions_ are either visible as _Menu Actions_ in the UI
-and/or made available for the _Restful Objects Viewer_.
-(As indicated by the so called _Service's_ *_Nature_*.)
-
-*_Mixins_* do *_contribute_* either a _Property_, a _Collection_
-or an _Action_ to their *_Mixee_* (-type).
diff --git a/antora/components/docs/modules/resources/partials/C4.puml 
b/antora/components/docs/modules/resources/partials/C4.puml
new file mode 100644
index 0000000000..5ce387bb77
--- /dev/null
+++ b/antora/components/docs/modules/resources/partials/C4.puml
@@ -0,0 +1,1210 @@
+' C4-PlantUML
+
+'Version
+' ##################################
+!function C4Version()
+  !return "2.5.0beta1"
+!end function
+
+!procedure C4VersionDetails()
+rectangle C4VersionDetailsArea <<legendArea>> [
+| PlantUML | **%version()** |
+| C4-PlantUML | **C4Version()** |
+]
+!end procedure
+
+' Colors
+' ##################################
+
+!global $ELEMENT_FONT_COLOR = "#FFFFFF"
+
+!global $ARROW_COLOR = "#666666"
+
+!global $BOUNDARY_COLOR = "#444444"
+!global $BOUNDARY_BG_COLOR = "transparent"
+
+!global $LEGEND_FONT_COLOR = "#FFFFFF"
+!global $LEGEND_TITLE_COLOR = "#000000"
+' %darken(darkkhaki,50), #khaki
+!global $LEGEND_DARK_COLOR = "#66622E"
+!global $LEGEND_LIGHT_COLOR = "#khaki"
+
+!global $SKETCH_BG_COLOR = "#EEEBDC"
+!global $SKETCH_FONT_COLOR = ""
+!global $SKETCH_WARNING_COLOR = "red"
+!global $SKETCH_FONT_NAME = "Comic Sans MS"
+
+' Labels
+' ##################################
+
+!global $LEGEND_SHADOW_TEXT = "(shadow) "
+!global $LEGEND_NO_SHADOW_TEXT = "(no shadow) "
+!global $LEGEND_NO_FONT_BG_TEXT = "(no text, no back color) "
+!global $LEGEND_NO_FONT_TEXT = "(no text color) "
+!global $LEGEND_NO_BG_TEXT = "(no back color) "
+!global $LEGEND_NO_LINE_TEXT = "(no line color) "
+!global $LEGEND_ROUNDED_BOX = "(rounded box) "
+!global $LEGEND_EIGHT_SIDED = "(eight sided) "
+!global $LEGEND_DOTTED_LINE = "(dotted) "
+!global $LEGEND_DASHED_LINE = "(dashed) "
+!global $LEGEND_BOLD_LINE = "(bold) "
+
+!global $SKETCH_FOOTER_WARNING = "Warning:"
+!global $SKETCH_FOOTER_TEXT = "Created for discussion, needs to be validated"
+
+' Styling
+' ##################################
+
+!global $TECHN_FONT_SIZE = 12
+!global $ROUNDED_BOX_SIZE = 25
+!global $EIGHT_SIDED_SIZE = 18
+
+!global $ROUNDED_BOX = "roundedBox"
+!global $EIGHT_SIDED = "eightSided"
+
+!global $DOTTED_LINE = "dotted"
+!global $DASHED_LINE = "dashed"
+!global $BOLD_LINE = "bold"
+
+skinparam defaultTextAlignment center
+
+skinparam wrapWidth 200
+skinparam maxMessageSize 150
+
+skinparam LegendBorderColor transparent
+skinparam LegendBackgroundColor transparent
+skinparam LegendFontColor $LEGEND_FONT_COLOR
+
+skinparam shadowing<<legendArea>> false
+' #00000000 is transparent
+skinparam rectangle<<legendArea>> {
+    backgroundcolor #00000000
+    bordercolor #00000000
+}
+
+skinparam rectangle {
+    StereotypeFontSize 12
+    shadowing false
+}
+
+skinparam database {
+    StereotypeFontSize 12
+    shadowing false
+}
+
+skinparam queue {
+    StereotypeFontSize 12
+    shadowing false
+}
+
+skinparam arrow {
+    Color $ARROW_COLOR
+    FontColor $ARROW_COLOR
+    FontSize 12
+}
+
+skinparam actor {
+    StereotypeFontSize 12
+    shadowing false
+    style awesome
+}
+
+skinparam person {
+    StereotypeFontSize 12
+    shadowing false
+}
+
+' Some boundary skinparams have to be set as package skinparams too (PlantUML 
uses internal packages)
+skinparam package {
+    StereotypeFontSize 6
+    StereotypeFontColor $BOUNDARY_BG_COLOR
+    FontStyle plain
+    BackgroundColor $BOUNDARY_BG_COLOR
+}
+
+skinparam rectangle<<boundary>> {
+    Shadowing false
+    StereotypeFontSize 6
+    StereotypeFontColor $BOUNDARY_BG_COLOR
+    FontColor $BOUNDARY_COLOR
+    BorderColor $BOUNDARY_COLOR
+    BackgroundColor $BOUNDARY_BG_COLOR
+    BorderStyle dashed
+}
+
+' Legend and Tags
+' ##################################
+!global $tagDefaultLegend = ""
+!global $tagCustomLegend = ""
+
+' rel specific
+!unquoted function $toStereos($tags)
+  !if (%strlen($tags) == 0)
+    !return ''
+  !endif
+  !$stereos = ''
+  !$brPos = %strpos($tags, "+")
+  !while ($brPos >= 0)
+    !$tag = %substr($tags, 0, $brPos)
+    !$stereos = $stereos + '<<' + $tag + '>>'
+%set_variable_value("$" + $tag + "_LineLegend", %true())
+    !$tags = %substr($tags, $brPos+1)
+    !$brPos = %strpos($tags, "+")
+  !endwhile
+  !if (%strlen($tags) > 0)
+    !$stereos = $stereos + '<<' + $tags + '>>'
+%set_variable_value("$" + $tags + "_LineLegend", %true())
+  !endif
+  !return $stereos
+!endfunction
+
+' if $sprite/$techn is an empty argument, try to calculate it via the defined 
$tag
+!unquoted function $toRelArg($arg, $tags, $varPostfix)
+  !if ($arg > "")
+    !return $arg
+  !endif
+
+  !if (%strlen($tags) == 0)
+       !return $arg
+  !endif
+  !$brPos = %strpos($tags, "+")
+  !while ($brPos >= 0)
+    !$tag = %substr($tags, 0, $brPos)
+    !$newArg = %get_variable_value("$" + $tag + $varPostfix)
+    !if ($newArg > "")
+       !return $newArg
+    !endif
+    !$tags = %substr($tags, $brPos+1)
+    !$brPos = %strpos($tags, "+")
+  !endwhile
+  !if (%strlen($tags) > 0)
+    !$newArg = %get_variable_value("$" + $tags + $varPostfix)
+    !if ($newArg > "")
+       !return $newArg
+    !endif
+  !endif
+  !return $arg
+!endfunction
+
+' element specific (unused are hidden based on mask)
+!unquoted function $toStereos($elementType, $tags)
+  !if (%strlen($tags) == 0)
+    !$stereos = '<<' + $elementType + '>>'
+%set_variable_value("$" + $elementType + "Legend", %true())
+    !return $stereos
+  !endif
+  !$stereos = ''
+  !$mask = $resetMask()
+  !$brPos = %strpos($tags, "+")
+  !while ($brPos >= 0)
+    !$tag = %substr($tags, 0, $brPos)
+    !$stereos = $stereos + '<<' + $tag + '>>'
+    !$mergedMask = $combineMaskWithTag($mask, $tag)
+    !if ($mergedMask != $mask)
+%set_variable_value("$" + $tag + "Legend", %true())
+      !$mask = $mergedMask
+    !endif
+    !$tags = %substr($tags, $brPos+1)
+    !$brPos = %strpos($tags, "+")
+  !endwhile
+  !if (%strlen($tags) > 0)
+    !$stereos = $stereos + '<<' + $tags + '>>'
+    !$mergedMask = $combineMaskWithTag($mask, $tags)
+    !if ($mergedMask != $mask)
+%set_variable_value("$" + $tags + "Legend", %true())
+      !$mask = $mergedMask
+    !endif
+  !endif
+  ' has to be last, otherwise PlantUML overwrites all tag specific skinparams
+  !$stereos = $stereos + '<<' + $elementType + '>>'
+  !$mergedMask = $combineMaskWithTag($mask, $elementType)
+  !if ($mergedMask != $mask)
+%set_variable_value("$" + $elementType + "Legend", %true())
+    !$mask = $mergedMask
+  !endif
+  !return $stereos
+!endfunction
+
+' if $sprite/$techn is an empty argument, try to calculate it via the defined 
$tag
+!unquoted function $toElementArg($arg, $tags, $varPostfix, $elementType)
+  !if ($arg > "")
+    !return $arg
+  !endif
+
+  !if (%strlen($tags) == 0)
+    !$newArg = %get_variable_value("$" + $elementType + $varPostfix)
+    !if ($newArg > "")
+       !return $newArg
+    !else
+       !return $arg
+    !endif
+  !endif
+  !$brPos = %strpos($tags, "+")
+  !while ($brPos >= 0)
+    !$tag = %substr($tags, 0, $brPos)
+    !$newArg = %get_variable_value("$" + $tag + $varPostfix)
+    !if ($newArg > "")
+       !return $newArg
+    !endif
+    !$tags = %substr($tags, $brPos+1)
+    !$brPos = %strpos($tags, "+")
+  !endwhile
+  !if (%strlen($tags) > 0)
+    !$newArg = %get_variable_value("$" + $tags + $varPostfix)
+    !if ($newArg > "")
+       !return $newArg
+    !endif
+    !$newArg = %get_variable_value("$" + $elementType + $varPostfix)
+    !if ($newArg > "")
+       !return $newArg
+    !endif
+  !endif
+  !return $arg
+!endfunction
+
+!function $elementTagSkinparams($element, $tagStereo, $bgColor, $fontColor, 
$borderColor, $shadowing, $shape)
+  !$elementSkin = "skinparam " + $element + "<<" + $tagStereo + ">> {" + 
%newline()
+  !if ($fontColor != "")
+    !if ($tagStereo != "boundary")
+      !$elementSkin = $elementSkin + "    StereotypeFontColor " + $fontColor + 
%newline()
+    !endif
+    !$elementSkin = $elementSkin + "    FontColor " + $fontColor + %newline()
+  !endif
+  !if ($bgColor != "")
+    !$elementSkin = $elementSkin + "    BackgroundColor " + $bgColor + 
%newline()
+  !endif
+  !if ($borderColor != "")
+    !$elementSkin = $elementSkin + "    BorderColor " + $borderColor+ 
%newline()
+  !endif
+  !if ($shadowing == "true")
+    !$elementSkin = $elementSkin + "    Shadowing<<" + $tagStereo + ">> " + 
"true" + %newline()
+  !endif
+  !if ($shadowing == "false")
+    !$elementSkin = $elementSkin + "    Shadowing<<" + $tagStereo + ">> " + 
"false" + %newline()
+  !endif
+  ' only rectangle supports shape(d corners), define both skinparam that 
overlays are working
+  !if ($shape != "" && $element == "rectangle")
+    !if ($shape == $ROUNDED_BOX)
+      !$elementSkin = $elementSkin + "    RoundCorner " + $ROUNDED_BOX_SIZE+ 
%newline()
+      !$elementSkin = $elementSkin + "    DiagonalCorner " + "0" + %newline()
+    !elseif ($shape == $EIGHT_SIDED)
+      !$elementSkin = $elementSkin + "    RoundCorner " + "0" + %newline()
+      !$elementSkin = $elementSkin + "    DiagonalCorner " + 
$EIGHT_SIDED_SIZE+ %newline()
+    !endif
+  !endif
+  !$elementSkin = $elementSkin + "}" + %newline()
+  !return $elementSkin
+!endfunction
+
+!unquoted procedure $defineSkinparams($tagStereo, $bgColor, $fontColor, 
$borderColor, $shadowing, $shape)
+  ' only rectangle supports shape(d corners)
+  !$tagSkin = $elementTagSkinparams("rectangle", $tagStereo, $bgColor, 
$fontColor, $borderColor, $shadowing, $shape)
+  !$tagSkin = $tagSkin + $elementTagSkinparams("database", $tagStereo, 
$bgColor, $fontColor, $borderColor, $shadowing, "")
+  !$tagSkin = $tagSkin + $elementTagSkinparams("queue", $tagStereo, $bgColor, 
$fontColor, $borderColor, $shadowing, "")
+  ' actor has style awesome, therefore $fontColor is ignored and text uses 
$bgColor too
+  !$tagSkin = $tagSkin + $elementTagSkinparams("actor", $tagStereo, $bgColor, 
$bgColor, $borderColor, $shadowing, "")
+  !$tagSkin = $tagSkin + $elementTagSkinparams("person", $tagStereo, $bgColor, 
$fontColor, $borderColor, $shadowing, "")
+  !if ($tagStereo == "boundary" && $bgColor != "")
+    !$tagSkin = $tagSkin + "skinparam package<<boundary>>StereotypeFontColor " 
+ $bgColor + %newline()
+    !$tagSkin = $tagSkin + "skinparam rectangle<<boundary>>StereotypeFontColor 
" + $bgColor + %newline()
+  !endif
+$tagSkin
+!endprocedure
+
+' arrow colors cannot start with # (legend background has to start with #)
+!function $colorWithoutHash($c)
+  !if (%substr($c, 0, 1) == "#")
+    !$c = %substr($c,1)
+  !endif
+  !return $c
+!endfunction
+
+!unquoted procedure $defineRelSkinparams($tagStereo, $textColor, $lineColor, 
$lineStyle)
+  !$elementSkin = "skinparam arrow<<" + $tagStereo + ">> {" + %newline()
+  !$elementSkin = $elementSkin + "    Color "
+  !if ($lineColor != "")
+    !$elementSkin = $elementSkin + $colorWithoutHash($lineColor)
+  !endif
+  !if ($textColor != "")
+    !$elementSkin = $elementSkin + ";text:" + $colorWithoutHash($textColor)
+  !endif
+  !if ($lineStyle != "")
+    !$elementSkin = $elementSkin + ";line." + $lineStyle
+  !endif
+  !$elementSkin = $elementSkin + %newline()
+  !$elementSkin = $elementSkin + "}" + %newline()
+$elementSkin
+!endprocedure
+
+' %is_dark() requires PlantUML version >= 1.2021.6
+!if (%function_exists("%is_dark"))
+  !$PlantUMLSupportsDynamicLegendColor = %true()
+!else
+  !$PlantUMLSupportsDynamicLegendColor = %false()
+  !log "dynamic undefined legend colors" requires PlantUML version >= 
1.2021.6, therefore only static assigned colors are used
+!endif
+
+!unquoted function $contrastLegend($color)
+  !if (%is_dark($color))
+    !$value = $LEGEND_LIGHT_COLOR
+  !else
+    !$value = $LEGEND_DARK_COLOR
+  !endif
+  !return $value
+!endfunction
+
+!unquoted function $flatLegend($color)
+  !if (%is_dark($color))
+    !$value = $LEGEND_DARK_COLOR
+  !else
+    !$value = $LEGEND_LIGHT_COLOR
+  !endif
+  !return $value
+!endfunction
+
+' legend background has to start with #
+!function $colorWithHash($c)
+  !if (%substr($c, 0, 1) != "#")
+    !$c = "#" + $c
+  !endif
+  !return $c
+!endfunction
+
+!function $addMaskFlag($mask, $attr)
+  !if ($attr == "")
+    !$mask = $mask + "0"
+  !else
+    !$mask = $mask + "1"
+  !endif
+  !return $mask
+!endfunction
+
+!function $orFlags($flag1, $flag2)
+  !if ($flag1 == "0" && $flag2 == "0")
+    !return "0"
+  !endif
+  !return "1"
+!endfunction
+
+!function $tagLegendMask($bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite)
+  !$mask = ""
+  !$mask = $addMaskFlag($mask, $bgColor)
+  !$mask = $addMaskFlag($mask, $fontColor)
+  !$mask = $addMaskFlag($mask, $borderColor)
+  !$mask = $addMaskFlag($mask, $shadowing)
+  !$mask = $addMaskFlag($mask, $shape)
+  !$mask = $addMaskFlag($mask, $sprite)
+  !return $mask
+!endfunction
+
+!function $resetMask()
+  !return "000000"
+!endfunction
+
+!function $combineMasks($mask1, $mask2)
+  !$mask = ""
+  !$mask = $mask + $orFlags(%substr($mask1, 0, 1), %substr($mask2, 0, 1))
+  !$mask = $mask + $orFlags(%substr($mask1, 1, 1), %substr($mask2, 1, 1))
+  !$mask = $mask + $orFlags(%substr($mask1, 2, 1), %substr($mask2, 2, 1))
+  !$mask = $mask + $orFlags(%substr($mask1, 3, 1), %substr($mask2, 3, 1))
+  !$mask = $mask + $orFlags(%substr($mask1, 4, 1), %substr($mask2, 4, 1))
+  !$mask = $mask + $orFlags(%substr($mask1, 5, 1), %substr($mask2, 5, 1))
+  !return $mask
+!endfunction
+
+!function $combineMaskWithTag($mask1, $tag)
+  !$mask2 = %get_variable_value("$" + $tag+ "LegendMask")
+  !if ($mask2 == "")
+    ' !log combineMaskWithTag $mask1, $tag, ... only $mask1
+    !return $mask1
+  !endif
+
+  ' !log combineMaskWithTag $mask1, $tag, $mask2 ... $combineMasks($mask1, 
$mask2)
+  !return  $combineMasks($mask1, $mask2)
+!endfunction
+
+' element symbols typically 4 times too big in legend
+!function $smallVersionSprite($sprite)
+  ' ,scale= ... has to be first (...,color=black,scale=0.25... is invalid too)
+  !if (%strpos($sprite, "=") < 0)
+    !if (%substr($sprite, 0, 4) == "img:")
+      !$smallSprite = $sprite + "{scale=0.25}"
+    !else
+      !$smallSprite = $sprite + ",scale=0.25"
+    !endif
+  !else
+    !$smallSprite = $sprite
+  !endif
+  !return $smallSprite
+!endfunction
+
+' format sprite that it can be used in diagram
+!function $getSprite($sprite)
+  ' if it starts with & it's a OpenIconic, details see 
https://useiconic.com/open/
+  ' if it starts with img: it's an image, details see 
https://plantuml.com/creole
+  !if (%substr($sprite, 0, 1) != "&" && %substr($sprite, 0, 4) != "img:")
+    !$formatted = "<$" + $sprite + ">"
+  !else
+    !$formatted = "<" + $sprite + ">"
+  !endif
+  !return $formatted
+!endfunction
+
+!function $tagLegendEntry($tagStereo, $bgColor, $fontColor, $borderColor, 
$shadowing, $shape, $legendText, $legendSprite)
+  !$bg = $bgColor
+  !$fo = $fontColor
+  !$bo = $borderColor
+
+  !if ($fo == "")
+    !if ($bg != "")
+!if ($PlantUMLSupportsDynamicLegendColor)
+      !$fo = $contrastLegend($bg)
+!else
+      !$fo = $LEGEND_DARK_COLOR
+!endif
+    !else
+      !if ($bo == "")
+        !$fo = $LEGEND_DARK_COLOR
+        !$bg = $LEGEND_LIGHT_COLOR
+      !else
+!if ($PlantUMLSupportsDynamicLegendColor)
+        !$fo = $flatLegend($bo)
+        !$bg = $contrastLegend($bo)
+!else
+        !$fo = $LEGEND_DARK_COLOR
+        !$bg = $LEGEND_LIGHT_COLOR
+!endif
+      !endif
+    !endif
+  !else
+    !if ($bg == "")
+!if ($PlantUMLSupportsDynamicLegendColor)
+      !$bg = $contrastLegend($fo)
+!else
+      !$bg = $LEGEND_LIGHT_COLOR
+!endif
+    !endif
+  !endif
+
+  !if ($bo == "")
+    !$bo = $bg
+  !endif
+
+  !$tagEntry = "|"
+  !$tagEntry = $tagEntry + "<" + $colorWithHash($bg) +">"
+  ' <U+25AF> ..white rectangle
+  !$tagEntry = $tagEntry + "<color:"+$bo+"> <U+25AF></color> "
+  !$tagEntry = $tagEntry + "<color:"+$fo+">"
+  !if ($legendSprite != "")
+    !$tagEntry = $tagEntry + $getSprite($legendSprite) + " "
+  !endif
+  !if ($legendText == "")
+    !$tagEntry = $tagEntry + " " + $tagStereo + " "
+    !if ($shadowing == "true")
+      !$tagEntry = $tagEntry + $LEGEND_SHADOW_TEXT
+    !endif
+    !if ($shadowing == "false")
+      !$tagEntry = $tagEntry + $LEGEND_NO_SHADOW_TEXT
+    !endif
+    !if ($shape == $ROUNDED_BOX)
+      !$tagEntry = $tagEntry + $LEGEND_ROUNDED_BOX
+    !endif
+    !if ($shape == $EIGHT_SIDED)
+      !$tagEntry = $tagEntry + $LEGEND_EIGHT_SIDED
+    !endif
+    !if ($fontColor == "" && $bgColor == "")
+        !$tagEntry = $tagEntry + $LEGEND_NO_FONT_BG_TEXT
+    !else
+      !if ($fontColor == "")
+        !$tagEntry = $tagEntry + $LEGEND_NO_FONT_TEXT
+      !endif
+      !if ($bgColor == "")
+        !$tagEntry = $tagEntry + $LEGEND_NO_BG_TEXT
+      !endif
+    !endif
+  !else
+    !$tagEntry = $tagEntry + " " + $legendText + " "
+  !endif
+
+  !$tagEntry = $tagEntry + "</color> "
+  !$tagEntry = $tagEntry + "|"
+  !return $tagEntry
+!endfunction
+
+!function $tagRelLegendEntry($tagStereo, $textColor, $lineColor, $lineStyle, 
$legendText, $legendSprite)
+  !$tc = $textColor
+  !$lc = $lineColor
+
+  !if ($tc == "")
+    !if ($PlantUMLSupportsDynamicLegendColor)
+      !$tc = $flatLegend($ARROW_COLOR)
+    !else
+      !$tc = $LEGEND_DARK_COLOR
+    !endif
+  !endif
+  !if ($lc == "")
+    !if ($PlantUMLSupportsDynamicLegendColor)
+      !$lc = $flatLegend($ARROW_COLOR)
+    !else
+      !$lc = $LEGEND_DARK_COLOR
+    !endif
+  !endif
+
+  !$tagEntry = "|"
+  ' <U+2500> ..white line
+  !$tagEntry = $tagEntry + "<color:"+$lc+"> <U+2500></color> "
+  !$tagEntry = $tagEntry + "<color:"+$tc+">"
+  !if ($legendSprite != "")
+    !$tagEntry = $tagEntry + $getSprite($legendSprite) + " "
+  !endif
+  !if ($legendText == "")
+    !$tagEntry = $tagEntry + " " + $tagStereo + " "
+    !if ($textColor == "")
+      !$tagEntry = $tagEntry + $LEGEND_NO_FONT_TEXT
+    !endif
+    !if ($lineColor == "")
+      !$tagEntry = $tagEntry + $LEGEND_NO_LINE_TEXT
+    !endif
+    !if ($lineStyle != "")
+      !if ($lineStyle == $DOTTED_LINE)
+        !$tagEntry = $tagEntry + $LEGEND_DOTTED_LINE
+      !elseif ($lineStyle == $DASHED_LINE)
+        !$tagEntry = $tagEntry + $LEGEND_DASHED_LINE
+      !elseif ($lineStyle == $BOLD_LINE)
+        !$tagEntry = $tagEntry + $LEGEND_BOLD_LINE
+      !else
+        !$tagEntry = $tagEntry + "(" + $lineStyle + ") "
+      !endif
+    !endif
+  !else
+    !$tagEntry = $tagEntry + " " + $legendText + " "
+  !endif
+
+  !$tagEntry = $tagEntry + "</color> "
+  !$tagEntry = $tagEntry + "|"
+  !return $tagEntry
+!endfunction
+
+!global $LEGEND_DOTTED_LINE = "(dotted) "
+!global $LEGEND_DASHED_LINE = "(dashed) "
+!global $LEGEND_BOLD_LINE = "(bold) "
+
+!unquoted procedure $addTagToLegend($tagStereo, $bgColor="", $fontColor="", 
$borderColor="", $shadowing="", $shape="", $legendText="", $legendSprite="")
+'' if a combined element tag is defined (e.g. "v1.0&v1.1") then it is 
typically a merged color,
+'' like a new $fontColor="#fdae61" therefore it should be added to the legend
+'' and the & combined tags will be not removed
+'  !if (%strpos($tagStereo, "&") < 0)
+  !$tagEntry = $tagLegendEntry($tagStereo, $bgColor, $fontColor, $borderColor, 
$shadowing, $shape, $legendText, $legendSprite)
+%set_variable_value("$" + $tagStereo + "LegendEntry", $tagEntry)
+  !$tagCustomLegend = $tagCustomLegend + $tagStereo + "\n"
+  !$tagMask = $tagLegendMask( $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite)
+%set_variable_value("$" + $tagStereo + "LegendMask", $tagMask)
+'  !endif
+!endprocedure
+
+!unquoted procedure $addRelTagToLegend($tagStereo, $textColor="", 
$lineColor="", $lineStyle="", $legendText="", $legendSprite="")
+'' Arrows have a bug with stereotype/skinparams and cannot combine text colors 
of one stereotype
+'' and the line color of another stereotype. Therefore the text color of one 
tag and the line color
+'' of another tag have to be combined via a "workaround" tag ("v1.0&v1.1").
+'' This workaround tag could be theoretically removed in the legend but after 
that there would
+'' be an inconsistency between the element tags and the rel tags and therefore
+'' & combined workaround tags are not removed too (and in unlikely cases the 
color itself could be changed)
+'  !if (%strpos($tagStereo, "&") < 0)
+    !$tagEntry = $tagRelLegendEntry($tagStereo, $textColor, $lineColor, 
$lineStyle, $legendText, $legendSprite)
+%set_variable_value("$" + $tagStereo + "_LineLegendEntry", $tagEntry)
+    !$tagCustomLegend = $tagCustomLegend + $tagStereo + "_Line\n"
+'  !endif
+!endprocedure
+
+!procedure $showActiveLegendEntries($allDefined)
+  !$brPos = %strpos($allDefined, "\n")
+  !while ($brPos >= 0)
+    !$tagStereo = %substr($allDefined, 0, $brPos)
+    !$allDefined = %substr($allDefined, $brPos+2)
+    !$brPos = %strpos($allDefined, "\n")
+    !if (%variable_exists("$" + $tagStereo + "Legend"))
+%get_variable_value("$" + $tagStereo + "LegendEntry")
+    !endif
+  !endwhile
+  !if (%strlen($allDefined) > 0)
+    !$tagStereo = $allDefined
+    !if (%variable_exists("$" + $tagStereo + "Legend"))
+%get_variable_value("$" + $tagStereo + "LegendEntry")
+    !endif
+  !endif
+!endprocedure
+
+!function RoundedBoxShape()
+!return $ROUNDED_BOX
+!endfunction
+
+!function EightSidedShape()
+!return $EIGHT_SIDED
+!endfunction
+
+!function DottedLine()
+!return $DOTTED_LINE
+!endfunction
+
+!function DashedLine()
+!return $DASHED_LINE
+!endfunction
+
+!function BoldLine()
+!return $BOLD_LINE
+!endfunction
+
+' used by new defined tags
+!unquoted procedure AddElementTag($tagStereo, $bgColor="", $fontColor="", 
$borderColor="", $shadowing="", $shape="", $sprite="", $techn="", 
$legendText="", $legendSprite="")
+$defineSkinparams($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape)
+  !if ($sprite!="")
+%set_variable_value("$" + $tagStereo + "ElementTagSprite", $sprite)
+    !if ($legendSprite == "")
+      !$legendSprite = $smallVersionSprite($sprite)
+    !endif
+  !endif
+  !if ($techn != "")
+%set_variable_value("$" + $tagStereo + "ElementTagTechn", $techn)
+  !endif
+$addTagToLegend($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $legendText, $legendSprite)
+!endprocedure
+
+' used by new defined rel tags
+!unquoted procedure AddRelTag($tagStereo, $textColor="", $lineColor="", 
$lineStyle = "", $sprite="", $techn="", $legendText="", $legendSprite="")
+$defineRelSkinparams($tagStereo, $textColor, $lineColor, $lineStyle)
+  !if ($sprite != "")
+%set_variable_value("$" + $tagStereo + "RelTagSprite", $sprite)
+    !if ($legendSprite == "")
+      ' relation symbols typically 1:1 no additional scale required
+      !$legendSprite = $sprite
+    !endif
+  !endif
+  !if ($techn != "")
+%set_variable_value("$" + $tagStereo + "RelTagTechn", $techn)
+  !endif
+$addRelTagToLegend($tagStereo, $textColor, $lineColor, $lineStyle, 
$legendText, $legendSprite)
+!endprocedure
+
+' update the style of existing elements like person, ...
+!unquoted procedure UpdateElementStyle($elementName, $bgColor="", 
$fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", 
$techn="", $legendText="", $legendSprite="")
+$defineSkinparams($elementName, $bgColor, $fontColor, $borderColor, 
$shadowing, $shape)
+  !if ($sprite != "")
+%set_variable_value("$" + $elementName + "ElementTagSprite", $sprite)
+    !if ($legendSprite == "")
+      !$legendSprite = $smallVersionSprite($sprite)
+    !endif
+  !endif
+  !if ($techn != "")
+%set_variable_value("$" + $elementName + "ElementTagTechn", $techn)
+  !endif
+  !$tagEntry = $tagLegendEntry($elementName, $bgColor, $fontColor, 
$borderColor, $shadowing, $shape, $legendText, $legendSprite)
+%set_variable_value("$" + $elementName + "LegendEntry", $tagEntry)
+  ' default tags sets at least bgColor and fontColor
+  !$tagMask = $tagLegendMask("CHANGED", "CHANGED", $borderColor, $shadowing, 
$shape, $sprite)
+%set_variable_value("$" + $elementName + "LegendMask", $tagMask)
+!endprocedure
+
+/' @deprecated in favor of UpdateElementStyle '/
+!unquoted procedure UpdateSkinparamsAndLegendEntry($elementName, $bgColor="", 
$fontColor="", $borderColor="", $shadowing="")
+UpdateElementStyle($elementName, $bgColor, $fontColor, $borderColor, 
$shadowing)
+!endprocedure
+
+' update the style of default relation, it has to set both properties 
(combined statement not working)
+!unquoted procedure UpdateRelStyle($textColor, $lineColor)
+  !$elementSkin = "skinparam arrow {" + %newline()
+  !$elementSkin = $elementSkin + "    Color " + $lineColor + %newline()
+  !$elementSkin = $elementSkin + "    FontColor " + $textColor + %newline()
+  !$elementSkin = $elementSkin + "}" + %newline()
+$elementSkin
+!endprocedure
+
+' tags/stereotypes have to be delimited with \n
+!unquoted procedure SetDefaultLegendEntries($tagStereoEntries)
+  !$tagDefaultLegend = $tagStereoEntries
+!endprocedure
+
+' Links
+' ##################################
+
+!function $getLink($link)
+  !if ($link != "")
+    !return "[[" + $link + "]]"
+  !else
+    !return ""
+  !endif
+!endfunction
+
+' Line breaks
+' ##################################
+
+' PlantUML supports no DETERMINISTIC/automatic line breaks of "PlantUML line" 
(C4 Relashionships)
+' therefore Rel...() implements an automatic line break based on spaces (like 
in all other objects).
+' If a $type contains \n then these are used (and no automatic space based 
line breaks are done)
+' $REL_TECHN_MAX_CHAR_WIDTH defines the automatic line break position
+!global $REL_TECHN_MAX_CHAR_WIDTH = 35
+!global $REL_DESCR_MAX_CHAR_WIDTH = 32
+
+!unquoted function $breakDescr($descr, $widthStr)
+!$width = %intval($widthStr)
+!$multiLine = ""
+!if (%strpos($descr, "\n") >= 0)
+!else
+  !while (%strlen($descr) > $width)
+    !$brPos = $width
+    !while ($brPos > 0 && %substr($descr, $brPos, 1) != ' ')
+      !$brPos = $brPos - 1
+    !endwhile
+
+    !if ($brPos < 1)
+      !$brPos = %strpos($descr, " ")
+    !else
+    !endif
+
+    !if ($brPos > 0)
+      !$multiLine = $multiLine + %substr($descr, 0, $brPos) + "\n"
+      !$descr = %substr($descr, $brPos + 1)
+    !else
+      !$multiLine = $multiLine+ $descr
+      !$descr = ""
+    !endif
+  !endwhile
+!endif
+!if (%strlen($descr) > 0)
+  !$multiLine = $multiLine + $descr
+!endif
+!return $multiLine
+!endfunction
+
+' $breakTechn() supports //...//; $breakNode() in C4_Deployment supports no 
//....//
+!unquoted function $breakTechn($techn, $widthStr)
+!$width = %intval($widthStr)
+!$multiLine = ""
+!if (%strpos($techn, "\n") >= 0)
+  !while (%strpos($techn, "\n") >= 0)
+    !$brPos = %strpos($techn, "\n")
+    !$multiLine = $multiLine + %substr($techn, 0, $brPos) + 
'</size>//\n//<size:'+$TECHN_FONT_SIZE+'>'
+    !$techn = %substr($techn, $brPos+2)
+  !endwhile
+!else
+  !while (%strlen($techn) > $width)
+    !$brPos = $width
+    !while ($brPos > 0 && %substr($techn, $brPos, 1) != ' ')
+      !$brPos = $brPos - 1
+    !endwhile
+
+    !if ($brPos < 1)
+      !$brPos = %strpos($techn, " ")
+    !else
+    !endif
+
+    !if ($brPos > 0)
+      !$multiLine = $multiLine + %substr($techn, 0, $brPos) + 
'</size>//\n//<size:'+$TECHN_FONT_SIZE+'>'
+      !$techn = %substr($techn, $brPos + 1)
+    !else
+      !$multiLine = $multiLine+ $techn
+      !$techn = ""
+    !endif
+  !endwhile
+!endif
+!if (%strlen($techn) > 0)
+  !$multiLine = $multiLine + $techn
+!endif
+!return $multiLine
+!endfunction
+
+' Element properties
+' ##################################
+
+' collect all defined properties as table rows
+!global $propTable = ""
+!global $propTableCaption = ""
+!global $propColCaption = "="
+
+!unquoted function SetPropertyHeader($col1Name, $col2Name, $col3Name = "", 
$col4Name = "")
+  !$propColCaption = ""
+  !$propTableCaption = "|= " + $col1Name + " |= " + $col2Name + " |"
+  !if ($col3Name != "")
+    !$propTableCaption = $propTableCaption + "= " + $col3Name + " |"
+  !endif
+  !if ($col4Name != "")
+    !$propTableCaption = $propTableCaption + "= " + $col4Name + " |"
+  !endif
+  !return ""
+!endfunction
+
+!unquoted function WithoutPropertyHeader()
+  !$propTableCaption = ""
+  !$propColCaption = "="
+  !return ""
+!endfunction
+
+!unquoted function AddProperty($col1, $col2, $col3 = "", $col4 = "")
+  !if ($propTable == "")
+    !if ($propTableCaption != "")
+      !$propTable = $propTableCaption + "\n"
+    !endif
+  !else
+    !$propTable = $propTable + "\n"
+  !endif
+  !$propTable = $propTable + "| " + $col1 + " |" + $propColCaption + " " + 
$col2 + " |"
+  !if ($col3 != "")
+    !$propTable = $propTable + " " + $col3 + " |"
+  !endif
+  !if ($col4 != "")
+    !$propTable = $propTable + " " + $col4 + " |"
+  !endif
+  !return ""
+!endfunction
+
+!unquoted function $getProps($alignedNL = "\n")
+  !if ($propTable != "")
+    !$retTable = $alignedNL + $propTable
+    !$propTable = ""
+    !return $retTable
+  !endif
+  !return ""
+!endfunction
+
+!unquoted function $getProps_L()
+  !return $getProps("\l")
+!endfunction
+
+!unquoted function $getProps_R()
+  !return $getProps("\r")
+!endfunction
+
+SetPropertyHeader("Property","Value")
+
+' Layout
+' ##################################
+
+!procedure $getHideStereotype($hideStereotype)
+!if ($hideStereotype == "true")
+hide stereotype
+!endif
+!endprocedure
+
+!procedure $getLegendTable()
+<#00000000,#00000000>|<color:$LEGEND_TITLE_COLOR>**Legend**</color> |
+$showActiveLegendEntries($tagDefaultLegend)
+$showActiveLegendEntries($tagCustomLegend)
+!endprocedure
+
+!procedure $getLegendArea($areaAlias, $hideStereotype)
+$getHideStereotype($hideStereotype)
+rectangle $areaAlias<<legendArea>> [
+$getLegendTable()
+]
+!endprocedure
+
+!procedure HIDE_STEREOTYPE()
+hide stereotype
+!endprocedure
+
+!unquoted procedure SET_SKETCH_STYLE($bgColor="_dont_change_", 
$fontColor="_dont_change_", $warningColor="_dont_change_", 
$fontName="_dont_change_", $footerWarning="_dont_change_", 
$footerText="_dont_change_")
+!if $bgColor != "_dont_change_"
+  !global $SKETCH_BG_COLOR = $bgColor
+!endif
+!if $fontColor != "_dont_change_"
+  !global $SKETCH_FONT_COLOR = $fontColor
+!endif
+!if $warningColor != "_dont_change_"
+  !global $SKETCH_WARNING_COLOR = $warningColor
+!endif
+!if $fontName != "_dont_change_"
+  !global $SKETCH_FONT_NAME = $fontName
+!endif
+!if $footerWarning != "_dont_change_"
+  !global $SKETCH_FOOTER_WARNING = $footerWarning
+!endif
+!if $footerText != "_dont_change_"
+  !global $SKETCH_FOOTER_TEXT = $footerText
+!endif
+!endprocedure
+
+!procedure LAYOUT_AS_SKETCH()
+  skinparam handwritten true
+!if $SKETCH_BG_COLOR > ""
+  skinparam backgroundColor $SKETCH_BG_COLOR
+!endif
+!if $SKETCH_FONT_COLOR > ""
+  skinparam footer {
+    FontColor $SKETCH_FONT_COLOR
+  }
+  !if $ARROW_COLOR == "#666666"
+    !global $ARROW_COLOR = $SKETCH_FONT_COLOR
+    skinparam arrow {
+      Color $ARROW_COLOR
+      FontColor $ARROW_COLOR
+    }
+  !endif
+  !if $BOUNDARY_COLOR == "#444444"
+    !global $BOUNDARY_COLOR = $SKETCH_FONT_COLOR
+    skinparam rectangle<<boundary>> {
+      FontColor $BOUNDARY_COLOR
+      BorderColor $BOUNDARY_COLOR
+    }
+  !endif
+!endif
+!if $SKETCH_FONT_NAMES > ""
+  skinparam defaultFontName $SKETCH_FONT_NAME
+!endif
+!if $SKETCH_FOOTER_WARNING > "" || $SKETCH_FOOTER_TEXT > ""
+  !$line = "footer <font color=" + $SKETCH_WARNING_COLOR + ">"+ 
$SKETCH_FOOTER_WARNING + "</font> " + $SKETCH_FOOTER_TEXT
+  $line
+!endif
+!endprocedure
+
+!global $fix_direction=%false()
+
+!function $down($start,$end)
+!if ($fix_direction)
+!return $start+"RIGHT"+$end
+!else
+!return $start+"DOWN"+$end
+!endif
+!endfunction
+
+!function $up($start,$end)
+!if ($fix_direction)
+!return $start+"LEFT"+$end
+!else
+!return $start+"UP"+$end
+!endif
+!endfunction
+
+!function $left($start,$end)
+!if ($fix_direction)
+!return $start+"UP"+$end
+!else
+!return $start+"LEFT"+$end
+!endif
+!endfunction
+
+!function $right($start,$end)
+!if ($fix_direction)
+!return $start+"DOWN"+$end
+!else
+!return $start+"RIGHT"+$end
+!endif
+!endfunction
+
+!procedure LAYOUT_TOP_DOWN()
+!global $fix_direction=%false()
+top to bottom direction
+!endprocedure
+
+!procedure LAYOUT_LEFT_RIGHT()
+!global $fix_direction = %false()
+left to right direction
+!endprocedure
+
+!procedure LAYOUT_LANDSCAPE()
+!global $fix_direction = %true()
+left to right direction
+!endprocedure
+
+' has to be last call in diagram
+!unquoted procedure SHOW_LEGEND($hideStereotype="true")
+$getHideStereotype($hideStereotype)
+legend right
+$getLegendTable()
+endlegend
+!endprocedure
+
+/' @deprecated in favor of SHOW_LEGEND '/
+!unquoted procedure SHOW_DYNAMIC_LEGEND($hideStereotype="true")
+SHOW_LEGEND($hideStereotype)
+!endprocedure
+
+' legend is reserved and cannot be uses as alias of SHOW_FLOATING_LEGEND() 
therefore
+' LEGEND() is introduced. It returns the default name of the floating alias 
"floating_legend_alias"
+' and can be used in the Lay_Distance() calls
+!function LEGEND()
+!return "floating_legend_alias"
+!endfunction
+
+' enables that legend can be located in drawing area of the diagram. It has to 
be last call in diagram followed by Lay_Distance()
+!unquoted procedure SHOW_FLOATING_LEGEND($alias=LEGEND(), 
$hideStereotype="true")
+$getLegendArea($alias, $hideStereotype)
+!endprocedure
+
+' Boundaries
+' ##################################
+
+!function $getBoundary($label, $type)
+  !if ($type == "")
+    !return '==' + $label
+  !endif
+  !if (type != "")
+    !return '==' + $label + '\n<size:' + $TECHN_FONT_SIZE + '>[' + $type + 
']</size>'
+  !endif
+!endfunction
+
+!unquoted procedure Boundary($alias, $label, $type="", $tags="", $link="")
+rectangle "$getBoundary($label, $type)" $toStereos("boundary", $tags) as 
$alias $getLink($link)
+!endprocedure
+
+' Relationship
+' ##################################
+
+!function $getRel($direction, $alias1, $alias2, $label, $techn, $descr, 
$sprite, $tags, $link)
+  !$sprite = $toRelArg($sprite, $tags, "RelTagSprite")
+  !$techn = $toRelArg($techn, $tags, "RelTagTechn")
+  !$rel = $alias1 + ' ' + $direction + ' ' + $alias2
+  !if ($tags != "")
+    !$rel = $rel + ' ' + $toStereos($tags)
+  !endif
+  !$rel = $rel + ' : '
+  !if ($sprite != "")
+    !$rel = $rel + $getSprite($sprite) + ' '
+  !endif
+  !if ($link != "")
+    !$rel = $rel + '**[[' + $link + ' ' + $label + ']]**'
+  !else
+    !$rel = $rel + '**' + $label + '**'
+  !endif
+  !if ($techn != "")
+    ' line break is not deterministic, calculate it
+    !$rel = $rel + '\n//<size:' + $TECHN_FONT_SIZE + '>[' + 
$breakTechn($techn, $REL_TECHN_MAX_CHAR_WIDTH) + ']</size>//'
+  !endif
+  !if ($descr != "")
+    ' line break is not deterministic, calculate it
+    !$rel = $rel + '\n\n' + $breakDescr($descr, $REL_DESCR_MAX_CHAR_WIDTH)
+  !endif
+  !$prop = $getProps()
+  !if ($prop != "")
+    ' reuse table
+    !$rel = $rel + $prop
+  !endif
+  !return $rel
+!endfunction
+
+!unquoted procedure Rel_($alias1, $alias2, $label, $direction)
+$alias1 $direction $alias2 : **$label**
+!endprocedure
+!unquoted procedure Rel_($alias1, $alias2, $label, $techn, $direction)
+$alias1 $direction $alias2 : 
**$label**\n//<size:$TECHN_FONT_SIZE>[$techn]</size>//
+!endprocedure
+
+!unquoted procedure Rel($from, $to, $label, $techn="", $descr="", $sprite="", 
$tags="", $link="")
+$getRel("-->>", $from, $to, $label, $techn, $descr, $sprite, $tags, $link)
+!endprocedure
+
+!unquoted procedure BiRel($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel("<<-->>", $from, $to, $label, $techn, $descr, $sprite, $tags, $link)
+!endprocedure
+
+!unquoted procedure Rel_Back($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel("<<--", $from, $to, $label, $techn, $descr, $sprite, $tags, $link)
+!endprocedure
+
+!unquoted procedure Rel_Neighbor($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel("->>", $from, $to, $label, $techn, $descr, $sprite, $tags, $link)
+!endprocedure
+
+!unquoted procedure BiRel_Neighbor($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel("<<->>", $from, $to, $label, $techn, $descr, $sprite, $tags, $link)
+!endprocedure
+
+!unquoted procedure Rel_Back_Neighbor($from, $to, $label, $techn="", 
$descr="", $sprite="", $tags="", $link="")
+$getRel("<<-", $from, $to, $label, $techn, $descr, $sprite, $tags, $link)
+!endprocedure
+
+!unquoted procedure Rel_D($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($down("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+!unquoted procedure Rel_Down($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($down("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+
+!unquoted procedure BiRel_D($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($down("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, 
$tags, $link)
+!endprocedure
+!unquoted procedure BiRel_Down($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($down("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, 
$tags, $link)
+!endprocedure
+
+!unquoted procedure Rel_U($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($up("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+!unquoted procedure Rel_Up($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($up("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+
+!unquoted procedure BiRel_U($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($up("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+!unquoted procedure BiRel_Up($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($up("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+
+!unquoted procedure Rel_L($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($left("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+!unquoted procedure Rel_Left($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($left("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+
+!unquoted procedure BiRel_L($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($left("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, 
$tags, $link)
+!endprocedure
+!unquoted procedure BiRel_Left($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($left("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, 
$tags, $link)
+!endprocedure
+
+!unquoted procedure Rel_R($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($right("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+!unquoted procedure Rel_Right($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($right("-","->>"), $from, $to, $label, $techn, $descr, $sprite, $tags, 
$link)
+!endprocedure
+
+!unquoted procedure BiRel_R($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($right("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, 
$tags, $link)
+!endprocedure
+!unquoted procedure BiRel_Right($from, $to, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+$getRel($right("<<-","->>"), $from, $to, $label, $techn, $descr, $sprite, 
$tags, $link)
+!endprocedure
+
+' Layout Helpers
+' ##################################
+
+!function $getHiddenLine($distance)
+  !return '-[hidden]' + %substr('------------', 0, %intval($distance) + 1)
+!endfunction
+
+!unquoted procedure Lay_D($from, $to)
+$from -[hidden]D- $to
+!endprocedure
+!unquoted procedure Lay_Down($from, $to)
+$from -[hidden]D- $to
+!endprocedure
+
+!unquoted procedure Lay_U($from, $to)
+$from -[hidden]U- $to
+!endprocedure
+!unquoted procedure Lay_Up($from, $to)
+$from -[hidden]U- $to
+!endprocedure
+
+!unquoted procedure Lay_R($from, $to)
+$from -[hidden]R- $to
+!endprocedure
+!unquoted procedure Lay_Right($from, $to)
+$from -[hidden]R- $to
+!endprocedure
+
+!unquoted procedure Lay_L($from, $to)
+$from -[hidden]L- $to
+!endprocedure
+!unquoted procedure Lay_Left($from, $to)
+$from -[hidden]L- $to
+!endprocedure
+
+' PlantUML bug: lines which does "not match" with the orientation/direction of 
the diagram
+' uses the same length therefore the method offers no direction at all.
+' If a direction is required the Lay_...() methods can be used
+!unquoted procedure Lay_Distance($from, $to, $distance="0")
+$from $getHiddenLine($distance) $to
+!endprocedure
diff --git 
a/antora/components/docs/modules/resources/partials/C4_Container.puml 
b/antora/components/docs/modules/resources/partials/C4_Container.puml
new file mode 100644
index 0000000000..3126fac943
--- /dev/null
+++ b/antora/components/docs/modules/resources/partials/C4_Container.puml
@@ -0,0 +1,111 @@
+' convert it with additional command line argument -DRELATIVE_INCLUDE="." to 
use locally
+' !if %variable_exists("RELATIVE_INCLUDE")
+'   !include %get_variable_value("RELATIVE_INCLUDE")/C4_Context.puml
+' !else
+'   !include 
https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
+' !endif
+
+' Scope: A single software system.
+' Primary elements: Containers within the software system in scope.
+' Supporting elements: People and software systems directly connected to the 
containers.
+' Intended audience: Technical people inside and outside of the software 
development team; including software architects, developers and 
operations/support staff.
+
+' Colors
+' ##################################
+
+!global $CONTAINER_BG_COLOR = "#438DD5"
+!global $CONTAINER_BORDER_COLOR = "#3C7FC0"
+!global $EXTERNAL_CONTAINER_BG_COLOR = "#B3B3B3"
+!global $EXTERNAL_CONTAINER_BORDER_COLOR = "#A6A6A6"
+
+' Styling
+' ##################################
+UpdateElementStyle("container", $CONTAINER_BG_COLOR, $ELEMENT_FONT_COLOR, 
$CONTAINER_BORDER_COLOR)
+UpdateElementStyle("external_container", $EXTERNAL_CONTAINER_BG_COLOR, 
$ELEMENT_FONT_COLOR, $EXTERNAL_CONTAINER_BORDER_COLOR)
+
+' shortcuts with default colors
+!unquoted procedure AddContainerTag($tagStereo, $bgColor=$CONTAINER_BG_COLOR, 
$fontColor=$ELEMENT_FONT_COLOR, $borderColor=$CONTAINER_BORDER_COLOR, 
$shadowing="", $shape="", $sprite="", $techn="", $legendText="", 
$legendSprite="")
+  AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite, $techn, $legendText, $legendSprite)
+!endprocedure
+!unquoted procedure AddExternalContainerTag($tagStereo, 
$bgColor=$EXTERNAL_CONTAINER_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, 
$borderColor=$EXTERNAL_CONTAINER_BORDER_COLOR, $shadowing="", $shape="", 
$sprite="", $techn="", $legendText="", $legendSprite="")
+  AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite, $techn, $legendText, $legendSprite)
+!endprocedure
+
+' Layout
+' ##################################
+
+SetDefaultLegendEntries("person\nsystem\ncontainer\nexternal_person\nexternal_system\nexternal_container")
+
+!procedure LAYOUT_WITH_LEGEND()
+hide stereotype
+legend right
+|<color:$LEGEND_TITLE_COLOR>**Legend**</color> |
+|<$PERSON_BG_COLOR> person |
+|<$SYSTEM_BG_COLOR> system |
+|<$CONTAINER_BG_COLOR> container |
+|<$EXTERNAL_PERSON_BG_COLOR> external person |
+|<$EXTERNAL_SYSTEM_BG_COLOR> external system |
+|<$EXTERNAL_CONTAINER_BG_COLOR> external container |
+endlegend
+!endprocedure
+
+' Elements
+' ##################################
+
+!function $getContainer($label, $techn, $descr, $sprite)
+  !$container = ""
+  !if ($sprite != "")
+    !$container = $container + $getSprite($sprite) + '\n'
+  !endif
+  !$container = $container + '==' + $label
+  !if ($techn != "")
+    !$container = $container + '\n//<size:' + $TECHN_FONT_SIZE + '>[' + $techn 
+ ']</size>//'
+  !endif
+  !if ($descr != "")
+    !$container = $container + '\n\n' + $descr
+  !endif
+  !return $container
+!endfunction
+
+!unquoted procedure Container($alias, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "container")
+!$techn=$toElementArg($techn, $tags, "ElementTagTechn", "container")
+rectangle "$getContainer($label, $techn, $descr, $sprite)$getProps()" 
$toStereos("container", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure ContainerDb($alias, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "container")
+!$techn=$toElementArg($techn, $tags, "ElementTagTechn", "container")
+database "$getContainer($label, $techn, $descr, $sprite)$getProps()" 
$toStereos("container", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure ContainerQueue($alias, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "container")
+!$techn=$toElementArg($techn, $tags, "ElementTagTechn", "container")
+queue "$getContainer($label, $techn, $descr, $sprite)$getProps()" 
$toStereos("container", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure Container_Ext($alias, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", 
"external_container")
+!$techn=$toElementArg($techn, $tags, "ElementTagTechn", "external_container")
+rectangle "$getContainer($label, $techn, $descr, $sprite)$getProps()" 
$toStereos("external_container", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure ContainerDb_Ext($alias, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", 
"external_container")
+!$techn=$toElementArg($techn, $tags, "ElementTagTechn", "external_container")
+database "$getContainer($label, $techn, $descr, $sprite)$getProps()" 
$toStereos("external_container", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure ContainerQueue_Ext($alias, $label, $techn="", $descr="", 
$sprite="", $tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", 
"external_container")
+!$techn=$toElementArg($techn, $tags, "ElementTagTechn", "external_container")
+queue "$getContainer($label, $techn, $descr, $sprite)$getProps()" 
$toStereos("external_container", $tags) as $alias $getLink($link)
+!endprocedure
+
+' Boundaries
+' ##################################
+
+!unquoted procedure Container_Boundary($alias, $label, $tags="", $link="")
+Boundary($alias, $label, "Container", $tags, $link)
+!endprocedure
diff --git a/antora/components/docs/modules/resources/partials/C4_Context.puml 
b/antora/components/docs/modules/resources/partials/C4_Context.puml
new file mode 100644
index 0000000000..5d3513d3c2
--- /dev/null
+++ b/antora/components/docs/modules/resources/partials/C4_Context.puml
@@ -0,0 +1,292 @@
+' convert it with additional command line argument -DRELATIVE_INCLUDE="." to 
use locally
+' !if %variable_exists("RELATIVE_INCLUDE")
+'   !include %get_variable_value("RELATIVE_INCLUDE")/C4.puml
+' !else
+'   !include 
https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4.puml
+' !endif
+
+' Scope: A single software system.
+' Primary elements: The software system in scope.
+' Supporting elements: People and software systems directly connected to the 
software system in scope.
+' Intended audience: Everybody, both technical and non-technical people, 
inside and outside of the software development team.
+
+' Colors
+' ##################################
+
+!global $PERSON_BG_COLOR = "#08427B"
+!global $PERSON_BORDER_COLOR = "#073B6F"
+!global $EXTERNAL_PERSON_BG_COLOR = "#686868"
+!global $EXTERNAL_PERSON_BORDER_COLOR = "#8A8A8A"
+!global $SYSTEM_BG_COLOR = "#1168BD"
+!global $SYSTEM_BORDER_COLOR = "#3C7FC0"
+!global $EXTERNAL_SYSTEM_BG_COLOR = "#999999"
+!global $EXTERNAL_SYSTEM_BORDER_COLOR = "#8A8A8A"
+
+' Styling
+' ##################################
+
+UpdateElementStyle("person", $PERSON_BG_COLOR, $ELEMENT_FONT_COLOR, 
$PERSON_BORDER_COLOR)
+UpdateElementStyle("external_person", $EXTERNAL_PERSON_BG_COLOR, 
$ELEMENT_FONT_COLOR, $EXTERNAL_PERSON_BORDER_COLOR)
+UpdateElementStyle("system", $SYSTEM_BG_COLOR, $ELEMENT_FONT_COLOR, 
$SYSTEM_BORDER_COLOR)
+UpdateElementStyle("external_system", $EXTERNAL_SYSTEM_BG_COLOR, 
$ELEMENT_FONT_COLOR, $EXTERNAL_SYSTEM_BORDER_COLOR)
+
+' shortcuts with default colors
+!unquoted procedure AddPersonTag($tagStereo, $bgColor=$PERSON_BG_COLOR, 
$fontColor=$ELEMENT_FONT_COLOR, $borderColor=$PERSON_BORDER_COLOR, 
$shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="")
+  AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite, "", $legendText, $legendSprite)
+!endprocedure
+!unquoted procedure AddExternalPersonTag($tagStereo, 
$bgColor=$EXTERNAL_PERSON_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, 
$borderColor=$EXTERNAL_PERSON_BORDER_COLOR, $shadowing="", $shape="", 
$sprite="", $legendText="", $legendSprite="")
+  AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite, "", $legendText, $legendSprite)
+!endprocedure
+!unquoted procedure AddSystemTag($tagStereo, $bgColor=$SYSTEM_BG_COLOR, 
$fontColor=$ELEMENT_FONT_COLOR, $borderColor=$SYSTEM_BORDER_COLOR, 
$shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="")
+  AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite, "", $legendText, $legendSprite)
+!endprocedure
+!unquoted procedure AddExternalSystemTag($tagStereo, 
$bgColor=$EXTERNAL_SYSTEM_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, 
$borderColor=$EXTERNAL_SYSTEM_BORDER_COLOR, $shadowing="", $shape="", 
$sprite="", $legendText="", $legendSprite="")
+  AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, 
$shape, $sprite, "", $legendText, $legendSprite)
+!endprocedure
+
+' Sprites
+' ##################################
+
+sprite $person [48x48/16] {
+000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000
+0000000000000000000049BCCA7200000000000000000000
+0000000000000000006EFFFFFFFFB3000000000000000000
+00000000000000001CFFFFFFFFFFFF700000000000000000
+0000000000000001EFFFFFFFFFFFFFF80000000000000000
+000000000000000CFFFFFFFFFFFFFFFF6000000000000000
+000000000000007FFFFFFFFFFFFFFFFFF100000000000000
+00000000000001FFFFFFFFFFFFFFFFFFF900000000000000
+00000000000006FFFFFFFFFFFFFFFFFFFF00000000000000
+0000000000000BFFFFFFFFFFFFFFFFFFFF40000000000000
+0000000000000EFFFFFFFFFFFFFFFFFFFF70000000000000
+0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
+0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
+0000000000000DFFFFFFFFFFFFFFFFFFFF60000000000000
+0000000000000AFFFFFFFFFFFFFFFFFFFF40000000000000
+00000000000006FFFFFFFFFFFFFFFFFFFE00000000000000
+00000000000000EFFFFFFFFFFFFFFFFFF800000000000000
+000000000000007FFFFFFFFFFFFFFFFFF100000000000000
+000000000000000BFFFFFFFFFFFFFFFF5000000000000000
+0000000000000001DFFFFFFFFFFFFFF70000000000000000
+00000000000000000BFFFFFFFFFFFF500000000000000000
+0000000000000000005DFFFFFFFFA1000000000000000000
+0000000000000000000037ABB96100000000000000000000
+000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000
+000000000000025788300000000005886410000000000000
+000000000007DFFFFFFD9643347BFFFFFFFB400000000000
+0000000004EFFFFFFFFFFFFFFFFFFFFFFFFFFB1000000000
+000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFD200000000
+00000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE10000000
+0000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0000000
+000000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5000000
+000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD000000
+000009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF200000
+00000DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000
+00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000
+00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA00000
+00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
+00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
+00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
+00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA00000
+00000EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF700000
+000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE100000
+0000008FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3000000
+000000014555555555555555555555555555555300000000
+000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000
+}
+
+sprite $person2 [48x48/16] {
+0000000000000000000049BCCA7200000000000000000000
+0000000000000000006EFFFFFFFFB3000000000000000000
+00000000000000001CFFFFFFFFFFFF700000000000000000
+0000000000000001EFFFFFFFFFFFFFF80000000000000000
+000000000000000CFFFFFFFFFFFFFFFF6000000000000000
+000000000000007FFFFFFFFFFFFFFFFFF100000000000000
+00000000000001FFFFFFFFFFFFFFFFFFF900000000000000
+00000000000006FFFFFFFFFFFFFFFFFFFF00000000000000
+0000000000000BFFFFFFFFFFFFFFFFFFFF40000000000000
+0000000000000EFFFFFFFFFFFFFFFFFFFF70000000000000
+0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
+0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
+0000000000000DFFFFFFFFFFFFFFFFFFFF60000000000000
+0000000000000AFFFFFFFFFFFFFFFFFFFF40000000000000
+00000000000006FFFFFFFFFFFFFFFFFFFE00000000000000
+00000000000000EFFFFFFFFFFFFFFFFFF800000000000000
+000000000000007FFFFFFFFFFFFFFFFFF100000000000000
+000000000000000BFFFFFFFFFFFFFFFF5000000000000000
+0000000000000001DFFFFFFFFFFFFFF70000000000000000
+00000000000000000BFFFFFFFFFFFF500000000000000000
+0000000000000000005DFFFFFFFFA1000000000000000000
+0000000000000000000037ABB96100000000000000000000
+000000000002578888300000000005888864100000000000
+0000000007DFFFFFFFFD9643347BFFFFFFFFFB4000000000
+00000004EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB10000000
+0000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2000000
+000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE100000
+00003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
+0000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50000
+0003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0000
+0009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2000
+000DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000
+000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000
+001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB000
+001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB000
+001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB000
+001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA000
+000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000
+000DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000
+0009FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFFF2000
+0003FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFFD0000
+0000BFFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFF50000
+00003FFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFB00000
+000006FFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFE100000
+0000007FFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFD2000000
+00000004EFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFB10000000
+0000000007DF8FFFFFFFFFFFFFFFFFFFFFF8FB4000000000
+000000000002578888888888888888888864100000000000
+}
+
+' Layout
+' ##################################
+
+SetDefaultLegendEntries("person\nsystem\nexternal_person\nexternal_system")
+
+!procedure LAYOUT_WITH_LEGEND()
+hide stereotype
+legend right
+|<color:$LEGEND_TITLE_COLOR>**Legend**</color> |
+|<$PERSON_BG_COLOR> person |
+|<$SYSTEM_BG_COLOR> system|
+|<$EXTERNAL_PERSON_BG_COLOR> external person |
+|<$EXTERNAL_SYSTEM_BG_COLOR> external system |
+endlegend
+!endprocedure
+
+!global $defaultPersonSprite = "person"
+!global $portraitPerson = "false"
+
+!procedure HIDE_PERSON_SPRITE()
+  !$defaultPersonSprite = ""
+  !$portraitPerson = "false"
+!endprocedure
+
+!unquoted procedure SHOW_PERSON_SPRITE($sprite="")
+  !if ($sprite == "")
+    !$defaultPersonSprite = "person"
+  !else
+    !$defaultPersonSprite = $sprite
+  !endif
+  !$portraitPerson = "false"
+!endprocedure
+
+!unquoted procedure SHOW_PERSON_PORTRAIT()
+  !$defaultPersonSprite = ""
+  !$portraitPerson = "portrait"
+!endprocedure
+
+!unquoted procedure SHOW_PERSON_OUTLINE()
+  !$defaultPersonSprite = ""
+  !$portraitPerson = "outline"
+!endprocedure
+
+' Elements
+' ##################################
+
+!function $getPerson($label, $descr, $sprite)
+!if ($sprite == "") && ($defaultPersonSprite != "")
+  !$sprite = $defaultPersonSprite
+!endif
+!if ($descr == "") && ($sprite == "")
+  !return '=='+$label
+!endif
+!if ($descr == "") && ($sprite != "")
+  !return $getSprite($sprite)+'\n=='+$label
+!endif
+!if ($descr != "") && ($sprite == "")
+  !return '=='+$label+'\n\n '+$descr
+!endif
+!if ($descr != "") && ($sprite != "")
+  !return $getSprite($sprite)+'\n=='+$label+'\n\n '+$descr
+!endif
+!endfunction
+
+!function $getSystem($label, $descr, $sprite)
+!if ($descr == "") && ($sprite == "")
+!return '=='+$label
+!endif
+!if ($descr == "") && ($sprite != "")
+!return $getSprite($sprite)+'\n=='+$label
+!endif
+!if ($descr != "") && ($sprite == "")
+!return '=='+$label+'\n\n '+$descr
+!endif
+!if ($descr != "") && ($sprite != "")
+!return $getSprite($sprite)+'\n=='+$label+'\n\n '+$descr
+!endif
+!endfunction
+
+!unquoted procedure Person($alias, $label, $descr="", $sprite="", $tags="", 
$link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "person")
+!if ($portraitPerson == "portrait") && ($sprite == "")
+actor "$getPerson($label, $descr, $sprite)$getProps()" $toStereos("person", 
$tags) as $alias $getLink($link)
+!elseif ($portraitPerson == "outline") && ($sprite == "")
+person "$getPerson($label, $descr, $sprite)$getProps()" $toStereos("person", 
$tags) as $alias $getLink($link)
+!else
+rectangle "$getPerson($label, $descr, $sprite)$getProps()" 
$toStereos("person", $tags) as $alias $getLink($link)
+!endif
+!endprocedure
+
+!unquoted procedure Person_Ext($alias, $label, $descr="", $sprite="", 
$tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_person")
+!if ($portraitPerson == "portrait") && ($sprite == "")
+actor "$getPerson($label, $descr, $sprite)$getProps()" 
$toStereos("external_person", $tags) as $alias $getLink($link)
+!elseif ($portraitPerson == "outline") && ($sprite == "")
+person "$getPerson($label, $descr, $sprite)$getProps()" 
$toStereos("external_person", $tags) as $alias $getLink($link)
+!else
+rectangle "$getPerson($label, $descr, $sprite)$getProps()" 
$toStereos("external_person", $tags) as $alias $getLink($link)
+!endif
+!endprocedure
+
+!unquoted procedure System($alias, $label, $descr="", $sprite="", $tags="", 
$link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "system")
+rectangle "$getSystem($label, $descr, $sprite)$getProps()" 
$toStereos("system", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure System_Ext($alias, $label, $descr="", $sprite="", 
$tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_system")
+rectangle "$getSystem($label, $descr, $sprite)$getProps()" 
$toStereos("external_system", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure SystemDb($alias, $label, $descr="", $sprite="", $tags="", 
$link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "system")
+database "$getSystem($label, $descr, $sprite)$getProps()" $toStereos("system", 
$tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure SystemQueue($alias, $label, $descr="", $sprite="", 
$tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "system")
+queue "$getSystem($label, $descr, $sprite)$getProps()" $toStereos("system", 
$tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure SystemDb_Ext($alias, $label, $descr="", $sprite="", 
$tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_system")
+database "$getSystem($label, $descr, $sprite)$getProps()" 
$toStereos("external_system", $tags) as $alias $getLink($link)
+!endprocedure
+
+!unquoted procedure SystemQueue_Ext($alias, $label, $descr="", $sprite="", 
$tags="", $link="")
+!$sprite=$toElementArg($sprite, $tags, "ElementTagSprite", "external_system")
+queue "$getSystem($label, $descr, $sprite)$getProps()" 
$toStereos("external_system", $tags) as $alias $getLink($link)
+!endprocedure
+
+' Boundaries
+' ##################################
+
+!unquoted procedure Enterprise_Boundary($alias, $label, $tags="", $link="")
+Boundary($alias, $label, "Enterprise", $tags, $link)
+!endprocedure
+
+!unquoted procedure System_Boundary($alias, $label, $tags="", $link="")
+Boundary($alias, $label, "System", $tags, $link)
+!endprocedure
diff --git 
a/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M3/relnotes.adoc 
b/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M3/relnotes.adoc
index 8492ffb095..2dd4a0f542 100644
--- a/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M3/relnotes.adoc
+++ b/antora/components/relnotes/modules/ROOT/pages/2020/2.0.0-M3/relnotes.adoc
@@ -21,7 +21,7 @@ This milestone also introduces a number of new features:
 * security integration with xref:security:keycloak:about.adoc[Keycloak]
 
 * New value types:
-** text-based value type with simple xref:valuetypes:sse:about.adoc[SSE 
support]
+** text-based value type with simple xref:vw:sse:about.adoc[SSE support]
 ** xref:valuetypes:asciidoc:about.adoc[Asciidoc] value type
 ** xref:valuetypes:markdown:about.adoc[Markdown] value type
 
diff --git a/antora/playbooks/site-core.yml b/antora/playbooks/site-core.yml
index 95493944c9..e3421d9954 100644
--- a/antora/playbooks/site-core.yml
+++ b/antora/playbooks/site-core.yml
@@ -63,9 +63,6 @@ content:
     - url: .
       start_path: examples/demo/domain/src/main/adoc # docs
       branches: HEAD
-    - url: .
-      start_path: regressiontests/adoc # core
-      branches: HEAD
 
 # mavendeps
     - url: .
diff --git a/antora/playbooks/site-core.yml 
b/antora/playbooks/site-regressiontests.yml
similarity index 70%
copy from antora/playbooks/site-core.yml
copy to antora/playbooks/site-regressiontests.yml
index 95493944c9..535ee5d70a 100644
--- a/antora/playbooks/site-core.yml
+++ b/antora/playbooks/site-regressiontests.yml
@@ -27,57 +27,29 @@ content:
     - url: .
       start_path: antora/components/docs # docs
       branches: HEAD
-# core
-    - url: .
-      start_path: core/adoc  # core (design docs)
-      branches: HEAD
-    - url: .
-      start_path: core/codegen-bytebuddy/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: commons/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/interaction/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/internaltestsupport/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/metamodel/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/runtime/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/runtimeservices/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/transaction/src/main/adoc # core
-      branches: HEAD
-    - url: .
-      start_path: core/webapp/src/main/adoc # core
-      branches: HEAD
 
 # examples
     - url: .
       start_path: examples/demo/domain/src/main/adoc # docs
       branches: HEAD
-    - url: .
-      start_path: regressiontests/adoc # core
-      branches: HEAD
 
 # mavendeps
     - url: .
       start_path: mavendeps/adoc # docs
       branches: HEAD
 
+# regression tests
+    - url: .
+      start_path: regressiontests/adoc # regressiontests
+      branches: HEAD
+
 # starters
     - url: .
       start_path: starters/adoc # docs
       branches: HEAD
 
 
+
 ui:
   bundle:
     url: ../isis-antora/build/ui-bundle.zip
diff --git a/antora/playbooks/site.yml b/antora/playbooks/site.yml
index 12743c3ce5..cd0da7c93e 100644
--- a/antora/playbooks/site.yml
+++ b/antora/playbooks/site.yml
@@ -99,16 +99,12 @@ content:
     - url: .
       start_path: antora/components/tutorials # tutorials
       branches: HEAD
-    - url: .
-      start_path: regressiontests/adoc # core
-      branches: HEAD
 
 # extensions
     - url: .
       start_path: extensions/adoc # extensions
       branches: HEAD
 
-
     - url: .
       start_path: extensions/core/commandlog/adoc # userguide
       branches: HEAD
@@ -200,6 +196,11 @@ content:
       start_path: persistence/jdo/adoc # pjdo
       branches: HEAD
 
+# regression tests
+    - url: .
+      start_path: regressiontests/adoc # regressiontests
+      branches: HEAD
+
 # security
     - url: .
       start_path: security/adoc # security
diff --git a/antora/supplemental-ui/index.html 
b/antora/supplemental-ui/index.html
index 8eb2ffcfd6..cb6e981eae 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -882,7 +882,7 @@ mvn -pl webapp jetty:run</pre>
 
       <div class="col-md-8">
         <div class="copyright">
-          Copyright © 2010~2021 The Apache Software Foundation, licensed under 
the Apache License, v2.0.
+          Copyright © 2010~2022 The Apache Software Foundation, licensed under 
the Apache License, v2.0.
           Apache, the Apache feather logo, Apache Isis™, and the Apache Isis 
project logo are all trademarks of The Apache Software Foundation.
         </div>
       </div>
diff --git a/core/adoc/modules/archdesign/pages/about.adoc 
b/core/adoc/modules/ROOT/pages/_todo.adoc
similarity index 80%
rename from core/adoc/modules/archdesign/pages/about.adoc
rename to core/adoc/modules/ROOT/pages/_todo.adoc
index 01730eb422..5067c5c34b 100644
--- a/core/adoc/modules/archdesign/pages/about.adoc
+++ b/core/adoc/modules/ROOT/pages/_todo.adoc
@@ -1,22 +1,12 @@
-= Architecture & Design
+= TODO
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or ag [...]
 
 
-This guide describes the internal architecture and design of the framework.
+TODO: discuss some of these topics:
 
-[CAUTION]
-====
-This material is out-of-date.
-====
-
-
-to discuss:
-
-* our plugin architecture (using ServiceLoader)
 * webmodule architecture (programmatic web.xml)
 * use of Spring Boot & our modules for classpath scanning
 * configuration
 * extensions
 * log4j2
-* plugins
diff --git a/core/adoc/modules/ROOT/pages/about.adoc 
b/core/adoc/modules/ROOT/pages/about.adoc
index e6c0129bd7..2596c084c5 100644
--- a/core/adoc/modules/ROOT/pages/about.adoc
+++ b/core/adoc/modules/ROOT/pages/about.adoc
@@ -1,14 +1,72 @@
-= Core Framework
+= Internal Design Docs
 
 :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 [...]
 :page-partial:
 
-This section documents the design and implementation of the core framework.
+This section documents the internal design and implementation of the core 
framework.
+It will primarily be of interest to committers and contributors to the 
framework.
 
-We also include some design documentation - where it provides useful context - 
in the end-user documentation set:
+We also include some design documentation - where it provides useful context - 
in the end-user documentation set (the xref:userguide:ROOT:about.adoc[user 
guide], xref:refguide:ROOT:about.adoc[reference guide], 
xref:security:ROOT:about.adoc[security guide] and 
xref:testing:ROOT:about.adoc[testing guide]).
 
-* xref:userguide:ROOT:about.adoc[user guide]
-* xref:refguide:ROOT:about.adoc[reference guide]
-* xref:security:ROOT:about.adoc[security guide]
-* xref:testing:ROOT:about.adoc[testing guide].
 
+== Modules
+
+There is a section for most of the `core` modules:
+
+* xref:core:codegen-bytebuddy:about.adoc[] - utliity service to create dynamic 
proxy objects
+
+* xref:core:commons:about.adoc[] - an extensive library of common utilities 
(though not intended as an end-user API)
++
+Note that this module does not reside in `core/` directory, instead it is to 
be found in `../commons` directory instead
+
+* xref:core:interaction:about.adoc[] - declares the `@InteractionScope` to 
Spring.
+Also defines the internal data structures that keep track of the action 
invocations and property edits performed within the interaction.
++
+An "interaction" is normally the same duration as a web request, whereby a 
short-lived persistence session is created using a connection from a database 
connection pool.
+
+* xref:core:internaltestsupport:about.adoc[] - utility classes for unit 
testing the framework's own classes.
+
+* xref:core:metamodel:about.adoc[] - classes that are used to build the 
internal metamodel by introspecting the domain classes.
++
+Many of the services defined (as interfaces) in the applib have 
implementations defined in this module (the rest are defined in 
xref:core:runtimeservices:about.adoc[], below).
++
+The documentation in this module explains (with diagrams) the concepts at both 
a high and more detailed level.
++
+As you might have guessed, this is the largest module within the framework.
+
+* xref:core:runtime:about.adoc[] - a very small module providing a set of 
classes to handle the runtime context.
+It also has classes that trigger events for when the metamodel is fully built 
(after bootstrapping), and to emit events for transaction boundaries.
+
+* xref:core:runtimeservices:about.adoc[] - provides an extensive set of domain 
services.
++
+Many of the services defined (as interfaces) in the applib are actually 
implemented in this module (the rest are defined in 
xref:core:metamodel:about.adoc[], above).
+
+* xref:core:transaction:about.adoc[] - a small module providing a set of 
classes primarily concerned with for tracking changes to entities during 
transactions.
+
+* xref:core:webapp:about.adoc[] - classes used to bootstrap the app itself, 
also providing hooks for other components to contribute their own
+filters and servlets into the web request pipeline.
+
+
+As a simplification, the xref:core:metamodel:about.adoc[] module handles 
domain types (cf `java.lang.Class`) while the xref:core:runtime:about.adoc[] 
and xref:core:runtimeservices:about.adoc[] modules handle domain object 
instances (cf `java.lang.Object`).
+That said, Spring Boot is responsible for instantiating domain service 
instances, while the persistence mechanisms (xref:pjpa:ROOT:about.adoc[JPA] and 
xref:pjdo:ROOT:about.adoc[JDO]) -- which are not part of the `core` modules -- 
handle the lifecycle of entity instances.
+
+
+There are also two `core` modules not listed above, because their 
documentation are both part of the end-user docs:
+
+* the docs for the `core/config` module consistitute the 
xref:refguide:config:about.adoc[]
+* the docs for the `core/security` module consistitute  the 
xref:security:ROOT:about.adoc[Security Guide]
+
+
+== Generated Index
+
+This is probably a good place as any to mention that the documentation/website 
procedures include tooling to automatically create Asciidoc reference 
documentation for _any_ Java class in the codebase.
+
+This is used extensively for the classes in the applib; these can be 
referenced using the form `\xref:refguide:applib:index/xxx.adoc[]`.
+
+* For example `\xref:refguide:applib:index/annotation/DomainObject.adoc[]` 
resolves to xref:refguide:applib:index/annotation/DomainObject.adoc[].
+
+But the index is also available for internal classes, such as those in 
core/security, which can be found under 
`\xref:refguide:core:index/security/xxx.adoc[]`
+
+* For example, 
`\xref:refguide:core:index/security/authentication/Authenticator.adoc[]` 
resolves to 
xref:refguide:core:index/security/authentication/Authenticator.adoc[].
+
+Not every class is generated into the index, but all that is required is to 
include `{@index}` in the class-level javadoc.
diff --git a/core/adoc/modules/ROOT/partials/component-nav.adoc 
b/core/adoc/modules/ROOT/partials/component-nav.adoc
index 9e671bc5cc..3e1e24c4b4 100644
--- a/core/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/core/adoc/modules/ROOT/partials/component-nav.adoc
@@ -1,10 +1,12 @@
 include::core:ROOT:partial$module-nav.adoc[]
-include::core:archdesign:partial$module-nav.adoc[]
 include::core:commons:partial$module-nav.adoc[]
 include::core:codegen-bytebuddy:partial$module-nav.adoc[]
+include::core:interaction:partial$module-nav.adoc[]
+include::core:internaltestsupport:partial$module-nav.adoc[]
 include::core:metamodel:partial$module-nav.adoc[]
 include::core:runtime:partial$module-nav.adoc[]
 include::core:runtimeservices:partial$module-nav.adoc[]
+include::core:transaction:partial$module-nav.adoc[]
 include::core:webapp:partial$module-nav.adoc[]
 include::core:regressiontests:partial$module-nav.adoc[]
 
diff --git a/core/adoc/modules/ROOT/partials/module-nav.adoc 
b/core/adoc/modules/ROOT/partials/module-nav.adoc
index 139597f9cb..ad29d84a83 100644
--- a/core/adoc/modules/ROOT/partials/module-nav.adoc
+++ b/core/adoc/modules/ROOT/partials/module-nav.adoc
@@ -1,2 +1,5 @@
+* xref:core:ROOT:about.adoc[Overview]
+** xref:core:_overview:about.adoc[Maven modules]
+//** xref:core:ROOT:_todo.adoc[]
 
 
diff --git a/core/adoc/modules/archdesign/attachments/modules-dependencies.pptx 
b/core/adoc/modules/archdesign/attachments/modules-dependencies.pptx
deleted file mode 100644
index 02ad2625f0..0000000000
Binary files 
a/core/adoc/modules/archdesign/attachments/modules-dependencies.pptx and 
/dev/null differ
diff --git a/core/adoc/modules/archdesign/images/modules-dependencies.png 
b/core/adoc/modules/archdesign/images/modules-dependencies.png
deleted file mode 100644
index baa01c434d..0000000000
Binary files a/core/adoc/modules/archdesign/images/modules-dependencies.png and 
/dev/null differ
diff --git a/core/adoc/modules/archdesign/nav.adoc 
b/core/adoc/modules/archdesign/nav.adoc
deleted file mode 100644
index 798e16ada2..0000000000
--- a/core/adoc/modules/archdesign/nav.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or ag [...]
-
-include::core:ROOT:partial$component-nav.adoc[]
diff --git a/core/adoc/modules/archdesign/partials/module-nav.adoc 
b/core/adoc/modules/archdesign/partials/module-nav.adoc
deleted file mode 100644
index 9045967ad2..0000000000
--- a/core/adoc/modules/archdesign/partials/module-nav.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-* xref:core:archdesign:about.adoc[Architecture & Design]
-
-
diff --git 
a/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/pages/about.adoc
 
b/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/pages/about.adoc
index 23feb893c5..39dae43093 100644
--- 
a/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/pages/about.adoc
+++ 
b/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/pages/about.adoc
@@ -1,6 +1,9 @@
-= Byte Buddy Proxy Factory
+= CodeGen (Proxy Factory) using Byte Buddy
 
 :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 [...]
 
-WARNING: TODO
+This module provides an implementation of the internal `_ProxyFactoryService` 
domain service, used to synthesise object proxies dynamically.
 
+Under the covers the link:https://bytebuddy.net/#/[Byte Buddy] library is used.
+
+The main user of this functionality is the 
xref:refguide:applib:index/services/wrapper/WrapperFactory.adoc[] domain 
service, which creates a proxy in order to intercept calls to a wrapped domain 
object.
diff --git 
a/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/partials/module-nav.adoc
 
b/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/partials/module-nav.adoc
index f40c0894a7..efc40e6ebb 100644
--- 
a/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/partials/module-nav.adoc
+++ 
b/core/codegen-bytebuddy/src/main/adoc/modules/codegen-bytebuddy/partials/module-nav.adoc
@@ -1,4 +1,4 @@
 
 
 
-* xref:core:codegen-bytebuddy:about.adoc[Byte Buddy Proxy Factory]
+* xref:core:codegen-bytebuddy:about.adoc[Code Gen] (Proxy Factory)
diff --git 
a/core/interaction/src/main/adoc/modules/interaction/pages/about.adoc 
b/core/interaction/src/main/adoc/modules/interaction/pages/about.adoc
index a0a0249169..8a438833c4 100644
--- a/core/interaction/src/main/adoc/modules/interaction/pages/about.adoc
+++ b/core/interaction/src/main/adoc/modules/interaction/pages/about.adoc
@@ -2,4 +2,9 @@
 
 :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 [...]
 
-WARNING: TODO
+An "interaction" is normally the same duration as a web request, whereby a 
short-lived persistence session is created using a connection from a database 
connection pool.
+
+This module provides the classes that define the support for 
xref:refguide:applib:index/annotation/InteractionScope.adoc[]  to Spring.
+
+This module also defines the internal data structures that keep track of the 
action invocations and property edits performed within the interaction.
+
diff --git 
a/core/internaltestsupport/src/main/adoc/modules/internaltestsupport/pages/about.adoc
 
b/core/internaltestsupport/src/main/adoc/modules/internaltestsupport/pages/about.adoc
index b1f23d2877..305c4270cd 100644
--- 
a/core/internaltestsupport/src/main/adoc/modules/internaltestsupport/pages/about.adoc
+++ 
b/core/internaltestsupport/src/main/adoc/modules/internaltestsupport/pages/about.adoc
@@ -2,4 +2,4 @@
 
 :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 [...]
 
-WARNING: TODO
+This module provides a number of utility classes to help with unit testing 
framework's own classes.
diff --git a/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc 
b/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc
index 9af05c8412..746011899d 100644
--- a/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc
+++ b/core/metamodel/src/main/adoc/modules/metamodel/pages/about.adoc
@@ -2,6 +2,293 @@
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or ag [...]
 
+This module contains the classes that are used to build the internal metamodel 
by introspecting the domain classes.
 
-WARNING: TODO
+Many of the services defined (as interfaces) in the applib have 
implementations defined in this module (the rest are defined in 
xref:core:runtimeservices:about.adoc[]).
 
+== What makes up the metamodel
+
+The classes in this module are used to build up the metamodel from a variety 
of inputs sources:
+
+[plantuml,file="metamodel.png"]
+.metamodel inputs
+----
+@startuml
+!include <logos/java>
+!include <tupadr3/font-awesome/at>
+!include <tupadr3/font-awesome/envira>
+!include <office/Databases/database_cube>
+!include <material/xml.puml>
+
+legend top
+|= notation |= explanation |
+| ""__underline__"" | DDD Pattern|
+endlegend
+
+together {
+    rectangle "<$database_cube><$at>\n<<Annotation>>\nORM (JPA/JDO)" as PERS
+    rectangle "<$envira><$at>\n<<Annotation>>\nSpring" as SPRING
+    rectangle 
"<img:https://isis.apache.org/_/img/home/isis-logo-56x64.png><$at>\n<<Annotation>>\nApache
 Isis" as FW
+    rectangle 
"<img:https://isis.apache.org/_/img/home/isis-logo-56x64.png><$java>\n<<Supporting
 Methods>>\nApache Isis" as SM
+    rectangle "<$java><$ma_xml><$at>\n<<Annotation>>\nJAXB" as JAXB
+
+    SPRING -[hidden]- PERS
+    PERS -[hidden]- FW
+    FW -[hidden]- SM
+    SM -[hidden]- JAXB
+
+    note left of SPRING
+        * __Repository__
+        * Name (@Named)
+        * Service (via FW @DomainService)
+        * Component (via FW @DomainObject)
+    end note
+
+    note left of PERS
+        * Cardinality
+        * TableName
+        * Column
+        ** Name
+        ** Length
+        ** Type
+    end note
+
+    note left of FW
+        * __Entitiy__
+        ** Property
+        ** Collection
+        ** Action
+        * __Factory__
+        * Layout
+        ** Property Sequence
+            (Table and Forms)
+        ** Action Sequence (Menu)
+        ** Styles (cssClass)
+        * ViewModel
+        * Mixin
+    end note
+
+    note left of SM
+        * autoComplete…()
+        * choices…()
+        * default…()
+        * disable…()
+        * get…()
+        * hide…()
+        * iconName()
+        * set…()
+        * title()
+        * validate…()
+    end note
+
+    note left of JAXB
+        * @XmlAccessorType
+        * @XmlJavaTypeAdapter
+        * @XmlRootElement
+    end note
+}
+
+rectangle 
"<img:https://isis.apache.org/_/img/home/isis-logo-56x64.png>\nMetaModel" as MM
+
+SPRING -> MM
+PERS -> MM
+FW -> MM
+SM -> MM
+JAXB -> MM
+
+(MetaModelValidation) as MMV
+MM <- MMV : perform \n consistency \n check
+
+rectangle "WicketViewer" as UI
+database DB
+interface "Restful\nObjects" as REST
+MM -d-> UI : generate
+MM -d-> DB : generate
+MM -d-> REST : generate
+
+@enduml
+----
+//note left of UI
+//File | Edit | Help
+//end note
+
+
+== Metamodel Concepts
+
+The metamodel itself consists of the following parts:
+
+[plantuml,file="metamodel_concepts.png"]
+.Metamodel Terminology
+----
+@startuml
+
+skinparam nodesep 20
+skinparam ranksep 1
+
+together {
+       (Domain\nObject) as DO
+       (Entity) as E
+       (View\nModel) as VM
+}
+(<i>Apache Isis</i>) as FW
+(Persistence\nLayer) as PL
+together {
+       (Mixin) as M
+       (Mixee) as ME
+}
+(Service) as S
+(Domain\nService) as DS
+(<i>Spring</i>) as SPRING
+together {
+       (Member) as MB
+       (Property) as P
+       (Collection) as C
+       (Action) as A
+}
+
+DO <-d-"is a" VM
+DO <-d-"is a" E
+FW .u.> VM : manages
+PL .u.> E : manages
+
+P "is a"-u-> MB
+C "is a"-u-> MB
+A "is a"-u-> MB
+
+DO --> MB : has 1..*
+
+M "contributes\n a"..> MB
+M "contributes\n to"-> ME
+DO -> ME : can \n act \n as
+
+SPRING ..> S : manages
+DS "is a"-u-> S
+DS --> A : has 1..*
+@enduml
+----
+
+Thus:
+
+* _Domain Objects_ have *_Properties_*, *_Collections_*
+
+* *_Viewmodels_* and *_Entities_* are specializations of *_Domain Objects_*.
+
+** _View Models_ are (lifecycle-) managed by _Apache Isis_
+** _Entities_ are managed by the configured persistence layer
+(either JDO or JPA).
+
+* *_Services_* in general are (lifecycle-) managed by _Spring_.
++
+Some _Services_ are also *_included_* in the metamodel; we call these *_Domain 
Services_* (annotated with 
xref:refguide:applib:index/annotation/DomainService.adoc[]).
+Their _Actions_ (like _Domain Objects_') will be visible either _Menu Actions_ 
in the xref:vw:ROOT:about.adoc[Wicket UI] and/or through the 
xref:vro:ROOT:about.adoc[REST API].
+
+* *_Mixins_* _contribute_ either a _Property_, a _Collection_
+or an _Action_ to their *_Mixee_* (-type).
+
+
+[#class-diagram]
+== Class Diagram
+
+The diagram below shows a simplified version of Apache Isis' internal 
metamodel.
+
+
+[plantuml]
+----
+include::docs:resources:partial$plantuml-stereotypes.puml[]
+
+package metamodel {
+
+    class Object\nSpecId<<value>> {
+        +type
+    }
+
+    class Object\nSpecification<<desc>> {
+        +objectSpecId
+        ....
+        -fullyQualifiedClassName
+    }
+
+    class Object\nMember<<desc>> {
+
+    }
+
+    class Object\nAction<<desc>> {
+
+    }
+
+    class Object\nAssociation<<desc>> {
+
+    }
+
+    class OneToOne\nAssociation<<desc>> {
+
+    }
+
+    class OneToMany\nAssociation<<desc>> {
+
+    }
+
+    interface FacetHolder<<desc>> {
+    }
+
+    class Object\nActionParameter<<desc>> {
+    }
+
+    class OneToOne\nActionParameter<<desc>> {
+    }
+
+    interface Facet<<desc>> {
+    }
+
+    class OneToMany\nActionParameter<<desc>> {
+    }
+}
+
+package runtime {
+    class Object\nAdapter<<ppt>> {
+        +getSpecification()
+    }
+    class Oid<<value>> {
+
+    }
+}
+
+
+
+Object\nSpecification -up-> Object\nSpecId
+Object\nSpecification -down-> "*" Object\nMember
+Object\nMember ^-down- Object\nAssociation
+Object\nMember ^-down- Object\nAction
+Object\nAssociation ^-down- OneToOne\nAssociation
+Object\nAssociation ^-down- OneToMany\nAssociation
+Object\nActionParameter ^-down- OneToOne\nActionParameter
+Object\nActionParameter ^-down- OneToMany\nActionParameter
+Object\nAction -left-> "*" Object\nActionParameter
+
+FacetHolder ^-.left- Object\nSpecification
+FacetHolder ^-.down- Object\nMember
+FacetHolder ^-.down- Object\nActionParameter
+FacetHolder -right-> "*" Facet
+
+
+Object\nAdapter  -up-> Oid
+
+Oid -right-> Object\nSpecId
+
+----
+
+where in the `metamodel` package:
+
+`ObjectSpecification`:: is equivalent to `java.lang.Class`
+`ObjectSpecId`:: is a value object equivalent to the 
`@DomainObject#logicalTypeName` or `@DomainService#logicalTypeName` attribute
+`OneToOneAssociation`:: represents a scalar property
+`OneToManyAssociation`:: represents a collection
+`ObjectAction`:: represents an action (with multiple parameters, either scalar 
or list)
+
+and in the `runtime` package:
+
+`Oid`:: is equivalent to the applib `Bookmark`
++
+and appears in URLs in the Wicket and Restful Objects viewers
+
+`ObjectAdapter`:: is equivalent to `java.lang.Object`
diff --git 
a/core/metamodel/src/main/adoc/modules/metamodel/pages/class-diagram.adoc 
b/core/metamodel/src/main/adoc/modules/metamodel/pages/class-diagram.adoc
index ecf7d55628..66c67cf53e 100644
--- a/core/metamodel/src/main/adoc/modules/metamodel/pages/class-diagram.adoc
+++ b/core/metamodel/src/main/adoc/modules/metamodel/pages/class-diagram.adoc
@@ -1,10 +1,8 @@
-[#class-diagram]
 = Class Diagram
 
 :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 diagram below shows a simplified version of Apache Isis' internal 
metamodel.
 
 
diff --git a/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc 
b/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc
new file mode 100644
index 0000000000..141fcd58c0
--- /dev/null
+++ b/core/metamodel/src/main/adoc/modules/metamodel/pages/events.adoc
@@ -0,0 +1,197 @@
+= Events
+
+: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 framework emits events when it interacts with domain objects; the domain 
application can listen to these events and use them to influence the 
interaction (including veto'ing it).
+
+These events fall into three broad categories: UI hints, domain and 
persistence lifecycles.
+
+
+== UI Events
+
+As specified using 
xref:refguide:applib:index/annotation/DomainObjectLayout.adoc[@DomainObjectLayout#xxxUiEvent()].
+
+.UI Events
+[plantuml,file="eventbus_ui.png"]
+----
+@startuml
+
+skinparam nodesep 20
+
+(Event\nBus) as EB
+(Spring) as SPRING
+SPRING .l.> EB : provides/\nmanages
+(Event\nListener) as EL
+EL --> EB : listens to \n (is subscribed to)
+
+(UI\nEvent) as UIE
+UIE -r-> EB : is \n published \n to
+
+(Title\nUIEvent) as TUIE
+TUIE -u-> UIE : is a
+(Icon\nUIEvent) as IUIE
+IUIE -u-> UIE : is a
+
+(CssClass\nUIEvent) as CCUIE
+CCUIE -u-> UIE : is a
+(Layout\nUIEvent) as LUIE
+LUIE -u-> UIE : is a
+
+
+(Domain\nObject) as DO
+DO "when \n rendered, \n leads to \n emission \nof"-d-> UIE
+
+(Presentation) as PST
+DO -u-> PST : has
+EL -u-> PST : can modify
+note right of EL
+When DomainObject implements
+respective supporting methods itself (
+* title(),
+* iconName(),
+* cssClass(),
+* layout()),
+modification is not possible.
+end note
+
+@enduml
+----
+
+//DE -d-> MB : can be \n declared \n for
+//
+//EL -u-> MB : can modify/check: \nvisibility (hide), \nusability (disable), 
\nvalidity (validate)
+//
+//DO ->"title \n icon \n cssClass \n layout" PST
+//(UI\nEvent) as UIE
+//EL --> PST : modify
+//UIE --> EL : receive
+
+
+== Domain Events
+
+As specified using 
xref:refguide:applib:index/annotation/Action.adoc[@Action#domainEvent()], 
xref:refguide:applib:index/annotation/Property.adoc[@Property#domainEvent()] 
and 
xref:refguide:applib:index/annotation/Collection.adoc[@Collection#domainEvent()]:
+
+.Domain Events
+[plantuml,file="eventbus_domain.png"]
+----
+@startuml
+
+skinparam nodesep 20
+
+together {
+    (Domain\nService) as DS
+    (Domain\nObject) as DO
+    (<i>Domain\n<i>Event) as DE
+}
+(<i>Member</i>) as MB
+together {
+    (Property) as P
+    (Action) as A
+    (Collection) as C
+}
+P -u-> MB : is a
+A -u-> MB : is a
+C -u-> MB : is a
+
+DO -d-> MB : has
+DS -d--> A : has
+
+DE -d-> MB : can be \n declared \n for
+
+(Execution) as EX
+P "edit \n is an"-->  EX
+A "invocation \n is an"--> EX
+
+(Event\nBus) as EB
+(Spring) as SPRING
+SPRING .l.> EB : provides/\nmanages
+EX -> EB : is published as: \n * before event (phase: EXECUTING)\n * after 
event (phase: EXECUTED)
+
+(Event\nListener) as EL
+EL --> EB : listens \n on
+EL -u-> MB : can check/modify: \nvisibility (hide), \nusability (disable), 
\nvalidity (validate)
+
+note right of DE
+Phases are:
+* HIDING
+* DISABLING
+* VALIDATING
+* EXECUTING
+* EXECUTED
+The framework automatically sends out
+events with the phases in the order listed.
+end note
+
+note right of MB
+<i>DomainEvent</i> is declared as an
+annotation type element in a member annotation, e.g.
+<b>@Action(
+        <b>domainEvent=<i>Custom</i>ActionDomainEvent.class).
+end note
+
+note right of EL
+EventListeners can be declared on
+any public Spring bean method, e.g.
+<b>@EventListener(
+       <b><i>Custom</i>ActionDomainEvent.class).
+Via <i>DomainEvent</i>.getEventPhase(),
+further filtering can be applied.
+end note
+@enduml
+----
+
+== Persistence Events
+
+As specified using 
xref:refguide:applib:index/annotation/DomainObject.adoc[@DomainObject#xxxLifecycleEvent()]:
+
+.Persistence Events
+[plantuml,file="eventbus_persistence.png"]
+----
+@startuml
+
+(Event\nBus) as EB
+(Spring) as SPRING
+SPRING .l.> EB : provides/\nmanages
+(Event\nListener) as EL
+EL --> EB : listens
+
+(<i>Object</i>\nLifecyleEvent) as LCE
+LCE -> EB : published to
+(Created\nEvent) as C
+C -u-> LCE : is a
+(Loaded\nEvent) as L
+L -u-> LCE : is a
+
+(Persisting\nEvent) as PNG
+PNG -u-> LCE : is a
+(Persisted\nEvent) as PED
+PED -u-> LCE : is a
+
+(Updating\nEvent) as UNG
+UNG -u-> LCE : is a
+(Updated\nEvent) as UED
+UED -u-> LCE : is a
+
+(Removing\nEvent) as RNG
+RNG -u-> LCE : is a
+
+(Factory\nService) as FS
+FS -u-> C :emits
+(Repository\nService) as RS
+RS -u-> L :emits
+RS -u-> PNG :emits
+RS -u-> PED :emits
+RS -u-> UNG :emits
+RS -u-> UED :emits
+RS -u-> RNG :emits
+
+note top of RNG
+JDO/Datanucleus
+does not support
+something like a
+"Removed Event".
+Hence not implemented.
+end note
+
+@enduml
+----
diff --git 
a/core/metamodel/src/main/adoc/modules/metamodel/partials/module-nav.adoc 
b/core/metamodel/src/main/adoc/modules/metamodel/partials/module-nav.adoc
index 7dd2416567..c34b9343ba 100644
--- a/core/metamodel/src/main/adoc/modules/metamodel/partials/module-nav.adoc
+++ b/core/metamodel/src/main/adoc/modules/metamodel/partials/module-nav.adoc
@@ -1,3 +1,4 @@
 
 * xref:core:metamodel:about.adoc[MetaModel]
-** xref:core:metamodel:class-diagram.adoc[Class Diagram]
+** xref:core:metamodel:class-diagram.adoc[]
+** xref:core:metamodel:events.adoc[]
diff --git a/core/runtime/src/main/adoc/modules/runtime/pages/about.adoc 
b/core/runtime/src/main/adoc/modules/runtime/pages/about.adoc
index cd1987ad09..5d35c7fc40 100644
--- a/core/runtime/src/main/adoc/modules/runtime/pages/about.adoc
+++ b/core/runtime/src/main/adoc/modules/runtime/pages/about.adoc
@@ -2,4 +2,7 @@
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or ag [...]
 
-WARNING: TODO
+
+This is a very small module providing a set of classes to handle the runtime 
context.
+
+It also has classes that trigger events for when the metamodel is fully built 
(after bootstrapping), and to emit events for transaction boundaries.
diff --git 
a/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc 
b/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc
index 262b3aceb5..cc06376049 100644
--- 
a/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc
+++ 
b/core/runtimeservices/src/main/adoc/modules/runtimeservices/pages/about.adoc
@@ -2,4 +2,11 @@
 
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with this work 
for additional information regarding copyright ownership. The ASF licenses this 
file to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance with the License. You may obtain a copy of 
the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by 
applicable law or ag [...]
 
-WARNING: TODO
+this module provides an extensive set of domain services.
+
+Many of the services defined (as interfaces) in the applib are actually 
implemented in this module (the rest are defined in 
xref:core:metamodel:about.adoc[]).
+
+
+Although it's a simplification, you can think of the 
xref:core:metamodel:about.adoc[] module as handling domain types (cf 
`java.lang.Class`), while the xref:core:runtime:about.adoc[], 
xref:core:runtimeservices:about.adoc[] and xref:transaction:about.adoc[] 
modules handle domain object instances (cf `java.lang.Object`).
+
+That said, Spring Boot is responsible for instantiating domain service 
instances, while the persistence mechanisms (xref:pjpa:ROOT:about.adoc[JPA] and 
xref:pjdo:ROOT:about.adoc[JDO]) -- which are not part of the `core` modules -- 
handle the lifecycle of entity instances.
diff --git 
a/core/transaction/src/main/adoc/modules/transaction/pages/about.adoc 
b/core/transaction/src/main/adoc/modules/transaction/pages/about.adoc
index c30fbd93ce..7ac3d9a3ef 100644
--- a/core/transaction/src/main/adoc/modules/transaction/pages/about.adoc
+++ b/core/transaction/src/main/adoc/modules/transaction/pages/about.adoc
@@ -2,4 +2,4 @@
 
 :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 [...]
 
-WARNING: TODO
+This is a small module prociding a set of classes primarily concerned with for 
tracking changes to entities during transactions.
diff --git a/core/webapp/src/main/adoc/modules/webapp/pages/about.adoc 
b/core/webapp/src/main/adoc/modules/webapp/pages/about.adoc
index 275366a3c2..db5b483b57 100644
--- a/core/webapp/src/main/adoc/modules/webapp/pages/about.adoc
+++ b/core/webapp/src/main/adoc/modules/webapp/pages/about.adoc
@@ -1,5 +1,7 @@
-= Runtime Web
+= Webapp
 
 :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 [...]
 
-WARNING: TODO
+This module provides classes used to bootstrap the app itself.
+
+Through the xref:webmodules.adoc[WebModule] interface, it also provides a hook 
for other components to contribute their own filters and servlets into the web 
request pipeline.
diff --git a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc 
b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
index b8d161418a..68a5e47317 100644
--- a/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
+++ b/core/webapp/src/main/adoc/modules/webapp/pages/webmodules.adoc
@@ -1,5 +1,5 @@
 [#webmodule-interface]
-= ``WebModule`` interface
+= `WebModule` 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 [...]
 
diff --git a/incubator/adoc/modules/ROOT/pages/about.adoc 
b/incubator/adoc/modules/ROOT/pages/about.adoc
index b2b545b670..7ee16d67fa 100644
--- a/incubator/adoc/modules/ROOT/pages/about.adoc
+++ b/incubator/adoc/modules/ROOT/pages/about.adoc
@@ -1,4 +1,4 @@
-= Incubator Catalog
+= Incubator
 
 :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 [...]
 :page-partial:
diff --git a/regressiontests/adoc/antora.yml b/regressiontests/adoc/antora.yml
index 1a59920126..ad7fd33bfb 100644
--- a/regressiontests/adoc/antora.yml
+++ b/regressiontests/adoc/antora.yml
@@ -15,5 +15,5 @@
 #  specific language governing permissions and limitations
 #  under the License.
 
-name: core
+name: regressiontests
 version: latest
diff --git a/regressiontests/adoc/modules/regressiontests/nav.adoc 
b/regressiontests/adoc/modules/ROOT/nav.adoc
similarity index 100%
rename from regressiontests/adoc/modules/regressiontests/nav.adoc
rename to regressiontests/adoc/modules/ROOT/nav.adoc
diff --git a/regressiontests/adoc/modules/regressiontests/pages/about.adoc 
b/regressiontests/adoc/modules/ROOT/pages/about.adoc
similarity index 100%
rename from regressiontests/adoc/modules/regressiontests/pages/about.adoc
rename to regressiontests/adoc/modules/ROOT/pages/about.adoc
diff --git a/regressiontests/adoc/modules/ROOT/partials/module-nav.adoc 
b/regressiontests/adoc/modules/ROOT/partials/module-nav.adoc
new file mode 100644
index 0000000000..33091056b2
--- /dev/null
+++ b/regressiontests/adoc/modules/ROOT/partials/module-nav.adoc
@@ -0,0 +1,4 @@
+
+* xref:regressiontests:ROOT:about.adoc[Regression Tests]
+
+
diff --git 
a/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc 
b/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc
deleted file mode 100644
index 2d1ef6f190..0000000000
--- a/regressiontests/adoc/modules/regressiontests/partials/module-nav.adoc
+++ /dev/null
@@ -1,4 +0,0 @@
-
-* xref:regressiontests:about.adoc[Regression Tests]
-
-
diff --git a/starters/adoc/modules/parent-pom/images/parent-pom.drawio.svg 
b/starters/adoc/modules/parent-pom/images/parent-pom.drawio.svg
index b4ff6b46c3..b6780d8d52 100644
--- a/starters/adoc/modules/parent-pom/images/parent-pom.drawio.svg
+++ b/starters/adoc/modules/parent-pom/images/parent-pom.drawio.svg
@@ -1 +1,4 @@
-<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; version="1.1" width="969px" 
height="587px" viewBox="-0.5 -0.5 969 587" content="&lt;mxfile 
host=&quot;drawio-plugin&quot; modified=&quot;2021-03-20T18:50:08.414Z&quot; 
agent=&quot;5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/84.0.4147.105 Safari/537.36&quot; 
etag=&quot;UsPSK2NaPMQWWJsnPGkd&quot; version=&quot;13.7.9&quot; 
type=&quot;embed&quot;&gt;&lt;diagram id=&quot;zLki [...]
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than diagrams.net -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; version="1.1" width="948px" 
height="537px" viewBox="-0.5 -0.5 948 537" content="&lt;mxfile 
host=&quot;drawio-plugin&quot; modified=&quot;2022-08-20T17:31:33.191Z&quot; 
agent=&quot;5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/98.0.4758.102 Safari/537.36&quot; 
etag=&quot;yrIjiW0jVsrb64JQAW_C&quot; version=&quot;15.5.4&quot; 
type=&quot;embed&quot;&gt;&lt;diagram id=&quot;zLki [...]
\ No newline at end of file
diff --git a/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc 
b/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc
index 773df960fd..7c1f3b5a06 100644
--- a/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc
+++ b/valuetypes/adoc/modules/ROOT/partials/component-nav.adoc
@@ -6,4 +6,4 @@ include::valuetypes:ROOT:partial$module-nav.adoc[]
 
 include::valuetypes:asciidoc:partial$module-nav.adoc[]
 include::valuetypes:markdown:partial$module-nav.adoc[]
-include::valuetypes:sse:partial$module-nav.adoc[]
+

Reply via email to