You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2022/08/20 15:42:24 UTC

[isis] 06/06: ISIS-2965: doc updates

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 5b6f525cc03176573c3699ea677e11debf337841
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Aug 20 16:42:06 2022 +0100

    ISIS-2965: doc updates
---
 .../modules/ROOT/pages/cutting-a-release.adoc      |  35 ++-
 .../components/docs/modules/ROOT/pages/about.adoc  |  35 +--
 .../landing-page/{libraries.adoc => catalogs.adoc} |  14 +-
 .../docs/modules/ROOT/partials/component-nav.adoc  |   2 +-
 .../module-nav/{libraries.adoc => catalogs.adoc}   |   2 -
 .../ROOT/partials/module-nav/components.adoc       |   4 -
 .../ROOT/partials/module-nav/framework.adoc        |  20 +-
 .../modules/ROOT/partials/module-nav/guides.adoc   |   4 +
 .../docs/modules/support/partials/module-nav.adoc  |  11 +-
 .../index/services/bookmark/IdStringifier.adoc     |  11 +-
 .../index/services/metamodel/DomainModel.adoc      |   1 +
 .../placeholder/PlaceholderRenderService.adoc      |  39 +++
 .../restfulobjects/applib/JsonRepresentation.adoc  |  49 ++--
 .../valuerender/JsonValueEncoderService.adoc       |  51 ++++
 .../modules/ROOT/partials/extensions.adoc          |   5 +-
 antora/supplemental-ui/index.html                  |   2 +-
 core/adoc/modules/_overview/pages/about.adoc       | 319 +++------------------
 extensions/adoc/modules/ROOT/pages/about.adoc      |   3 +-
 .../executionoutbox/partials/module-nav.adoc       |   2 +-
 .../adoc/modules/ROOT/partials/extensions.adoc     |   1 +
 .../adoc/modules/keycloak/partials/module-nav.adoc |   2 +-
 21 files changed, 245 insertions(+), 367 deletions(-)

diff --git a/antora/components/comguide/modules/ROOT/pages/cutting-a-release.adoc b/antora/components/comguide/modules/ROOT/pages/cutting-a-release.adoc
index 368123cdf4..2265bb3ace 100644
--- a/antora/components/comguide/modules/ROOT/pages/cutting-a-release.adoc
+++ b/antora/components/comguide/modules/ROOT/pages/cutting-a-release.adoc
@@ -70,10 +70,9 @@ To run the RAT tool, use:
 [source,bash,subs="attributes+"]
 .find unapproved/missing licenses
 ----
-mvn clean
-
 pushd bom
-mvn org.apache.rat:apache-rat-plugin:check -D rat.numUnapprovedLicenses=1000 -Dreleased
+mvn -Dapache-release clean
+mvn -Dapache-release org.apache.rat:apache-rat-plugin:check -D rat.numUnapprovedLicenses=1000
 popd
 
 for a in `/bin/find . -name rat.txt -print`; do grep '!???' $a; done > /tmp/rat-qn.txt
@@ -105,18 +104,40 @@ This is stored in the `src/main/appended-resources/supplemental-models.xml` file
 
 It's first necessary to have built the framework locally at least once.
 
-In the root directory:
+* switch to the `bom` directory:
++
+[source,bash,subs="attributes+"]
+----
+pushd bom
+----
 
+* build the framework (ok to skip tests):
++
 [source,bash,subs="attributes+"]
 ----
-mvn clean install -o -DskipTests
+mvn -Dgithub clean install -DskipTests
 ----
++
+NB: the `-Dgithub` activates the "github" profile which references the exact same ``<module>``s as the official "apache-release" profile.
 
-Once this is done, capture the missing license information using:
+* Capture the missing license information using:
++
+[source,bash,subs="attributes+"]
+----
+mvn -Dgithub license:download-licenses
+----
 
+* Switch back to the root directory:
++
+[source,bash,subs="attributes+"]
+----
+popd
+----
+
+* Report on the missing license information using:
++
 [source,bash,subs="attributes+"]
 ----
-mvn license:download-licenses
 groovy scripts/checkmissinglicenses.groovy
 ----
 
diff --git a/antora/components/docs/modules/ROOT/pages/about.adoc b/antora/components/docs/modules/ROOT/pages/about.adoc
index 0504cef1d0..58726904dc 100644
--- a/antora/components/docs/modules/ROOT/pages/about.adoc
+++ b/antora/components/docs/modules/ROOT/pages/about.adoc
@@ -66,8 +66,6 @@ _Core_
 _Process_
 
 * xref:conguide:ROOT:about.adoc[Contributors' Guide]
-* *xref:comguide:ROOT:about.adoc[Committers' Guide]*
-** xref:tooling:ROOT:about.adoc[Tooling]
 
 |
 [discrete]
@@ -90,9 +88,9 @@ _Security_
 
 |
 [discrete]
-== Libraries
+== Catalogs
 
-_For Use in Apps_
+_For Use in Domain Apps_
 
 *  xref:valuetypes:ROOT:about.adoc[Value Type Catalog]
 
@@ -117,31 +115,36 @@ _Releases_
 * xref:docs:ROOT:downloads/how-to.adoc[Downloads]
 * xref:relnotes:ROOT:about.adoc[Release Notes]
 
-_Nightly Builds (not ASF)_
+_Nightly Builds_
 
-* link:https://github.com/apache-isis-committers/isis-nightly[CI]
-* link:https://nexus.incode.work/[Maven Repo] (current)
-* link:https://repo.incode.cloud/[Maven Repo] (v1 only)
-* link:https://apache-isis-committers.github.io/isis-nightly[Website preview]
+* link:https://github.com/apache/isis[Packages] (ASF hosted)
+* link:https://github.com/apache-isis-committers/isis-nightly[Packages] (not ASF hosted)
+* link:https://apache-isis-committers.github.io/isis-nightly[Website preview] (not ASF hosted)
 
 
 |
 [discrete]
 == Framework
 
-_Design_
+_Process_
+
+* *xref:comguide:ROOT:about.adoc[Committers' Guide]*
+* xref:tooling:ROOT:about.adoc[Tooling]
+
+_Automated Analysis_
 
-* xref:core:ROOT:about.adoc[Core Framework]
-** xref:core:_overview:about.adoc[System Overview]
+* 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]
+* xref:incubator:ROOT:about.adoc[Incubator]
 
-_Analysis_
 
-* link:https://sonarcloud.io/dashboard?id=apache_isis[SonarCloud.io]
-* link:https://fisheye.apache.org/browse/~br=master/isis-git/[ASF Fisheye]
+_Other_
+
+* 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/libraries.adoc b/antora/components/docs/modules/ROOT/pages/landing-page/catalogs.adoc
similarity index 67%
rename from antora/components/docs/modules/ROOT/pages/landing-page/libraries.adoc
rename to antora/components/docs/modules/ROOT/pages/landing-page/catalogs.adoc
index f66c0b3950..eeccc901e7 100644
--- a/antora/components/docs/modules/ROOT/pages/landing-page/libraries.adoc
+++ b/antora/components/docs/modules/ROOT/pages/landing-page/catalogs.adoc
@@ -1,18 +1,22 @@
-= Libraries
+= Catalogs
 
 :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 [...]
 
-Included with the framework are two catalogues of libraries:
+The framework includes two catalogs:
 
 * xref:valuetypes:ROOT:about.adoc[Value Type Catalog]
 +
-Implementations of various value types, eg Markdown.
+The modules in this catalog provide implementations of various value types, for example Markdown.
+They are intended to be consumed by your application.
 +
 Each will have an applib submodule (for use within the domain logic) as well as various extension modules to be made available to the framework itself (to teach it how to persist or render the value type).
 
 * xref:extensions:ROOT:about.adoc[Extensions Catalog]
 +
-Describes a number of extensions to the various components that make up the framework.
-+
+These modules in this catalog extend the capabilities of the framework itself.
+They are generally not consumed directly by your application.
 For example, the "Excel Download" extension allows collections to be downloaded as an Excel `.xlsx` spreadsheet in the Wicket viewer.
++
+That said, some extensions do also provide an applib.
+For example the gmap3 extension provides an applib so that domain objects can expose their location (typically a Java interface to be implemented); this allows the extension to plot them on a map.
 
diff --git a/antora/components/docs/modules/ROOT/partials/component-nav.adoc b/antora/components/docs/modules/ROOT/partials/component-nav.adoc
index 091b8b419d..315c87f16d 100644
--- a/antora/components/docs/modules/ROOT/partials/component-nav.adoc
+++ b/antora/components/docs/modules/ROOT/partials/component-nav.adoc
@@ -4,7 +4,7 @@ include::docs:ROOT:partial$module-nav/demos-and-tutorials.adoc[]
 include::docs:ROOT:partial$module-nav/resources.adoc[]
 include::docs:ROOT:partial$module-nav/guides.adoc[]
 include::docs:ROOT:partial$module-nav/components.adoc[]
-include::docs:ROOT:partial$module-nav/libraries.adoc[]
+include::docs:ROOT:partial$module-nav/catalogs.adoc[]
 include::docs:support:partial$module-nav.adoc[]
 include::docs:ROOT:partial$module-nav/framework.adoc[]
 include::docs:ROOT:partial$module-nav/further-resources.adoc[]
diff --git a/antora/components/docs/modules/ROOT/partials/module-nav/libraries.adoc b/antora/components/docs/modules/ROOT/partials/module-nav/catalogs.adoc
similarity index 94%
rename from antora/components/docs/modules/ROOT/partials/module-nav/libraries.adoc
rename to antora/components/docs/modules/ROOT/partials/module-nav/catalogs.adoc
index 9834294ec8..4fd3b612f8 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/libraries.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/catalogs.adoc
@@ -6,5 +6,3 @@
 
 **  xref:valuetypes:ROOT:about.adoc[Value Type Catalog]
 **  xref:extensions:ROOT:about.adoc[Extensions Catalog]
-** Other
-***  xref:incubator:ROOT:about.adoc[Incubator]
diff --git a/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc b/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
index b86aa7bc97..7801cfe299 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/components.adoc
@@ -3,10 +3,6 @@
 
 * Components
 
-** Overview
-
-*** xref:core:_overview:about.adoc[System Overview]
-
 ** Viewers
 
 *** xref:vw:ROOT:about.adoc[Web UI (Wicket)]
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 8cbcdccb29..c756fb5ea8 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/framework.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/framework.adoc
@@ -4,21 +4,21 @@
 
 * Framework
 
+
 ** Process
-*** xref:conguide:ROOT:about.adoc[Contributors' Guide]
 *** xref:comguide:ROOT:about.adoc[Committers' Guide]
-**** xref:tooling:ROOT:about.adoc[Tooling]
+*** xref:tooling:ROOT:about.adoc[Tooling]
 
-** Design
+** Automated Analysis
+*** link:https://sonarcloud.io/dashboard?id=apache_isis[SonarCloud.io]
+*** link:https://fisheye.apache.org/browse/~br=master/isis-git/[ASF Fisheye]
 
-*** xref:core:ROOT:about.adoc[Core Framework]
-**** xref:core:_overview:about.adoc[System Overview]
+**  xref:incubator:ROOT:about.adoc[Incubator]
 
+** Other
 
-** Analysis
-*** link:https://sonarcloud.io/dashboard?id=apache_isis[SonarCloud.io]
-*** link:https://fisheye.apache.org/browse/~br=master/isis-git/[ASF Fisheye]
+*** xref:core:_overview:about.adoc[System Overview] (generated)
+*** xref:core:ROOT:about.adoc[Design Docs] (out of date)
 
-** Thanks
-*** xref:more-thanks/more-thanks.adoc[Acknowledgements]
+** xref:more-thanks/more-thanks.adoc[Acknowledgements]
 
diff --git a/antora/components/docs/modules/ROOT/partials/module-nav/guides.adoc b/antora/components/docs/modules/ROOT/partials/module-nav/guides.adoc
index e3f7d2415a..2518eea6cd 100644
--- a/antora/components/docs/modules/ROOT/partials/module-nav/guides.adoc
+++ b/antora/components/docs/modules/ROOT/partials/module-nav/guides.adoc
@@ -12,3 +12,7 @@
 *** xref:userguide:ROOT:about.adoc[User Guide]
 *** xref:refguide:ROOT:about.adoc[Reference Guide]
 *** xref:testing:ROOT:about.adoc[Testing Guide]
+
+** Process
+*** xref:conguide:ROOT:about.adoc[Contributors' Guide]
+
diff --git a/antora/components/docs/modules/support/partials/module-nav.adoc b/antora/components/docs/modules/support/partials/module-nav.adoc
index 2b5f49301d..fba0b0137d 100644
--- a/antora/components/docs/modules/support/partials/module-nav.adoc
+++ b/antora/components/docs/modules/support/partials/module-nav.adoc
@@ -1,7 +1,5 @@
 
 
-
-
 * Support
 
 ** Contact
@@ -17,10 +15,9 @@
 *** xref:relnotes:ROOT:about.adoc[Release Notes]
 
 
-** Nightly Builds (not ASF)
+** Nightly Builds
 
-*** link:https://github.com/apache-isis-committers/isis-nightly[CI]
-*** link:https://nexus.incode.work/[Maven repo] (current)
-*** link:https://repo.incode.cloud/[Maven repo] (v1 only)
-*** link:https://apache-isis-committers.github.io/isis-nightly[Website preview]
+*** link:https://github.com/apache/isis[Packages] (ASF hosted)
+*** link:https://github.com/apache-isis-committers/isis-nightly[Packages] (not ASF hosted)
+*** link:https://apache-isis-committers.github.io/isis-nightly[Website preview] (not ASF hosted)
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/IdStringifier.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/IdStringifier.adoc
index d68261a7a1..c6a6e10934 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/IdStringifier.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/IdStringifier.adoc
@@ -5,7 +5,7 @@ SPI to convert the identifier (primary key) of an entity, of a given type (eg In
 
 This is ultimately used by xref:refguide:applib:index/services/bookmark/BookmarkService.adoc[BookmarkService] where we hold a persistent reference to an entity. The resultant string also appears in URLs of the Wicket viewer and Restful Objects viewers, and in mementos eg in _org.apache.isis.schema.cmd.v2.CommandDto_ and _org.apache.isis.schema.ixn.v2.InteractionDto_ .
 
-The framework provides default implementations of this SPI for JDO (data store and application identity) and for JPA. Because this is an SPI, other modules or application code can provide their own implementations. An example of such is the JPA implementation of the `commandlog` extension.
+The framework provides default implementations of this SPI for JDO (data store and application identity) and for JPA. Because this is a SPI, other modules or application code can provide their own implementations. An example of such is the JPA implementation of the `commandlog` extension.
 
 == API
 
@@ -13,9 +13,10 @@ The framework provides default implementations of this SPI for JDO (data store a
 .IdStringifier.java
 ----
 interface IdStringifier<T> {
+  public final static char SEPARATOR;
   Class<T> getCorrespondingClass()
   String enstring(T value)     // <.>
-  T destring(String stringified)     // <.>
+  T destring(Class<?> targetEntityClass, String stringified)     // <.>
 }
 ----
 
@@ -24,7 +25,7 @@ interface IdStringifier<T> {
 --
 Convert the value (which will be of the same type as returned by _#getCorrespondingClass()_ into a string representation.
 --
-<.> xref:#destring_String[destring(String)]
+<.> xref:#destring_Class_String[destring(Class, String)]
 +
 --
 Convert a string representation of the identifier (as returned by _#enstring(Object)_ ) into an object that can be used to retrieve.
@@ -37,7 +38,7 @@ Convert a string representation of the identifier (as returned by _#enstring(Obj
 
 Convert the value (which will be of the same type as returned by _#getCorrespondingClass()_ into a string representation.
 
-[#destring_String]
-=== destring(String)
+[#destring_Class_String]
+=== destring(Class, String)
 
 Convert a string representation of the identifier (as returned by _#enstring(Object)_ ) into an object that can be used to retrieve.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/DomainModel.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/DomainModel.adoc
index cd12a57cd9..22a6ad2a7e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/DomainModel.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/DomainModel.adoc
@@ -8,6 +8,7 @@
 ----
 interface DomainModel {
   List<DomainMember> getDomainMembers()
+  void forEachLogicalType(BiConsumer<? super String, ? super List<DomainMember>> consumer)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/placeholder/PlaceholderRenderService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/placeholder/PlaceholderRenderService.adoc
new file mode 100644
index 0000000000..6ff77e1938
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/placeholder/PlaceholderRenderService.adoc
@@ -0,0 +1,39 @@
+= PlaceholderRenderService
+: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 [...]
+
+Service that renders various _PlaceholderLiteral_ s, as presented with the UI.
+
+== API
+
+[source,java]
+.PlaceholderRenderService.java
+----
+interface PlaceholderRenderService {
+  String asText(PlaceholderLiteral placeholderLiteral)     // <.>
+  String asHtml(PlaceholderLiteral placeholderLiteral)     // <.>
+  PlaceholderRenderService fallback()
+}
+----
+
+<.> xref:#asText_PlaceholderLiteral[asText(PlaceholderLiteral)]
++
+--
+Textual representation of given _PlaceholderLiteral_ , as used for eg. titles and choice drop-downs.
+--
+<.> xref:#asHtml_PlaceholderLiteral[asHtml(PlaceholderLiteral)]
++
+--
+Html representation of given _PlaceholderLiteral_ , as used for rendering with the UI (when appropriate).
+--
+
+== Members
+
+[#asText_PlaceholderLiteral]
+=== asText(PlaceholderLiteral)
+
+Textual representation of given _PlaceholderLiteral_ , as used for eg. titles and choice drop-downs.
+
+[#asHtml_PlaceholderLiteral]
+=== asHtml(PlaceholderLiteral)
+
+Html representation of given _PlaceholderLiteral_ , as used for rendering with the UI (when appropriate).
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc
index 78ac08f9a8..52f1c61310 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc
@@ -13,6 +13,7 @@ class JsonRepresentation {
   public static final DateTimeFormatter yyyyMMddTHHmmssZ;
   public static final DateTimeFormatter _HHmmss;
   JsonRepresentation(JsonNode jsonNode)
+  JsonRepresentation jsonAsMap(String keyValuePairsAsJson)
   JsonRepresentation newMap(String... keyValuePairs)
   JsonRepresentation newArray()
   JsonRepresentation newArray(int initialSize)
@@ -110,29 +111,31 @@ class JsonRepresentation {
   boolean mapHas(String key)
   JsonRepresentation mapPut(String key, List<Object> value)
   JsonRepresentation mapPut(String key, Object value)
-  JsonRepresentation mapPut(String key, JsonRepresentation value)
-  JsonRepresentation mapPut(String key, String value)
-  JsonRepresentation mapPut(String key, JsonNode value)
-  JsonRepresentation mapPut(String key, byte value)
-  JsonRepresentation mapPut(String key, Byte value)
-  JsonRepresentation mapPut(String key, short value)
-  JsonRepresentation mapPut(String key, Short value)
-  JsonRepresentation mapPut(String key, int value)
-  JsonRepresentation mapPut(String key, Integer value)
-  JsonRepresentation mapPut(String key, long value)
-  JsonRepresentation mapPut(String key, Long value)
-  JsonRepresentation mapPut(String key, float value)
-  JsonRepresentation mapPut(String key, Float value)
-  JsonRepresentation mapPut(String key, double value)
-  JsonRepresentation mapPut(String key, Double value)
-  JsonRepresentation mapPut(String key, boolean value)
-  JsonRepresentation mapPut(String key, Boolean value)
-  JsonRepresentation mapPut(String key, char value)
-  JsonRepresentation mapPut(String key, Character value)
-  JsonRepresentation mapPut(String key, BigInteger value)
-  JsonRepresentation mapPut(Iterable<Entry<String, JsonRepresentation>> entries)
-  JsonRepresentation mapPut(Entry<String, JsonRepresentation> entry)
-  JsonRepresentation mapPut(String key, BigDecimal value)
+  JsonRepresentation mapPutJsonRepresentation(String key, JsonRepresentation value)
+  JsonRepresentation mapPutString(String key, String value)
+  JsonRepresentation mapPutJsonNode(String key, JsonNode value)
+  JsonRepresentation mapPutByte(String key, byte value)
+  JsonRepresentation mapPutByteNullable(String key, Byte value)
+  JsonRepresentation mapPutShort(String key, short value)
+  JsonRepresentation mapPutShortNullable(String key, Short value)
+  JsonRepresentation mapPutInt(String key, int value)
+  JsonRepresentation mapPutIntNullable(String key, Integer value)
+  JsonRepresentation mapPutLong(String key, long value)
+  JsonRepresentation mapPutLongNullable(String key, Long value)
+  JsonRepresentation mapPutFloat(String key, float value)
+  JsonRepresentation mapPutFloatNullable(String key, Float value)
+  JsonRepresentation mapPutDouble(String key, double value)
+  JsonRepresentation mapPutDoubleNullable(String key, Double value)
+  JsonRepresentation mapPutBoolean(String key, boolean value)
+  JsonRepresentation mapPutBooleanNullable(String key, Boolean value)
+  JsonRepresentation mapPutChar(String key, char value)
+  JsonRepresentation mapPutCharNullable(String key, Character value)
+  JsonRepresentation mapPutBigInteger(String key, BigInteger value)
+  JsonRepresentation mapPutEntries(Iterable<Entry<String, JsonRepresentation>> entries)
+  JsonRepresentation mapPutEntry(Entry<String, JsonRepresentation> entry)
+  JsonRepresentation mapPutBigDecimal(String key, BigDecimal value)
+  JsonRepresentation putFormat(String format)
+  JsonRepresentation putExtendedFormat(String format)
   Stream<Map.Entry<String, JsonRepresentation>> streamMapEntries()
   JsonRepresentation ensureArray()     // <.>
   int hashCode()
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.adoc
new file mode 100644
index 0000000000..65b40681fe
--- /dev/null
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.adoc
@@ -0,0 +1,51 @@
+= JsonValueEncoderService
+: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 [...]
+
+Converts value representing _ManagedObject_ s to their corresponding JSON representation and back.
+
+== API
+
+[source,java]
+.JsonValueEncoderService.java
+----
+interface JsonValueEncoderService {
+  ManagedObject asAdapter(ObjectSpecification valueSpec, JsonRepresentation valueRepr, JsonValueConverter.Context context)     // <.>
+  void appendValueAndFormat(ManagedObject valueAdapter, JsonRepresentation repr, JsonValueConverter.Context context)     // <.>
+  Object asObject(ManagedObject adapter, JsonValueConverter.Context context)     // <.>
+  NullNode appendNullAndFormat(JsonRepresentation repr, boolean suppressExtensions)
+  void appendFormats(JsonRepresentation repr, String format, String extendedFormat, boolean suppressExtensions)
+}
+----
+
+<.> xref:#asAdapter_ObjectSpecification_JsonRepresentation_JsonValueConverter_Context[asAdapter(ObjectSpecification, JsonRepresentation, JsonValueConverter_Context)]
++
+--
+The value recovered from xref:refguide:viewer:index/restfulobjects/applib/JsonRepresentation.adoc[JsonRepresentation] as _ManagedObject_ honoring _Context_ , otherwise `null` .
+--
+<.> xref:#appendValueAndFormat_ManagedObject_JsonRepresentation_JsonValueConverter_Context[appendValueAndFormat(ManagedObject, JsonRepresentation, JsonValueConverter_Context)]
++
+--
+Appends given value type representing _ManagedObject_ to given xref:refguide:viewer:index/restfulobjects/applib/JsonRepresentation.adoc[JsonRepresentation] honoring _Context_ .
+--
+<.> xref:#asObject_ManagedObject_JsonValueConverter_Context[asObject(ManagedObject, JsonValueConverter_Context)]
++
+--
+A _JsonNode_ or otherwise natively supported simple type from given _ManagedObject_ , honoring _Context_ .
+--
+
+== Members
+
+[#asAdapter_ObjectSpecification_JsonRepresentation_JsonValueConverter_Context]
+=== asAdapter(ObjectSpecification, JsonRepresentation, JsonValueConverter_Context)
+
+The value recovered from xref:refguide:viewer:index/restfulobjects/applib/JsonRepresentation.adoc[JsonRepresentation] as _ManagedObject_ honoring _Context_ , otherwise `null` .
+
+[#appendValueAndFormat_ManagedObject_JsonRepresentation_JsonValueConverter_Context]
+=== appendValueAndFormat(ManagedObject, JsonRepresentation, JsonValueConverter_Context)
+
+Appends given value type representing _ManagedObject_ to given xref:refguide:viewer:index/restfulobjects/applib/JsonRepresentation.adoc[JsonRepresentation] honoring _Context_ .
+
+[#asObject_ManagedObject_JsonValueConverter_Context]
+=== asObject(ManagedObject, JsonValueConverter_Context)
+
+A _JsonNode_ or otherwise natively supported simple type from given _ManagedObject_ , honoring _Context_ .
diff --git a/antora/components/userguide/modules/ROOT/partials/extensions.adoc b/antora/components/userguide/modules/ROOT/partials/extensions.adoc
index a76656279b..26a86515d6 100644
--- a/antora/components/userguide/modules/ROOT/partials/extensions.adoc
+++ b/antora/components/userguide/modules/ROOT/partials/extensions.adoc
@@ -1,7 +1,8 @@
 include::userguide:excel:partial$module-nav.adoc[]
 include::userguide:commandlog:partial$module-nav.adoc[]
-// commandreplay moved to incubator for the time being
-//include::userguide:commandreplay:partial$module-nav.adoc[]
+include::userguide:executionlog:partial$module-nav.adoc[]
+include::userguide:executionoutbox:partial$module-nav.adoc[]
+include::userguide:executionrepublisher:partial$module-nav.adoc[]
 include::userguide:flyway:partial$module-nav.adoc[]
 include::userguide:quartz:partial$module-nav.adoc[]
 
diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index 6956e3a9e9..8eb2ffcfd6 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -121,7 +121,7 @@
             <li><a href="docs/latest/starters/about.html">Starter Apps</a></li>
             <li><a href="docs/latest/landing-page/guides.html">Guides</a></li>
             <li><a href="docs/latest/landing-page/components.html">Components</a></li>
-            <li><a href="docs/latest/landing-page/libraries.html">Libraries</a></li>
+            <li><a href="docs/latest/landing-page/catalogs.html">Catalogs</a></li>
             <li><a href="docs/latest/landing-page/releases.html">Releases</a></li>
           </ul>
         </li>
diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc
index 2f7ef511b0..2a65ebb05d 100644
--- a/core/adoc/modules/_overview/pages/about.adoc
+++ b/core/adoc/modules/_overview/pages/about.adoc
@@ -728,244 +728,7 @@ Artifact: demo-domain
 Type: jar
 Directory: /examples/demo/domain
 ----
-|.Components
-****
-demoapp.dom.AppConfiguration +
-demoapp.dom._infra.DefaultTitleProvider +
-demoapp.dom._infra.LibraryPreloadingService +
-demoapp.dom._infra.resources.AsciiDocConverterService +
-demoapp.dom._infra.resources.AsciiDocReaderService +
-demoapp.dom._infra.resources.AsciiDocValueSemanticsWithPreprocessing +
-demoapp.dom._infra.resources.MarkdownReaderService +
-demoapp.dom._infra.resources.MarkupReaderService +
-demoapp.dom._infra.resources.MarkupVariableResolverService +
-demoapp.dom._infra.resources.ResourceReaderService +
-demoapp.dom._infra.samples.NameSamples +
-demoapp.dom._infra.urlencoding.UrlEncodingServiceNaiveInMemory +
-demoapp.dom.domain._changes.EntityChangesSubscriberToCaptureChangesInMemory +
-demoapp.dom.domain._commands.ExposePersistedCommands$TableColumnOrderDefault +
-demoapp.dom.domain._interactions.ExecutionListenerToCaptureInteractionsInMemory +
-demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishingSeeding +
-demoapp.dom.domain.actions.Action.commandPublishing.jdo.ActionCommandPublishingJdoEntities +
-demoapp.dom.domain.actions.Action.commandPublishing.jpa.ActionCommandPublishingJpaEntities +
-demoapp.dom.domain.actions.Action.domainEvent.subscribers.ActionDomainEventControlService +
-demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingSeeding +
-demoapp.dom.domain.actions.Action.executionPublishing.jdo.ActionExecutionPublishingJdoEntities +
-demoapp.dom.domain.actions.Action.executionPublishing.jpa.ActionExecutionPublishingJpaEntities +
-demoapp.dom.domain.collections.Collection.domainEvent.subscribers.CollectionDomainEventControlService +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledSeeding +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jdo.DomainObjectEntityChangePublishingDisabledJdoEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jpa.DomainObjectEntityChangePublishingDisabledJpaEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledSeeding +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jdo.DomainObjectEntityChangePublishingEnabledJdoEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jpa.DomainObjectEntityChangePublishingEnabledJpaEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jpa.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJpaEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities +
-demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jpa.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJpaEntities +
-demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.JaxbRefSeeding +
-demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jdo.JaxbRefJdoEntities +
-demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jpa.JaxbRefJpaEntities +
-demoapp.dom.domain.objects.other.embedded.jdo.ComplexNumberJdoValueSemantics +
-demoapp.dom.domain.objects.other.embedded.jdo.NumberConstantJdoRepository +
-demoapp.dom.domain.objects.other.embedded.jpa.ComplexNumberJpaValueSemantics +
-demoapp.dom.domain.objects.other.embedded.jpa.NumberConstantJpaRepository +
-demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantSeeding +
-demoapp.dom.domain.objects.other.embedded.samples.ComplexNumberSamples +
-demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandPublishingSeeding +
-demoapp.dom.domain.properties.Property.commandPublishing.jdo.PropertyCommandPublishingJdoEntities +
-demoapp.dom.domain.properties.Property.commandPublishing.jpa.PropertyCommandPublishingJpaEntities +
-demoapp.dom.domain.properties.Property.domainEvent.subscribers.PropertyDomainEventControlService +
-demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecutionPublishingSeeding +
-demoapp.dom.domain.properties.Property.executionPublishing.jdo.PropertyExecutionPublishingJdoEntities +
-demoapp.dom.domain.properties.Property.executionPublishing.jpa.PropertyExecutionPublishingJpaEntities +
-demoapp.dom.domain.properties.Property.projecting.jdo.PropertyProjectingChildJdoEntities +
-demoapp.dom.domain.properties.Property.projecting.jpa.PropertyProjectingChildJpaEntities +
-demoapp.dom.domain.properties.Property.projecting.persistence.PropertyProjectingChildSeeding +
-demoapp.dom.domain.properties.PropertyLayout.navigable.FileTreeNodeService +
-demoapp.dom.domain.properties.PropertyLayout.repainting.PdfJsViewerAdvisorFallback +
-demoapp.dom.featured.customui.geocoding.GeoapifyClient +
-demoapp.dom.services.core.errorreportingservice.ErrorReportingServiceDemoImplementation +
-demoapp.dom.services.core.eventbusservice.EventLogEntryJdoRepository +
-demoapp.dom.services.core.eventbusservice.EventLogEntryJpaRepository +
-demoapp.dom.services.core.eventbusservice.EventSubscriberDemoImplementation +
-demoapp.dom.services.core.wrapperFactory.WrapperFactorySeeding +
-demoapp.dom.services.core.wrapperFactory.jdo.WrapperFactoryJdoEntities +
-demoapp.dom.services.core.wrapperFactory.jpa.WrapperFactoryJpaEntities +
-demoapp.dom.services.extensions.secman.apptenancy.ApplicationTenancyEvaluatorForDemo +
-demoapp.dom.services.extensions.secman.apptenancy.jdo.TenantedJdoEntities +
-demoapp.dom.services.extensions.secman.apptenancy.jpa.TenantedJpaEntities +
-demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedSeeding +
-demoapp.dom.services.extensions.secman.appuser.seed.AppUserSeeding +
-demoapp.dom.types.isis.blobs.jdo.IsisBlobJdoEntities +
-demoapp.dom.types.isis.blobs.jpa.IsisBlobJpaEntities +
-demoapp.dom.types.isis.blobs.persistence.IsisBlobSeeding +
-demoapp.dom.types.isis.blobs.samples.IsisBlobsSamples +
-demoapp.dom.types.isis.clobs.jdo.IsisClobJdoEntities +
-demoapp.dom.types.isis.clobs.jpa.IsisClobJpaEntities +
-demoapp.dom.types.isis.clobs.persistence.IsisClobSeeding +
-demoapp.dom.types.isis.clobs.samples.IsisClobsSamples +
-demoapp.dom.types.isis.localresourcepaths.jdo.IsisLocalResourcePathJdoEntities +
-demoapp.dom.types.isis.localresourcepaths.jpa.IsisLocalResourcePathJpaEntities +
-demoapp.dom.types.isis.localresourcepaths.persistence.IsisLocalResourcePathSeeding +
-demoapp.dom.types.isis.localresourcepaths.samples.IsisLocalResourcePathsSamples +
-demoapp.dom.types.isis.markups.jdo.IsisMarkupJdoEntities +
-demoapp.dom.types.isis.markups.jpa.IsisMarkupJpaEntities +
-demoapp.dom.types.isis.markups.persistence.IsisMarkupSeeding +
-demoapp.dom.types.isis.markups.samples.IsisMarkupSamples +
-demoapp.dom.types.isis.passwords.jdo.IsisPasswordJdoEntities +
-demoapp.dom.types.isis.passwords.jpa.IsisPasswordJpaEntities +
-demoapp.dom.types.isis.passwords.persistence.IsisPasswordSeeding +
-demoapp.dom.types.isis.passwords.samples.IsisPasswordsSamples +
-demoapp.dom.types.isisext.asciidocs.jdo.IsisAsciiDocJdoEntities +
-demoapp.dom.types.isisext.asciidocs.jpa.IsisAsciiDocJpaEntities +
-demoapp.dom.types.isisext.asciidocs.persistence.IsisAsciiDocSeeding +
-demoapp.dom.types.isisext.asciidocs.samples.IsisAsciiDocSamples +
-demoapp.dom.types.isisext.cal.jdo.IsisCalendarEventEntities +
-demoapp.dom.types.isisext.cal.jpa.IsisCalendarEventEntities +
-demoapp.dom.types.isisext.cal.persistence.IsisCalendarEventSeeding +
-demoapp.dom.types.isisext.cal.samples.IsisCalendarEventSamples +
-demoapp.dom.types.isisext.markdowns.jdo.IsisMarkdownJdoEntities +
-demoapp.dom.types.isisext.markdowns.jpa.IsisMarkdownJpaEntities +
-demoapp.dom.types.isisext.markdowns.persistence.IsisMarkdownSeeding +
-demoapp.dom.types.isisext.markdowns.samples.IsisMarkdownSamples +
-demoapp.dom.types.javaawt.images.jdo.JavaAwtBufferedImageJdoEntities +
-demoapp.dom.types.javaawt.images.jpa.JavaAwtBufferedImageJpaEntities +
-demoapp.dom.types.javaawt.images.persistence.JavaAwtBufferedImageSeeding +
-demoapp.dom.types.javaawt.images.samples.JavaAwtBufferedImageService +
-demoapp.dom.types.javaawt.images.samples.JavaAwtBufferedImagesSamples +
-demoapp.dom.types.javalang.booleans.jdo.WrapperBooleanJdoEntities +
-demoapp.dom.types.javalang.booleans.jpa.WrapperBooleanJpaEntities +
-demoapp.dom.types.javalang.booleans.persistence.WrapperBooleanSeeding +
-demoapp.dom.types.javalang.booleans.samples.WrapperBooleanSamples +
-demoapp.dom.types.javalang.bytes.jdo.WrapperByteJdoEntities +
-demoapp.dom.types.javalang.bytes.jpa.WrapperByteJpaEntities +
-demoapp.dom.types.javalang.bytes.persistence.WrapperByteSeeding +
-demoapp.dom.types.javalang.bytes.samples.WrapperByteSamples +
-demoapp.dom.types.javalang.characters.jdo.WrapperCharacterJdoEntities +
-demoapp.dom.types.javalang.characters.jpa.WrapperCharacterJpaEntities +
-demoapp.dom.types.javalang.characters.persistence.WrapperCharacterSeeding +
-demoapp.dom.types.javalang.characters.samples.WrapperCharacterSamples +
-demoapp.dom.types.javalang.doubles.jdo.WrapperDoubleJdoEntities +
-demoapp.dom.types.javalang.doubles.jpa.WrapperDoubleJpaEntities +
-demoapp.dom.types.javalang.doubles.persistence.WrapperDoubleSeeding +
-demoapp.dom.types.javalang.doubles.samples.WrapperDoubleSamples +
-demoapp.dom.types.javalang.enums.jdo.JavaLangEnumJdoEntities +
-demoapp.dom.types.javalang.enums.jpa.JavaLangEnumJpaEntities +
-demoapp.dom.types.javalang.enums.persistence.JavaLangEnumSeeding +
-demoapp.dom.types.javalang.enums.samples.JavaLangEnumSamples +
-demoapp.dom.types.javalang.floats.jdo.WrapperFloatJdoEntities +
-demoapp.dom.types.javalang.floats.jpa.WrapperFloatJpaEntities +
-demoapp.dom.types.javalang.floats.persistence.WrapperFloatSeeding +
-demoapp.dom.types.javalang.floats.samples.WrapperFloatSamples +
-demoapp.dom.types.javalang.integers.jdo.WrapperIntegerJdoEntities +
-demoapp.dom.types.javalang.integers.jpa.WrapperIntegerJpaEntities +
-demoapp.dom.types.javalang.integers.persistence.WrapperIntegerSeeding +
-demoapp.dom.types.javalang.integers.samples.WrapperIntegerSamples +
-demoapp.dom.types.javalang.longs.jdo.WrapperLongJdoEntities +
-demoapp.dom.types.javalang.longs.jpa.WrapperLongJpaEntities +
-demoapp.dom.types.javalang.longs.persistence.WrapperLongSeeding +
-demoapp.dom.types.javalang.longs.samples.WrapperLongSamples +
-demoapp.dom.types.javalang.shorts.jdo.WrapperShortJdoEntities +
-demoapp.dom.types.javalang.shorts.jpa.WrapperShortJpaEntities +
-demoapp.dom.types.javalang.shorts.persistence.WrapperShortSeeding +
-demoapp.dom.types.javalang.shorts.samples.WrapperShortSamples +
-demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoEntities +
-demoapp.dom.types.javalang.strings.jpa.JavaLangStringJpaEntities +
-demoapp.dom.types.javalang.strings.persistence.JavaLangStringSeeding +
-demoapp.dom.types.javamath.bigdecimals.jdo.JavaMathBigDecimalJdoEntities +
-demoapp.dom.types.javamath.bigdecimals.jpa.JavaMathBigDecimalJpaEntities +
-demoapp.dom.types.javamath.bigdecimals.persistence.JavaMathBigDecimalSeeding +
-demoapp.dom.types.javamath.bigdecimals.samples.JavaMathBigDecimalSamples +
-demoapp.dom.types.javamath.bigintegers.jdo.JavaMathBigIntegerJdoEntities +
-demoapp.dom.types.javamath.bigintegers.jpa.JavaMathBigIntegerJpaEntities +
-demoapp.dom.types.javamath.bigintegers.persistence.JavaMathBigIntegerSeeding +
-demoapp.dom.types.javamath.bigintegers.samples.JavaMathBigIntegerSamples +
-demoapp.dom.types.javanet.urls.jdo.JavaNetUrlJdoEntities +
-demoapp.dom.types.javanet.urls.jpa.JavaNetUrlJpaEntities +
-demoapp.dom.types.javanet.urls.persistence.JavaNetUrlSeeding +
-demoapp.dom.types.javanet.urls.samples.JavaNetUrlSamples +
-demoapp.dom.types.javasql.javasqldate.jdo.JavaSqlDateJdoEntities +
-demoapp.dom.types.javasql.javasqldate.jpa.JavaSqlDateJpaEntities +
-demoapp.dom.types.javasql.javasqldate.persistence.JavaSqlDateSeeding +
-demoapp.dom.types.javasql.javasqldate.samples.JavaSqlDateSamples +
-demoapp.dom.types.javasql.javasqltimestamp.jdo.JavaSqlTimestampJdoEntities +
-demoapp.dom.types.javasql.javasqltimestamp.jpa.JavaSqlTimestampJpaEntities +
-demoapp.dom.types.javasql.javasqltimestamp.persistence.JavaSqlTimestampSeeding +
-demoapp.dom.types.javasql.javasqltimestamp.samples.JavaSqlTimestampSamples +
-demoapp.dom.types.javatime.javatimelocaldate.jdo.JavaTimeLocalDateJdoEntities +
-demoapp.dom.types.javatime.javatimelocaldate.jpa.JavaTimeLocalDateJpaEntities +
-demoapp.dom.types.javatime.javatimelocaldate.persistence.JavaTimeLocalDateSeeding +
-demoapp.dom.types.javatime.javatimelocaldate.samples.JavaTimeLocalDateSamples +
-demoapp.dom.types.javatime.javatimelocaldatetime.jdo.JavaTimeLocalDateTimeJdoEntities +
-demoapp.dom.types.javatime.javatimelocaldatetime.jpa.JavaTimeLocalDateTimeJpaEntities +
-demoapp.dom.types.javatime.javatimelocaldatetime.persistence.JavaTimeLocalDateTimeSeeding +
-demoapp.dom.types.javatime.javatimelocaldatetime.samples.JavaTimeLocalDateTimeSamples +
-demoapp.dom.types.javatime.javatimelocaltime.jdo.JavaTimeLocalTimeJdoEntities +
-demoapp.dom.types.javatime.javatimelocaltime.jpa.JavaTimeLocalTimeJpaEntities +
-demoapp.dom.types.javatime.javatimelocaltime.persistence.JavaTimeLocalTimeSeeding +
-demoapp.dom.types.javatime.javatimelocaltime.samples.JavaTimeLocalTimeSamples +
-demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo.JavaTimeOffsetDateTimeJdoEntities +
-demoapp.dom.types.javatime.javatimeoffsetdatetime.jpa.JavaTimeOffsetDateTimeJpaEntities +
-demoapp.dom.types.javatime.javatimeoffsetdatetime.persistence.JavaTimeOffsetDateTimeSeeding +
-demoapp.dom.types.javatime.javatimeoffsetdatetime.samples.JavaTimeOffsetDateTimeSamples +
-demoapp.dom.types.javatime.javatimeoffsettime.jdo.JavaTimeOffsetTimeJdoEntities +
-demoapp.dom.types.javatime.javatimeoffsettime.jpa.JavaTimeOffsetTimeJpaEntities +
-demoapp.dom.types.javatime.javatimeoffsettime.persistence.JavaTimeOffsetTimeSeeding +
-demoapp.dom.types.javatime.javatimeoffsettime.samples.JavaTimeOffsetTimeSamples +
-demoapp.dom.types.javatime.javatimezoneddatetime.jdo.JavaTimeZonedDateTimeJdoEntities +
-demoapp.dom.types.javatime.javatimezoneddatetime.jpa.JavaTimeZonedDateTimeJpaEntities +
-demoapp.dom.types.javatime.javatimezoneddatetime.persistence.JavaTimeZonedDateTimeSeeding +
-demoapp.dom.types.javatime.javatimezoneddatetime.samples.JavaTimeZonedDateTimeSamples +
-demoapp.dom.types.javautil.javautildate.jdo.JavaUtilDateJdoEntities +
-demoapp.dom.types.javautil.javautildate.jpa.JavaUtilDateJpaEntities +
-demoapp.dom.types.javautil.javautildate.persistence.JavaUtilDateSeeding +
-demoapp.dom.types.javautil.javautildate.samples.JavaUtilDateSamples +
-demoapp.dom.types.javautil.uuids.jdo.JavaUtilUuidJdoEntities +
-demoapp.dom.types.javautil.uuids.jpa.JavaUtilUuidJpaEntities +
-demoapp.dom.types.javautil.uuids.persistence.JavaUtilUuidSeeding +
-demoapp.dom.types.javautil.uuids.samples.JavaUtilUuidSamples +
-demoapp.dom.types.jodatime.jodadatetime.jdo.JodaDateTimeJdoEntities +
-demoapp.dom.types.jodatime.jodadatetime.persistence.JodaDateTimeJdoSeeding +
-demoapp.dom.types.jodatime.jodadatetime.samples.JodaDateTimeSamples +
-demoapp.dom.types.jodatime.jodalocaldate.jdo.JodaLocalDateJdoEntities +
-demoapp.dom.types.jodatime.jodalocaldate.persistence.JodaLocalDateJdoSeeding +
-demoapp.dom.types.jodatime.jodalocaldate.samples.JodaLocalDateSamples +
-demoapp.dom.types.jodatime.jodalocaldatetime.jdo.JodaLocalDateTimeJdoEntities +
-demoapp.dom.types.jodatime.jodalocaldatetime.persistence.JodaLocalDateTimeSeeding +
-demoapp.dom.types.jodatime.jodalocaldatetime.samples.JodaLocalDateTimeSamples +
-demoapp.dom.types.jodatime.jodalocaltime.jdo.JodaLocalTimeJdoEntities +
-demoapp.dom.types.jodatime.jodalocaltime.persistence.JodaLocalTimeSeeding +
-demoapp.dom.types.jodatime.jodalocaltime.samples.JodaLocalTimeSamples +
-demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoEntities +
-demoapp.dom.types.primitive.booleans.jpa.PrimitiveBooleanJpaEntities +
-demoapp.dom.types.primitive.booleans.persistence.PrimitiveBooleanSeeding +
-demoapp.dom.types.primitive.bytes.jdo.PrimitiveByteJdoEntities +
-demoapp.dom.types.primitive.bytes.jpa.PrimitiveByteJpaEntities +
-demoapp.dom.types.primitive.bytes.persistence.PrimitiveByteSeeding +
-demoapp.dom.types.primitive.chars.jdo.PrimitiveCharJdoEntities +
-demoapp.dom.types.primitive.chars.jpa.PrimitiveCharJpaEntities +
-demoapp.dom.types.primitive.chars.persistence.PrimitiveCharSeeding +
-demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoEntities +
-demoapp.dom.types.primitive.doubles.jpa.PrimitiveDoubleJpaEntities +
-demoapp.dom.types.primitive.doubles.persistence.PrimitiveDoubleSeeding +
-demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoEntities +
-demoapp.dom.types.primitive.floats.jpa.PrimitiveFloatJpaEntities +
-demoapp.dom.types.primitive.floats.persistence.PrimitiveFloatSeeding +
-demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoEntities +
-demoapp.dom.types.primitive.ints.jpa.PrimitiveIntJpaEntities +
-demoapp.dom.types.primitive.ints.persistence.PrimitiveIntSeeding +
-demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoEntities +
-demoapp.dom.types.primitive.longs.jpa.PrimitiveLongJpaEntities +
-demoapp.dom.types.primitive.longs.persistence.PrimitiveLongSeeding +
-demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntities +
-demoapp.dom.types.primitive.shorts.jpa.PrimitiveShortJpaEntities +
-demoapp.dom.types.primitive.shorts.persistence.PrimitiveShortSeeding +
-****
-
-.Dependencies
+|.Dependencies
 ****
 com.h2database:h2:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-audittrail-persistence-jdo:jar:<managed> +
@@ -1051,12 +814,7 @@ Artifact: demo-web
 Type: jar
 Directory: /examples/demo/web
 ----
-|.Components
-****
-demoapp.web._infra.utils.ThereCanBeOnlyOne +
-****
-
-.Dependencies
+|.Dependencies
 ****
 org.apache.isis.examples.apps:demo-domain:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed> +
@@ -1074,12 +832,7 @@ Artifact: demo-wicket-common
 Type: jar
 Directory: /examples/demo/wicket/common
 ----
-|.Components
-****
-demoapp.webapp.wicket.common.ui.custom.WhereInTheWorldPanelFactory +
-****
-
-.Dependencies
+|.Dependencies
 ****
 org.apache.isis.examples.apps:demo-web:jar:${project.version} +
 org.apache.isis.extensions:isis-extensions-fullcalendar-wicket-ui:jar:<managed> +
@@ -1484,7 +1237,7 @@ org.jmock:jmock:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/IsisModuleApplibChangeAndExecutionLoggers.adoc[IsisModuleApplibChangeAndExecutionLoggers], xref:refguide:applib:index/IsisModuleApplibMixins.adoc[IsisModuleApplibMixins], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/annotation/Action.adoc[Action], xref:refguide:applib:index/annotation/ActionLayout.adoc[A [...]
+xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/IsisModuleApplibChangeAndExecutionLoggers.adoc[IsisModuleApplibChangeAndExecutionLoggers], xref:refguide:applib:index/IsisModuleApplibMixins.adoc[IsisModuleApplibMixins], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/annotation/Action.adoc[Action], xref:refguide:applib:index/annotation/ActionLayout.adoc[A [...]
 ****
 
 |Apache Isis Core - Code Gen (ByteBuddy)
@@ -1647,6 +1400,7 @@ o.a.i.core.metamodel.valuesemantics.ClobValueSemantics +
 o.a.i.core.metamodel.valuesemantics.CommandDtoValueSemantics +
 o.a.i.core.metamodel.valuesemantics.DoubleValueSemantics +
 o.a.i.core.metamodel.valuesemantics.FloatValueSemantics +
+o.a.i.core.metamodel.valuesemantics.IdStringifierForSerializable +
 o.a.i.core.metamodel.valuesemantics.IntValueSemantics +
 o.a.i.core.metamodel.valuesemantics.InteractionDtoValueSemantics +
 o.a.i.core.metamodel.valuesemantics.LocalResourcePathValueSemantics +
@@ -1655,7 +1409,6 @@ o.a.i.core.metamodel.valuesemantics.LongValueSemantics +
 o.a.i.core.metamodel.valuesemantics.MarkupValueSemantics +
 o.a.i.core.metamodel.valuesemantics.OidDtoValueSemantics +
 o.a.i.core.metamodel.valuesemantics.PasswordValueSemantics +
-o.a.i.core.metamodel.valuesemantics.SerializableValueSemantics +
 o.a.i.core.metamodel.valuesemantics.ShortValueSemantics +
 o.a.i.core.metamodel.valuesemantics.StringValueSemantics +
 o.a.i.core.metamodel.valuesemantics.TreeNodeValueSemantics +
@@ -1746,6 +1499,7 @@ o.a.i.core.runtimeservices.memento.ObjectMementoServiceDefault +
 o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault +
 o.a.i.core.runtimeservices.menubars.bootstrap.MenuBarsServiceBS +
 o.a.i.core.runtimeservices.message.MessageServiceDefault +
+o.a.i.core.runtimeservices.placeholder.PlaceholderRenderServiceDefault +
 o.a.i.core.runtimeservices.publish.CommandPublisherDefault +
 o.a.i.core.runtimeservices.publish.EntityChangesPublisherDefault +
 o.a.i.core.runtimeservices.publish.EntityPropertyChangePublisherDefault +
@@ -2934,7 +2688,6 @@ Directory: /viewers/restfulobjects/rendering
 ----
 |.Components
 ****
-o.a.i.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder +
 o.a.i.viewer.restfulobjects.rendering.service.RepresentationService +
 o.a.i.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest +
 o.a.i.viewer.restfulobjects.rendering.service.acceptheader.AcceptHeaderServiceForRest$RequestFilter +
@@ -2948,6 +2701,7 @@ o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.ClassExcluderDefa
 o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.SwaggerSpecGenerator +
 o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.TaggerDefault +
 o.a.i.viewer.restfulobjects.rendering.service.swagger.internal.ValuePropertyFactoryDefault +
+o.a.i.viewer.restfulobjects.rendering.service.valuerender.JsonValueEncoderServiceDefault +
 ****
 
 .Dependencies
@@ -2959,7 +2713,7 @@ org.apache.isis.viewer:isis-viewer-restfulobjects-applib:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:viewer:index/restfulobjects/rendering/IResourceContext.adoc[IResourceContext], xref:refguide:viewer:index/restfulobjects/rendering/IsisModuleRestfulObjectsRendering.adoc[IsisModuleRestfulObjectsRendering], xref:refguide:viewer:index/restfulobjects/rendering/service/RepresentationService.adoc[RepresentationService], xref:refguide:viewer:index/restfulobjects/rendering/service/acceptheader/AcceptHeaderServiceForRest.adoc[AcceptHeaderServiceForRest], xref:refguide:viewer:index/ [...]
+xref:refguide:viewer:index/restfulobjects/rendering/IResourceContext.adoc[IResourceContext], xref:refguide:viewer:index/restfulobjects/rendering/IsisModuleRestfulObjectsRendering.adoc[IsisModuleRestfulObjectsRendering], xref:refguide:viewer:index/restfulobjects/rendering/service/RepresentationService.adoc[RepresentationService], xref:refguide:viewer:index/restfulobjects/rendering/service/acceptheader/AcceptHeaderServiceForRest.adoc[AcceptHeaderServiceForRest], xref:refguide:viewer:index/ [...]
 ****
 
 |Apache Isis Viewer - RO (Testing)
@@ -5684,17 +5438,17 @@ package "Tooling\n[Software System]" {
   rectangle "==Apache Isis - Tooling\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
   rectangle "==Apache Isis - Tooling - C4 Modeling\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
   rectangle "==Apache Isis - Tooling - CLI (Command Line Interface)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis - Tooling - Java DSL (Code Gen)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis - Tooling - Java Model (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis - Tooling - Java to Asciidoc (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis - Tooling - Java Model (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis - Tooling - Java to Asciidoc (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis - Tooling - Meta Programming\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
   rectangle "==Apache Isis - Tooling - Model for AsciiDoc\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
   rectangle "==Apache Isis - Tooling - Project Model (Code mining)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
 }
 2 .[#707070].> 3 : ""
 2 .[#707070].> 4 : ""
+2 .[#707070].> 6 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 7 : ""
-2 .[#707070].> 6 : ""
 2 .[#707070].> 8 : ""
 2 .[#707070].> 9 : ""
 @enduml
@@ -5768,24 +5522,6 @@ org.apache.isis.tooling:isis-tooling-model4adoc:jar:<managed> +
 org.apache.isis.tooling:isis-tooling-projectmodel:jar:<managed> +
 ****
 
-|Apache Isis - Tooling - Java DSL (Code Gen)
-[source,yaml]
-----
-Group: org.apache.isis.tooling
-Artifact: isis-tooling-dsl
-Type: jar
-Directory: /tooling/dsl
-----
-|Tools for Java meta-programming and runtime class generaton.
-
-.Dependencies
-****
-com.graphql-java:graphql-java:jar:${graphql-java.version} +
-com.squareup:javapoet:jar:${javapoet.version} +
-org.apache.isis.commons:isis-commons:jar:<managed> +
-org.apache.logging.log4j:log4j-core:jar:<managed> +
-****
-
 |Apache Isis - Tooling - Java to Asciidoc (Code Mining)
 [source,yaml]
 ----
@@ -5821,6 +5557,29 @@ com.github.javaparser:javaparser-core:jar:${javaparser.version} +
 org.apache.isis.commons:isis-commons:jar:<managed> +
 ****
 
+|Apache Isis - Tooling - Meta Programming
+[source,yaml]
+----
+Group: org.apache.isis.tooling
+Artifact: isis-tooling-metaprog
+Type: jar
+Directory: /tooling/metaprog
+----
+|Tools for Java meta-programming and runtime class generaton.
+
+.Dependencies
+****
+com.graphql-java:graphql-java:jar:<managed> +
+com.squareup:javapoet:jar:${javapoet.version} +
+org.apache.isis.commons:isis-commons:jar:<managed> +
+org.apache.logging.log4j:log4j-core:jar:<managed> +
+org.assertj:assertj-core:jar:<managed> +
+org.junit.jupiter:junit-jupiter-api:jar:<managed> +
+org.junit.jupiter:junit-jupiter-engine:jar:<managed> +
+org.junit.jupiter:junit-jupiter-params:jar:<managed> +
+org.junit.vintage:junit-vintage-engine:jar:<managed> +
+****
+
 |Apache Isis - Tooling - Model for AsciiDoc
 [source,yaml]
 ----
@@ -5889,12 +5648,12 @@ skinparam rectangle<<22>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<12>> {
+skinparam rectangle<<23>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<23>> {
+skinparam rectangle<<12>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -5979,12 +5738,12 @@ skinparam rectangle<<20>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<21>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
diff --git a/extensions/adoc/modules/ROOT/pages/about.adoc b/extensions/adoc/modules/ROOT/pages/about.adoc
index b5444f19f7..c08acdef5b 100644
--- a/extensions/adoc/modules/ROOT/pages/about.adoc
+++ b/extensions/adoc/modules/ROOT/pages/about.adoc
@@ -14,8 +14,7 @@ This page catalogues all the available extensions, but they are incorporated int
 
 
 |
-xref:userguide:fun:about.adoc[User Guide] +
-for core extensions:
+xref:userguide:fun:about.adoc[User Guide] (core extensions):
 
 include::userguide:ROOT:partial$extensions.adoc[]
 
diff --git a/extensions/core/executionoutbox/adoc/modules/executionoutbox/partials/module-nav.adoc b/extensions/core/executionoutbox/adoc/modules/executionoutbox/partials/module-nav.adoc
index 065e1bfd73..5221085ea8 100644
--- a/extensions/core/executionoutbox/adoc/modules/executionoutbox/partials/module-nav.adoc
+++ b/extensions/core/executionoutbox/adoc/modules/executionoutbox/partials/module-nav.adoc
@@ -1,6 +1,6 @@
 
 
 
-** xref:userguide:executionlog:about.adoc[Execution Log]
+** xref:userguide:executionoutbox:about.adoc[Execution Outbox]
 
 
diff --git a/security/adoc/modules/ROOT/partials/extensions.adoc b/security/adoc/modules/ROOT/partials/extensions.adoc
index 4906738fd6..2f953d87fc 100644
--- a/security/adoc/modules/ROOT/partials/extensions.adoc
+++ b/security/adoc/modules/ROOT/partials/extensions.adoc
@@ -1,5 +1,6 @@
 include::security:shiro-realm-ldap:partial$module-nav.adoc[]
 include::security:spring-oauth2:partial$module-nav.adoc[]
+include::security:keycloak:partial$module-nav.adoc[]
 include::security:secman:partial$module-nav.adoc[]
 include::security:audittrail:partial$module-nav.adoc[]
 include::security:sessionlog:partial$module-nav.adoc[]
diff --git a/security/keycloak/src/main/adoc/modules/keycloak/partials/module-nav.adoc b/security/keycloak/src/main/adoc/modules/keycloak/partials/module-nav.adoc
index bb357c6edd..12ef87fb94 100644
--- a/security/keycloak/src/main/adoc/modules/keycloak/partials/module-nav.adoc
+++ b/security/keycloak/src/main/adoc/modules/keycloak/partials/module-nav.adoc
@@ -1,3 +1,3 @@
 
 
-* xref:security:keycloak:about.adoc[Keycloak Implementation]
+** xref:security:keycloak:about.adoc[Keycloak Implementation]